Модераторы: Rodman
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphi выборка из связанных таблиц, Фильтровать по ComBoBox 
:(
    Опции темы
Anakin
Дата 7.4.2016, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Добрый вечер.
Ребята направьте на путь истинный.
Имеем 2 Таблицы:
Первая таблица с именами клиентов и другими данными.
Код

SELECT ClientID,ClientName,ClientPhone,ClientEmail,ClientAdres,OrdID FROM Client


И также имеем таблицу с заказами:
Код

SELECT  CameraModel,CameraCol,CameraPrice,CameraSumma,CameraClient,ClientID FROM VideoOrder


Заполнение таблицы VideoOrder прост данные заполняются все из Edit'тов а полю ClientID присваивается значение из таблицы Client.
Всё как бы супер но есть одно но.

На форме имею ComboBox и Именами и ID клиентов.
И также есть DBGrid.
Нужно что бы происходила фильтрация по выбору в Combobox'е и отображалась в DBGrid.
Заполняю ComboBox так:
Код

   cbClientName.Clear;
  DataMod.qClientName.Close;
  DataMod.qClientName.SQL.Clear;
  DataMod.qClientName.SQL.Add('SELECT ClientID,ClientName,ClientPhone,ClientEmail,ClientAdres,OrdID FROM Client');
  DataMod.qClientName.Open;
  while not DataMod.qClientName.Eof do
  begin
    cbClientName.Items.AddObject(DataMod.qClientName.Fields.Fields[1].AsString, Pointer(DataMod.qClientName.Fields.Fields[0].AsInteger));
    DataMod.qClientName.Next;

  end;



и пытаюсь сделать фильтрацию так на событии ComboBox'а onSelect

Код

  DataMod.qCamSelect2.Close;
  DataMod.qCamSelect2.SQL.Clear;
  DataMod.qCamSelect2.SQL.Add('SELECT Client.*, VideoOrder.* FROM Client, VideoOrder WHERE VideoOrder.ClientID =:Prm');
  DataMod.qCamSelect2.Params.ParamByName('Prm').Value:=IntToStr(integer(cbClientName.Items.Objects[cbClientName.ItemIndex]));
  DataMod.qCamSelect2.Open;


Всё фильтруется но почему-то в DBGrid'е дублируется товар столько раз сколько клиентов, тоесть если у меня два клиента забиты то товар отобразится в DBGRID'е по два раза каждый, но в базе всё норм.
Где я накосячил с запросом ?
с УВ. Николай.

PM MAIL   Вверх
Vas
Дата 7.4.2016, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 825
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Без связывания таблиц записи так и будут отображаться. Перепишите запрос так
Код

SELECT Client.*, VideoOrder.* FROM Client, VideoOrder WHERE Client.ClientID = VideoOrder.ClientID  AND VideoOrder.ClientID =:Prm


P.S. Так как база не указана, то считаем что JOIN в ней отсутствует smile

Это сообщение отредактировал(а) Vas - 7.4.2016, 20:03


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Anakin
Дата 7.4.2016, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Спасибо огромное, ты меня выручил.
Всё работает, шас надо понять почему твой запрос работает а мой нет )))
Скопировать и вставить это одно но надо ещё и понять как оно работает )))
PM MAIL   Вверх
Vas
Дата 8.4.2016, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 825
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Без связывании выбирается все, обычное умножение матриц. Каждой строке первой таблицы сопоставляются ВСЕ строки второй таблицы. 
В твоем запросе фильтровалась только таблица VideoOrder и отфильтрованные строки сопоставлялись ВСЕМ строкам таблицы Client.
Как то так smile


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Google
  Дата 25.9.2017, 21:52 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1061 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.