Здравствуйте Rider, Вы писали:
R>Кто может помочь? У меня проблема — Необходимо в одном Гриде вывести данные из двух связанных таблиц.
С ходу — Calculated fields спасут отца русской демократии!
Можно сделать еще SQL запрос к этим двум таблицам и показывать его в гриде.
Вроде что-то еще можно было с LookUp-ами делать, но счас вспомнить не могу.
Здравствуйте Rider, Вы писали:
Y>>Здравствуйте Rider, Вы писали:
R>> Попробовал SQL — заработало , но очень тормозит запрос типа: R>> Select * from T1,T2 where T1.kod=T2.kod,всё равно огромное спасибо Yurik!!
Попробуй создать индекс в Т2 по полю kod. Может, поможет. Хотя SQL+BDE+DBF=тормоз, однозначно! R>> Хотелось бы узнать по поводу CalcFields в Т1: таблица у меня DBF — отображается в гриде только поле CalcField, другие становятся недоступными...
Так ты, наверное, в Fields Editor-е добавил только это calc field. Добавь остальные поля, которые тебе нужны.
Кто может помочь? У меня проблема — Необходимо в одном Гриде вывести данные из двух связанных таблиц.. Пусть главная таблица — Т1, детэйл таблица — Т2. Таблицы связаны по полю kod, таблица Т2 состоит из двух полей: kod C(6),name C(35), в гриде отображается главная таблица Т1, необходимо выводить в столбце вместо её поля kod — значение Т2.name, причём чтобы это было одновременно для всех видимых строчек грида, после прокрутки вниз значения также должны обновляться в соответствии со значениями поля T1.kod. (Приведённый ниже код работает только для одной записи из Т1...)
Кто-нибудь мог бы помочь?
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var K,N:String;
begin
K:=Т1.FieldByName('KOD').AsString;
if(Т2.Locate('KOD',Trim(K),[loCaseInsensitive]))then
N:=Т2.FieldByName('NAME').AsString;
if(Column.FieldName='KOD')then
begin
with DBGrid1.Canvas do
begin
Brush.Color:=clWhite;
FillRect(Rect);
Font.Color:=clBlack;
TextOut(rect.Right-2-DBGrid1.Canvas.TextWidth(N),Rect.Top+2,N);
end;
end;
end;
Здравствуйте Yurik, Вы писали:
Y>Здравствуйте Rider, Вы писали:
R>>Кто может помочь? У меня проблема — Необходимо в одном Гриде вывести данные из двух связанных таблиц. Y>С ходу — Calculated fields спасут отца русской демократии! :) Y>Можно сделать еще SQL запрос к этим двум таблицам и показывать его в гриде. Y>Вроде что-то еще можно было с LookUp-ами делать, но счас вспомнить не могу. R> Попробовал SQL — заработало :super: , но очень тормозит запрос типа: R> Select * from T1,T2 where T1.kod=T2.kod,всё равно огромное спасибо Yurik!! R> Хотелось бы узнать по поводу CalcFields в Т1: таблица у меня DBF — отображается в гриде только поле CalcField, другие становятся недоступными...
Здравствуйте Yurik, Вы писали:
Y>Здравствуйте Rider, Вы писали:
Y>>>Здравствуйте Rider, Вы писали:
R>>> Попробовал SQL — заработало :super: , но очень тормозит запрос типа: R>>> Select * from T1,T2 where T1.kod=T2.kod,всё равно огромное спасибо Yurik!! Y>Попробуй создать индекс в Т2 по полю kod. Может, поможет. Хотя SQL+BDE+DBF=тормоз, однозначно! :) R>>> Хотелось бы узнать по поводу CalcFields в Т1: таблица у меня DBF — отображается в гриде только поле CalcField, другие становятся недоступными... Y>Так ты, наверное, в Fields Editor-е добавил только это calc field. Добавь остальные поля, которые тебе нужны. R> Ещё раз спасибо, остановился на Calc fields — добил, заработало, скорость приемлемая.. R>И последний вопрос — от DBF я уйти не могу, т.к. проекты у нас создаются на фоксе с локальными таблицами :-(, какой механизм лучше использовать для доступа кроме BDE?
Здравствуйте Rider, Вы писали:
R>>И последний вопрос — от DBF я уйти не могу, т.к. проекты у нас создаются на фоксе с локальными таблицами , какой механизм лучше использовать для доступа кроме BDE?
Библиотек разных много: ADO (via ODBC or Jet), Apollo, ADS, Halcyon, Codebase, etc. Я несколько лет назад в похожей ситуации использовал Halcyon. Впечатления в целом положительные, хотя и не без глюков. Где брал — не помню, поищи на Гугле по fido7.ru.delphi.db, вроде не так давно что-то обсуждали.
Если тебе нужен read-only доступ, то все будет ОК, а вот если ты хочешь еще что-то править в фоксовских базах — тады ой! Два разных движка обязательно переругаются Как вариант — если это Visual Fox, то можно на нем написать COM-сервер и из Делфы его юзать
В таблице T1 надо создать lookup field связать его по ключу с T2 и выбрать его результируещее значение, грид настроить на отображение нужных полей. И не надо никаких SQL'ей так и удобней и быстрее
Здравствуйте Yurik, Вы писали:
Y>Здравствуйте Rider, Вы писали:
Y>Halcyon — www.grifsolu.com
Y>P.S. Вау, Rider, так ты из Твери! Земляки!!! Y>Случайно не в Тверькоме работаешь? Уж больно знакомая ситуация. R>Нет, я на почте работаю...