DBGrid again...
От: Rider Россия  
Дата: 11.02.02 08:59
Оценка:
Кто может помочь? У меня проблема — Необходимо в одном Гриде вывести данные из двух связанных таблиц.. Пусть главная таблица — Т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;
Re: DBGrid again...
От: Yurik США  
Дата: 12.02.02 02:26
Оценка: 1 (1)
Здравствуйте Rider, Вы писали:

R>Кто может помочь? У меня проблема — Необходимо в одном Гриде вывести данные из двух связанных таблиц.

С ходу — Calculated fields спасут отца русской демократии!
Можно сделать еще SQL запрос к этим двум таблицам и показывать его в гриде.
Вроде что-то еще можно было с LookUp-ами делать, но счас вспомнить не могу.
Re[2]: DBGrid again...
От: Rider Россия  
Дата: 12.02.02 07:25
Оценка:
Здравствуйте 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, другие становятся недоступными...
Re[3]: DBGrid again...
От: Yurik США  
Дата: 12.02.02 14:56
Оценка: 1 (1)
Здравствуйте 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. Добавь остальные поля, которые тебе нужны.
Re[4]: DBGrid again...
От: Rider Россия  
Дата: 13.02.02 05:32
Оценка:
Здравствуйте 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?
Re[5]: DBGrid again...
От: Yurik США  
Дата: 13.02.02 06:09
Оценка:
Здравствуйте Rider, Вы писали:

R>>И последний вопрос — от DBF я уйти не могу, т.к. проекты у нас создаются на фоксе с локальными таблицами , какой механизм лучше использовать для доступа кроме BDE?

Библиотек разных много: ADO (via ODBC or Jet), Apollo, ADS, Halcyon, Codebase, etc. Я несколько лет назад в похожей ситуации использовал Halcyon. Впечатления в целом положительные, хотя и не без глюков. Где брал — не помню, поищи на Гугле по fido7.ru.delphi.db, вроде не так давно что-то обсуждали.
Если тебе нужен read-only доступ, то все будет ОК, а вот если ты хочешь еще что-то править в фоксовских базах — тады ой! Два разных движка обязательно переругаются Как вариант — если это Visual Fox, то можно на нем написать COM-сервер и из Делфы его юзать
Re: DBGrid again...
От: Евкисий  
Дата: 13.02.02 07:30
Оценка:
В таблице T1 надо создать lookup field связать его по ключу с T2 и выбрать его результируещее значение, грид настроить на отображение нужных полей. И не надо никаких SQL'ей так и удобней и быстрее
Re[5]: DBGrid again...
От: Yurik США  
Дата: 13.02.02 14:56
Оценка:
Здравствуйте Rider, Вы писали:

Halcyon — www.grifsolu.com

P.S. Вау, Rider, так ты из Твери! Земляки!!!
Случайно не в Тверькоме работаешь? Уж больно знакомая ситуация.
Re[6]: DBGrid again...
От: Rider Россия  
Дата: 14.02.02 05:10
Оценка:
Здравствуйте Yurik, Вы писали:

Y>Здравствуйте Rider, Вы писали:


Y>Halcyon — www.grifsolu.com


Y>P.S. Вау, Rider, так ты из Твери! Земляки!!!

Y>Случайно не в Тверькоме работаешь? Уж больно знакомая ситуация.
R>Нет, я на почте работаю...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.