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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2009, 20:08   #1
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию Как связать DBComboBox и DBGrid , чтобы...

Есть svyaz_table:TSimpleDataSet.
CommandType = ctQuery.
ACTIVE = TRUE.
В ней 2 атрибута CODE_HOBBI и FIO.
Привязываю HOBBI_SELECT: (DBComboBox) к SVYAZ_TABLE.
Заполняю :

Код:
with DataModule1 do
   begin
     SVYAZ_TABLE.Open;
     Win2kAppForm.HOBBI_SELECT.Items.Clear;
     svyaz_table.FIRST;
     while not svyaz_table.Eof do
       begin
         Win2kAppForm.HOBBI_SELECT.Items.add
         (svyaz_table.FieldByName('CODE_HOBBI').Value);
         svyaz_table.Next;
       end;
   end;
вписываю значение

Код:
HOBBI_SELECT.Text:=HOBBI_SELECT.items[0];

Как сделать так , чтобы 
 в DBGrid выдавались только те картежи , где 
CODE_HOBBI = HOBBI_SELECT.TEXT
пробовал :

Код:
with DataModule1 do
  begin
   Svyaz_Table.DataSet.CommandText:='SELECT * FROM SVYAZ WHERE CODE_HOBBI='+
   Win2kAppForm.FIO_SELECT.TEXT + ';';
   Svyaz_Table.Close;
   Svyaz_table.Open;
  end;
не выходит! открывается форма, в DBGrid выводится вся таблица из ресурсов. при попытке нажать на ComboBox пишет ошибку
InternalDataSet : Cannot perform this operation on an open dataset.
И чё с этим делать не знаю.

У нас принято оформлять код специальным тэгом - кнопочка "#".
Модератор
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось mihali4; 25.12.2009 в 13:13.
Rin вне форума Ответить с цитированием
Старый 12.12.2009, 20:35   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Зачем выиспользуете DBComboBox ? Какой в этом глубинный смысл ?
Используйте простой ComboBox и выборку делайте по его событию OnChange...
И перед установкой нового текста SQL не забывайте закрывать датасет.
А на время заполнения ComboBox блокируйте обработчик OnChange.
mihali4 вне форума Ответить с цитированием
Старый 12.12.2009, 20:40   #3
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

спасибо, щас попробую.

21:28

вот задумался и не понял такой вещи - как это "БЛОКИРОВАТЬ OnChange"?!?!?!
как это сделать с помощью кода ? (5)_(5)
установил обычный комбобокс .
закатал код :

Код:
procedure TWin2kAppForm.CChange(Sender: TObject);
begin
   with DataModule1 do
  begin
   Svyaz_Table.Close;
   Svyaz_Table.Active:=False;
   Svyaz_Table.DataSet.CommandText:='SELECT * FROM SVYAZ WHERE CODE_HOBBI='+
   Win2kAppForm.C.TEXT + ';';
   Svyaz_Table.Active:=True;
   Svyaz_table.Open;
  end;
end;

procedure TWin2kAppForm.CEnter(Sender: TObject);
begin
with DataModule1 do
   begin
     svyaz_table.Open;
     Win2kAppForm.C.Items.Clear;
     svyaz_table.FIRST;
     while not svyaz_table.Eof do
       begin
         Win2kAppForm.C.Items.add
         (svyaz_table.FieldByName('CODE_HOBBI').Value);
         svyaz_table.Next;
       end;
   end;
   C.Text:=C.items[0];
end;
то же самое что и с DBComboBox. Та же ошибка (((

У нас принято оформлять код специальным тэгом - кнопочка "#".
Модератор

У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом.
Модератор
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось mihali4; 25.12.2009 в 13:16.
Rin вне форума Ответить с цитированием
Старый 12.12.2009, 22:31   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
как это "БЛОКИРОВАТЬ OnChange"?
Просто организуете некий флаг (булева переменная) и ставите первым оператором в процедуре procedure TWin2kAppForm.CEnter(Sender: TObject); такой - myflag:=True; и последним - соответственно myflag:=False;
А вот в procedure TWin2kAppForm.CChange(Sender: TObject); самым первым пишем
if myflag then exit;
Все...

Теперь вот это.
Код:
Svyaz_Table.Close;
Svyaz_Table.Active:=False;
Это одно и то же, вообще-то... Как и
Код:
Svyaz_Table.Active:=True;
Svyaz_table.Open;
Вот что я понять не могу - какие БД компоненты вы используете?
1. Что такое Svyaz_Table
2. Что такое Svyaz_Table.DataSet
mihali4 вне форума Ответить с цитированием
Старый 12.12.2009, 22:37   #5
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

svyaz_table: TSimpleDataSet.
а svyaz_table.DataSet - это свойство TSimpleDataSet.
в модуле SimpleDS находится.

TSimpleDataSet = class(TCustomClientDataSet)
...
property DataSet: TInternalSQLDataSet read FDataSet;
...

Svyaz_Table.DataSet.CommandText вписываю потому что он не воспринимает просто Svyaz_Table.CommandText - вот так.
У компонента Svyaz_Table : TSimpleDataSet посмотрел свойства в объектном инспекторе. Там вкладка DataSet , а в этой вкладке свойство CommandText . Вот поэтому и решил попробовать прописать через DataSet.

23:00

даже с блокировкой OnChange он не хочет работать. Эх, пипец.
Если хочешь, могу скинуть либо исходник, либо программный код полностью с картинками.

23:08

при трасировке ошибка вылетает как раз после строки
Svyaz_Table.DataSet.CommandText:='S ELECT * FROM SVYAZ WHERE CODE_HOBBI='+ Win2kAppForm.C.TEXT + ';';
значит косяк в том , что нельзя Svyaz_Table.DataSet.CommandText присвоить какое-то значение. Только вот не понимаю, какого же хрена в объектном инспекторе его можно изменить, а при работе программы нет?
и как же это исправить?

У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом.
Модератор
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось mihali4; 25.12.2009 в 13:16.
Rin вне форума Ответить с цитированием
Старый 12.12.2009, 23:41   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Выкладывайте сюда. Только саму базу не забудьте.
Включите расширенный режим - там "скрепка"...
mihali4 вне форума Ответить с цитированием
Старый 12.12.2009, 23:45   #7
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

вот собственно вся мутатень.
Вложения
Тип файла: rar интерфейс.rar (539.2 Кб, 57 просмотров)
Тип файла: rar baza.rar (30.3 Кб, 33 просмотров)
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 13.12.2009, 00:05   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

У меня не стоит ни Интербэйс, ни Файрберд...

А кстати, DataSet.CommandType:=ctQuery установлена?

Попробуйте просто в режиме дизайна самому компоненту назначить какой-нибудь простой запросик и попытайтесь сделать Active:=True;

Да, и еще. Все соединения с базой должны быть закрыты и устанавливаться в нужное время только после запуска программы.

Последний раз редактировалось mihali4; 13.12.2009 в 00:10.
mihali4 вне форума Ответить с цитированием
Старый 13.12.2009, 00:23   #9
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

DataSet.CommandType:=ctQuery установлена.
В режиме дизайна он запрос исполняет без проблем, ну то есть Active устанавливается в True после того, как в CommandText ввожу запрос, а вот при работе с формой - нет. Вот это то это меня и убивает.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 13.12.2009, 00:36   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Встаньте брякой на строку
Код:
Svyaz_Table.DataSet.CommandText:='S ELECT * FROM SVYAZ WHERE CODE_HOBBI='+
Win2kAppForm.C.TEXT + ';';
Какое значение у Win2kAppForm.C.TEXT ?
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать так, чтобы в DBGrid выводилась таблица Excel Илюха БД в Delphi 10 06.05.2010 15:59
как связать таблицы в access, чтобы данные автоматически копировались? rudess Microsoft Office Access 1 15.08.2009 16:22
Как сделать так чтобы dBCOMBOBOX...... Gareevbo Общие вопросы Delphi 1 08.06.2009 19:59
Как сделать чтобы во время поиска по таблице не было видно перемещения по dbgrid? alxsev БД в Delphi 4 10.04.2009 19:03
связать прогу с outlook, чтобы автоматически отбирались письма с определенной темой Katrin Общие вопросы Delphi 1 02.07.2007 13:29