Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824

DataSet и изменение запроса в зависимости от выбранной строки DbGrid

12.05.2013, 21:42. Показов 6464. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Есть 2 компонента. DBGridSuppliers (содержит постащиков) и DBGridSuppliersGoods (содержит товары поставщиков, одно из полей записи - SuppliersGoods_ID - то есть указание на поставщика).

Хочу сделать так, чтобы по нажатию на строку в DBGridSuppliers в DBGridSuppliersGoods показывались только товары опеределенного поставщика.
Итого:
Я понял, что нужно править событие DBGridSuppliers OnCellClick. То есть по клику по строке. Я понял как взять ID поставщика.
Delphi
1
2
3
4
5
6
7
procedure TFrameSuplliersList.DBGridSuppliersCellClick(Column: TColumn);
var
  ID: Integer;
begin
  ID := DBGridSuppliers.DataSource.DataSet.FieldValues['Supplier_ID'];
  //DBGridGoods.DataSource.DataSet.Edit
end;
Теперь мне нужно поменять каким-то образом DataSet.CommandText, который привязан к DBGridSuppliersGoods. Я предполагаю, что нужно юзать Parameters. Но не очень понимаю как.

Грубо говоря. У меня был запрос в дата сет select * from SuppliersGoods, надо его изменить и получить select * from SuppliersGoods where SuppliersGoods_SupplierID = ' тут ID записи той строки, которая была выбрана '. Выручайте

С прошедшими праздниками.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.05.2013, 21:42
Ответы с готовыми решениями:

Изменение запроса в зависимости от выбранных строк в нескольких DbGrid (в SQL получить значения из нескольких DataSet)
Здравствуйте. Есть таблицы и компоненты: Tbl_authors – Таблица авторов. С ней связаны компоненты: - ADOTable_authors, -...

Сохранить данные из выбранной строки в dbgrid
в общем, имеется форма на ней dbgrid и множество строк, если я выберу одну из них и нажму кнопку, то данные записываются в другую таблицу....

Получить значение определенной ячейки из выбранной юзером строки в DbGrid
Каким образом получить значение определенной одной ячейки из выбранной юзером строки в DBGrid? Грид подвязат к DataSourse-у а тот в свою...

8
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
13.05.2013, 06:56
1. В компоненте DataSet проверить и установить свойство ParamCheck = True;
2. where SuppliersGoods_SupplierID = :Param //(Param - имя параметра, на подобии переменой)
3.
Delphi
1
2
3
IBDataSet1.Active:=False;
IBDataSet1.Prepare;
IBDataSet1.ParamByName('Param').AsInteger:= DBGridSuppliers.DataSource.DataSet.FieldValues['Supplier_ID'] ;
Вроде все.
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
13.05.2013, 20:54  [ТС]
ZfoxAK, не проверяю пока даже работает ли ваша команда.

сам у себя сделал вот таким образом и оно работает.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TMainForm.FrameSuplliersListCheckBoxOnlyWithContractsClick(
  Sender: TObject);
begin
  if(MainForm.FrameSuplliersList.CheckBoxOnlyWithContracts.State = cbUnchecked) then
  begin
    MainForm.TmpQuery.Close;
    MainForm.TmpQuery.SQL.Clear;
    MainForm.TmpQuery.SQL.Add('select * from Suppliers');
    MainForm.TmpQuery.Open;
  end;
 
  if(MainForm.FrameSuplliersList.CheckBoxOnlyWithContracts.State = cbChecked) then
  begin
    MainForm.TmpQuery.Close;
    MainForm.TmpQuery.SQL.Clear;
    MainForm.TmpQuery.SQL.Add('select * from Suppliers where Supplier_Status = 1');
    MainForm.TmpQuery.Open;
  end;
  MainForm.TmpQuery.DataSource := nil;
  MainForm.FrameSuplliersList.DBGridSuppliers.DataSource.DataSet := TmpQuery;
end;
можете пошагово пояснить как работает Ваш алгоритм.
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
20.05.2013, 21:15  [ТС]
Работать - работает. Но при взаимодействиях с другими частями программы работает через одно место.

