Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 28.04.2012, 09:49
Ser-kot Ser-kot вне форума
Прохожий
 
Регистрация: 26.04.2012
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
ну все правильно:

00001 Иванов (Молоко)
00002 Петров (Хлеб)
00002 Петров (Масло)

вообще DISTINCT спасет

а описание проблемы кривое:




как она может повторяться, если там данные из таблицы, которые не повторяются???

Так сначала, две таблицы связаны по полю ID. И когда клиент сделал несколько заказов то это отображается во второй таблице, а так как они связаны по ID и в первом dbgride начинают повторяться записи.
Ответить с цитированием
  #17  
Старый 28.04.2012, 09:51
Ser-kot Ser-kot вне форума
Прохожий
 
Регистрация: 26.04.2012
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
select DISTINCT ID, FIO from (klient LEFT OUTER JOIN zakaz ON klient.ID=zakaz.ID) ORDER BY FIO

попробую что получится, спасибо. Отпишусь.

Последний раз редактировалось Ser-kot, 28.04.2012 в 09:54.
Ответить с цитированием
  #18  
Старый 28.04.2012, 10:09
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

лично я так себе представляю эту задачку:
-на форме 2 грида: первый сверху, второй снизу
-в первом гриде отображаются все клиенты: ID | ФИО
-во втором отображаются заказы сделаные выбраным клиентом ID | Заказы
-данные первого грида статичны, по ним можно только перемещаться, ну там добавлять/удалять
-данные во втором меняются в зависимости на каком клиенте находится указатель в первом гриде, т.е. отображают заказы только по этому клиенту

обратная реализация: во втором гриде отображаются клиенты, которые делали заказ, который выбран в первом гриде. тогда запрос заказов будет статичным, а клиентов динамическим.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #19  
Старый 28.04.2012, 10:25
Ser-kot Ser-kot вне форума
Прохожий
 
Регистрация: 26.04.2012
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ser-kot
попробую что получится, спасибо. Отпишусь.

Не помогло, тоже самое. Всеравно размножаются...
Ответить с цитированием
  #20  
Старый 28.04.2012, 10:31
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от Ser-kot
Не помогло, тоже самое. Всеравно размножаются...
Бесполезно ждать помощи, если вы не можете или не желаете объяснить, что у вас в первом гриде, что во втором (имеется в виду ЗАПРОСЫ, точные а не "для примера")
P.S. Да. и самое важное, опишите прям по пунктам, чего Вы добиться пытаетесь. Может быть можно все и проще сделать, мы поможем
Прямо только типа такого:
1. Нажимаю такую-то кнопку.
2. В первой таблице происходит следующее.
3. Во второй таблице происходит следующее и т.п.
__________________
Google в помощь

Последний раз редактировалось Ildar-tsr, 28.04.2012 в 10:46.
Ответить с цитированием
  #21  
Старый 28.04.2012, 11:10
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от Ser-kot
Не помогло, тоже самое. Всеравно размножаются...
oh, man
Код:
SQL.Text:='select distinct id, clientname from (Clients.dbf c left outer join Orders.dbf o on c.id=o.id)';
Вложения
Тип файла: rar distinct.rar (2.0 Кбайт, 2 просмотров)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #22  
Старый 28.04.2012, 12:32
Ser-kot Ser-kot вне форума
Прохожий
 
Регистрация: 26.04.2012
Сообщения: 14
Репутация: 10
По умолчанию

ну если хотите вот полный запрос
select * from ((((klient left outer join zakaz on klient.id = zakaz.id) left outer join rayon ON rayon.kod=klient.ray) left outer join karta ON karta.nom=klient.karta) left outer join menedger ON menedger.nom=klient.men) order by fio


поля базы klient : id, fio, ray, karta, men.
Поля базы zakaz: id, tovar
поля базы rayon: kod, nazvanie
поля базы karta: nom, tip
поля базы menedger: nom, fiom

в dbgrid1 отображаются id, фамилия клиента, район проживания, тип дисконтной карты, имя менеджера.

В dbgrid 2 отображаются: id, и название заказа который сделал клиент.

Последний раз редактировалось Ser-kot, 28.04.2012 в 12:35.
Ответить с цитированием
  #23  
Старый 28.04.2012, 13:11
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от Ser-kot
в dbgrid1 отображаются id, фамилия клиента, район проживания, тип дисконтной карты, имя менеджера.

В dbgrid 2 отображаются: id, и название заказа который сделал клиент.
т.е. это напрашивается само-собой.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #24  
Старый 28.04.2012, 14:08
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

А теперь познавательный эксперимент!
Добавьте на форму кнопку и пропишите:
Код:
procedure TForm1.Button1Clikc(Sender: TObject);
var
  q: TADOQuery;
begin
  q:= TADOQuery.Create(nil);
  q.Connection:= ADOConnection1; //тут свой коннект конечно же
  q.SQL.Text:= 'select * from (klient left join zakaz on klient.id = zakaz.id)';
  q.Open;
  ShowMessage(inttostr(q.RecordCount));
  q.Close;
  q.Free;
end;
Какое число выйдет?
__________________
Google в помощь
Ответить с цитированием
  #25  
Старый 28.04.2012, 15:55
Ser-kot Ser-kot вне форума
Прохожий
 
Регистрация: 26.04.2012
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ildar-tsr
Какое число выйдет?

Выдает 372.
Ответить с цитированием
  #26  
Старый 28.04.2012, 16:00
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Таблицы уже позаполняли?
База данных на чем?
__________________
Google в помощь
Ответить с цитированием
  #27  
Старый 28.04.2012, 21:26
Ser-kot Ser-kot вне форума
Прохожий
 
Регистрация: 26.04.2012
Сообщения: 14
Репутация: 10
По умолчанию

Да таблицы уже заполнены, причем лет так 15 назад. Та старая прога запускается через bat -овский файл. На чем написана не знаю. Вот понадобилось добавить запросов с выводом на печать. Возможно писалась на кларионе.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter