Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2009, 16:39   #1
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию

Всем здравствуйте!
Пишу программу, которая импортирует данные из бд. Вопрос в следующем:
Есть таблицы Invoices и Clients. У таблицы Invoices есть поле clnum, и у таблицы Clients есть такое поле (оно же - первичный ключ) и clname (имя клиента).
Так вот, как организовать запрос или алгоритм получения атрибутов заказа, где вместо clnum будет имя клиента?...

В StringGrid должны выводится все заказы с заданными атрибутами, но вместо clnum должно выводится имя клиента (clname)

Код:
ibq.SQL.Text := 'SELECT invno,invdate,clnum,dostaddr FROM INVOICES ORDER BY invno';
...
for i := 0 to ibq.RecordCount - 1 do
  begin
    Clients.SQL.Text := format('SELECT clname FROM CLIENTS WHERE clnum = %d',
      [ibq.FieldByName('clnum').AsInteger]);
    Clients.Open;
    sg.Rows[i+1].Text := format('%d'+#13+'%s'+#13+'%s'+#13+'%s', [ibq.FieldByName('invno').AsInteger,
      DateToStr(ibq.FieldByName('invdate').AsDateTime), Clients.FieldByName('clname').AsString,
      ibq.FieldByName('dostaddr').AsString]);
    ibq.Next;
  end;
Но я думаю, что должен быть другой, более умный способ вывода данных...
Может быть можно сразу соответствующий sql запрос составить?

Последний раз редактировалось mihali4; 15.11.2009 в 22:13.
Hottabych вне форума Ответить с цитированием
Старый 15.11.2009, 19:37   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

учите СКЛ чтобы не придусывать каждый раз "велосипед" да еще на паровой тяге
Код:
select 
  i.invno,
  i.invdate,
  c.clnum,
  c.clname,
  i.dostaddr 
from 
  invoices i,
  clients c
where i.clnum = c.clnum
order by i.invno
условие объединения может быть и другим (в смысле, внешним)
soleil@mmc вне форума Ответить с цитированием
Старый 15.11.2009, 22:09   #3
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию

Спасибо soleil@mmc, все работает, только если clnum повторяется, записи тоже дублируются, но с этим я как-нибудь справлюсь...
Hottabych вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про связь между двумя таблицами Vit@L БД в Delphi 8 21.07.2009 06:37
Связь между двумя таблицами. megaten Microsoft Office Access 5 17.05.2009 14:17
Связи между таблицами! Alexij БД в Delphi 1 10.06.2008 18:11
Связь между таблицами Катрина БД в Delphi 3 17.05.2008 18:24
Связь с таблицами Nikolaeva Общие вопросы Delphi 1 04.10.2007 15:09