Поясните пожалуйста принцип?
2 пункт куда вписывать?
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
21.05.2013, 13:02
Цитата Сообщение от ZfoxAK Посмотреть сообщение
where SuppliersGoods_SupplierID = :Param //(Param - имя параметра, на подобии переменой)
В этом пункте я указал часть запроса. т.е. эту част нужно поместить в компоненту через которую вы обращаетесь к базе. Query или т.п. в данном случае примерно так
Цитата Сообщение от VladSharikov Посмотреть сообщение
MainForm.TmpQuery.SQL.Add('select * from Suppliers where Supplier_Status = :Param');
Принцы такой в запрос помещается перепенная - параметр, обозначается : param (имя любое, двоеточие обозначает что за ним идет имя параметра.
т.к. я предложил вариаент для компонент работающих с СУБД fireBird, другие компоненты работающие с другими СУБД могут не содержать такого свойства

Цитата Сообщение от ZfoxAK Посмотреть сообщение
IBDataSet1.Prepare;
используется как предварительная обработка запроса и определение наличия в запросе параметра

Цитата Сообщение от ZfoxAK Посмотреть сообщение
IBDataSet1.ParamByName('Param').AsIntege r:= DBGridSuppliers.DataSource.DataSet.Field Values['Supplier_ID'] ;
Здесь идет присвоение параметру оперделенного значения через свойство ParamByName - которое находит параметр по имени AsInteger определяет тип параметра Integer после := передаете значение. вместо AsInteger можно использоват более универсальное свойство Value, но тогда тип передаваемого значение на вашей совести.
После определения значений параметров производите запрос к базе.
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
22.05.2013, 23:19  [ТС]
ZfoxAK, понял.

написал бОльшую часть приложения на обычных ADODataSet.
Вы приводите пример с IBDataSet. При попытке заменить хотя бы 1 начал ругаться на отсутствие библиотек и т.д., потому менять на IB не стал. С ADODataSet ваш вариант не очень хочет работать. Ругается на неизвестный синтаксис ":" перед "Param".
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
23.05.2013, 05:37
Почему созданый парамет в компоненте не работате хз знает. Может мастера подскажут?! ))
Я обошел таким вариантом.
ADODataSet1.Parameters.CreateParameter(' Param', ftInteger, pdInput,10,12); Имя параметра, тип параметра, для ввода/вывод, размер поля, значение по умолчанию
ADODataSet1.Parameters.ParamByName('Para m').Value:= значение ...

Добавлено через 8 минут
Цитата Сообщение от VladSharikov Посмотреть сообщение
потому менять на IB
Если работатет с СУБД FireBird, то настоятельно рекомендую использовать специально заточенные под это СУБД компоненты. Если с другой СУБД, целесообразно использовать как вариант ADO.
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
26.05.2013, 22:39  [ТС]
ZfoxAK, пока что избавился от той ошибки , немного другим путем.

А что если мне нужно в ADOTable сделать то же самое? выбрать из определенной таблице с каким-то параметром?
мой способ не катит с adotable)

p.s.: нет не с FB работаю.
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
27.05.2013, 12:26
Цитата Сообщение от VladSharikov Посмотреть сообщение
выбрать из определенной таблице с каким-то параметром?
думаю только по средством фильтра. Может для реализации вашей идеи заменить Table на Query?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2013, 12:26
Помогаю со студенческими работами здесь

Работа с DataSet и DBGrid: осуществить добавление новой строки
Ребята,помогите. работаю в delphi и с базой firebirds. проблема такая: нужно осуществить добавление новой строки. при открытии формы курсор...

Как сделать вызов формы по нажатию на ячейку DBGrid, с информацией выбранной строки?
всем привет, я делаю дипломную работу на тему (личная карточка пациента), хотелось бы узнать как сделать вызов формы из Dbgrida по нажатию...

При (двойном) клике на строке в dbgrid отображать в другой форме информацию из выбранной строки грида
Ребят помогите плз. Хочу сделать так чтобы при (двойном) клике на строке в dbgride открывалась 2 форма и на ней в компонент memo выводилась...

Как вывести в DBGrid информацию только по выбранной строке в другой таблице DBGrid?
У меня есть 3 таблицы - Компании, Адреса и Квартиры. Компании содержит поля - Код компании и название Адреса содержит поля - Код...

Открыть картинку в PictureBox, в зависимости от выбранной строки в ComboBox
Доброго времени суток) Возник такой вопрос, как открыть картинку в picturebox, в зависимости от выбранной строки в combobox? мои...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru