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

Delphi Sources



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

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

Здравствуйте, решив одну проблему появилась другая

Существует 2 таблицы. В 1-ой указано ID (номер клиента) FIO (Ф.И.О. клиента) , а во 2-ой таблице указаны ID (номер клиента), ZAKAZI (заказы которые сделал клиент).

Итак на форме 2 компанента DBGrid. На первом DBGrid отображена первая таблица, а на втором соответственно вторая. Связаны между собой по ID (номер клиента).

ТАБЛИЦА 1
ID FIO
00001 Иванов
00002 Петров


ТАБЛИЦА2
ID ZAKAZI
00001 Молоко
00002 Хлеб
00002 Масло



DBGrid1 отображает эту информацию так:

ID FIO
00001 Иванов
00002 Петров
00002 Петров <- эта запись повторяется так как во втором Grid-e два заказа по ID 00002.

Не подскажите ли как сделать так, чтобы а DBgrid1 информация не повторялась, а убирались повторные строки. Поменять таблицы не могу, от них работают и другие приложения. Надеюсь на Вашу помощь
Ответить с цитированием
  #2  
Старый 28.04.2012, 00:08
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

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

Нет, мне нужно чтобы при нажатии кнопки делался запрос "Кто из клиентов покупал молоко", и чтобы это отображалось в dbgrid1. А получается, что если клиент купил молоко 2 раза, то и в dbgri1 он отображается дважды, соответственно и в отчет он выводится дважды.
Ответить с цитированием
  #4  
Старый 28.04.2012, 08:19
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Поделитесь запросом, который возвращает данные в dbgrid1.
__________________
Google в помощь
Ответить с цитированием
Этот пользователь сказал Спасибо Ildar-tsr за это полезное сообщение:
Ser-kot (28.04.2012)
  #5  
Старый 28.04.2012, 08:39
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

в каждом запросе (Query) оставить выборку только из одной (соответствующей) таблицы, в запросе покупок использовать параметризированый запрос с настроеным свойством DataSource на клиентов.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
Ser-kot (28.04.2012)
  #6  
Старый 28.04.2012, 08:45
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от NumLock
в каждом запросе (Query) оставить выборку только из одной (соответствующей) таблицы, в запросе покупок использовать параметризированый запрос с настроеным свойством DataSource на клиентов.
Он просто в запросе неправильно таблицы связал
__________________
Google в помощь
Ответить с цитированием
Этот пользователь сказал Спасибо Ildar-tsr за это полезное сообщение:
Ser-kot (28.04.2012)
  #7  
Старый 28.04.2012, 08:57
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от Ildar-tsr
Он просто в запросе неправильно таблицы связал
ну...или просто не сгруппировал...GROUP-ом
Ответить с цитированием
Этот пользователь сказал Спасибо Pilot_Red за это полезное сообщение:
Ser-kot (28.04.2012)
  #8  
Старый 28.04.2012, 09:19
Ser-kot Ser-kot вне форума
Прохожий
 
Регистрация: 26.04.2012
Сообщения: 14
Репутация: 10
По умолчанию

CommandText:='select * from (klient LEFT OUTER JOIN zakaz ON klient.ID=zakaz.ID) ORDER BY FIO. - вот такой у меня запрос. А потом через filtered.
Ответить с цитированием
  #9  
Старый 28.04.2012, 09:22
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от Ser-kot
CommandText:='select * from (klient LEFT OUTER JOIN zakaz ON klient.ID=zakaz.ID) ORDER BY FIO. - вот такой у меня запрос. А потом через filtered.
Странно, вообще этот запрос возвращает 4 поля и 2 записи
Как получилось
Код:
ID FIO
00001 Иванов
00002 Петров
00002 Петров <- эта запись повторяется так как во втором Grid-e два заказа по ID 00002.
непонятно
__________________
Google в помощь
Ответить с цитированием
Этот пользователь сказал Спасибо Ildar-tsr за это полезное сообщение:
Ser-kot (28.04.2012)
  #10  
Старый 28.04.2012, 09:35
Ser-kot Ser-kot вне форума
Прохожий
 
Регистрация: 26.04.2012
Сообщения: 14
Репутация: 10
По умолчанию

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

ну все правильно:

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

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

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

Цитата:
На первом DBGrid отображена первая таблица, а на втором соответственно вторая
Цитата:
Не подскажите ли как сделать так, чтобы а DBgrid1 информация не повторялась

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

Последний раз редактировалось NumLock, 28.04.2012 в 09:41.
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
Ser-kot (28.04.2012)
  #12  
Старый 28.04.2012, 09:38
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

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

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

вообще DISTINCT спасет
Как получить такой результат?
__________________
Google в помощь
Ответить с цитированием
Этот пользователь сказал Спасибо Ildar-tsr за это полезное сообщение:
Ser-kot (28.04.2012)
  #13  
Старый 28.04.2012, 09:43
Ser-kot Ser-kot вне форума
Прохожий
 
Регистрация: 26.04.2012
Сообщения: 14
Репутация: 10
По умолчанию

Вставляю DISTINCT:

CommandText:='select DISTINCT * from (klient LEFT OUTER JOIN zakaz ON klient.ID=zakaz.ID) ORDER BY FIO.

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

select DISTINCT ID, FIO from (klient LEFT OUTER JOIN zakaz ON klient.ID=zakaz.ID) ORDER BY FIO
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
Ser-kot (28.04.2012)
  #15  
Старый 28.04.2012, 09:49
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от NumLock
select DISTINCT ID, FIO from (klient LEFT OUTER JOIN zakaz ON klient.ID=zakaz.ID) ORDER BY FIO
Только поле id надо уточнить:
Код:
select DISTINCT klient.ID, FIO from (klient LEFT OUTER JOIN zakaz ON klient.ID=zakaz.ID) ORDER BY FIO
__________________
Google в помощь
Ответить с цитированием
Этот пользователь сказал Спасибо Ildar-tsr за это полезное сообщение:
Ser-kot (28.04.2012)
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter