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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.10.2009, 12:50   #1
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию База данных в Access, ADOQuery, организовать поиск

Имеется база данных в Access, ADOQuery, DataSource и DBGrid. База данных отображается в DBGrid с помощью вышеуказанных компонентов с именами FindQuery и FindSource соответственно. С отображением все понятно, вопросов нет.

Также на форме имеется ComboBox, с помощью которого нужно организовать поиск по ДБ. С организацией поиска тоже нет вопросов (пока), а вот как в комбобокс в Items занести данные из базы не понятно.

Мне нужно в ComboBox1 добавить данные из столбца "Производитель", при чем так, чтобы значения не повторялись. Пока что у меня не получается даже занести данные в КомбоБокс.

Вот такой код, написанный не без помощи поиска по форуму:
Код:
procedure TEquipForm.FormCreate(Sender: TObject);
var i,j: integer;
begin
DBGrid1.Visible:=False;
ComboBox1.Text:='';
ComboBox2.Text:='';
ComboBox1.Items.Clear;
ComboBox2.Items.Clear;
i:=DataModule1.FindQuery.RecordCount;
 for j:=0 to i - 1 do
 begin
 DataModule1.FindQuery.Active:=False;
 DataModule1.FindQuery.SQL.Clear;
 DataModule1.FindQuery.SQL.Add('SELECT Производитель FROM FindQuery');
 DataModule1.FindQuery.Active:=True;
 DataModule1.FindQuery.First;
 while not DataModule1.FindQuery.Eof do
   begin
   ComboBox1.Items.Add(DataModule1.FindQuery.FieldByName('Производитель').AsString);
   DataModule1.FindQuery.Next;
   end;
end;
end;
Программа запускается, но в итоге выдает ошибку



и ругается на строку, которая выделена жирным и подчеркнута.

Что это значит?
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума
Старый 22.10.2009, 13:50   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

посмотри на выделенный текст
Код:
 DataModule1.FindQuery.SQL.Add('SELECT Производитель FROM FindQuery');
и подумай - откуда должна делаться выборка?
может стоит указать имя таблицы с данными?!
soleil@mmc вне форума
Старый 22.10.2009, 13:57   #3
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

зачем здесь использовать ComboBox, если можно использовать DBCombobox?

вот такой запрос сделайте:
Код:
SELECT distinct Производитель FROM название таблицы
добавьте Dbcombobox, выберите ключевое поле (keyField) и поле, которое нужно отображать (ListField)
SlavaSH вне форума
Старый 22.10.2009, 14:19   #4
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
может стоит указать имя таблицы с данными?!
Да, это точно... Поменяла на имя таблицы:

Код:
 DataModule1.FindQuery.Active:=False;
 DataModule1.FindQuery.SQL.Clear;
 DataModule1.FindQuery.SQL.Add('SELECT Производитель FROM Cat_Table');
 DataModule1.FindQuery.Active:=True;
 DataModule1.FindQuery.First;
 while not DataModule1.FindQuery.Eof do
   begin
   ComboBox1.Items.Add(DataModule1.FindQuery.FieldByName('Производитель').AsString);
   DataModule1.FindQuery.Next;
   end;
Теперь происходит следующее:

If you wanna make the world a better place take a look at yourself and then make a change!

Последний раз редактировалось monushka; 22.10.2009 в 14:24.
monushka вне форума
Старый 22.10.2009, 14:24   #5
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от monushka Посмотреть сообщение
Теперь происходит следующее:

видимо это поле с предыдущего запроса (который по умолчанию). Добавьте новый Query и DBCombobox. Сделайте у него постоянный запрос
Код:
SELECT distinct Производитель FROM Cat_Table
и DBCombobox свяжите с этим Query
SlavaSH вне форума
Старый 22.10.2009, 14:42   #6
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Цитата:
Сообщение от SlavaSH Посмотреть сообщение
видимо это поле с предыдущего запроса (который по умолчанию). Добавьте новый Query и DBCombobox. Сделайте у него постоянный запрос
Код:
SELECT distinct Производитель FROM Cat_Table
и DBCombobox свяжите с этим Query
Так он выводит в DBGrid только столбец с производителем, а остальные нет... И то две строки. Два производителя и две строки. Но зато появляются названия производителей в ДБКомбобокс. Но плохо, что других столбцов нет... И при нажатии на ДБГрид вылетает ошибка: "Недостаточные или неполные сведения о ключевом поле..."

Интересно получилось, все производители переименовались в одного...
If you wanna make the world a better place take a look at yourself and then make a change!

Последний раз редактировалось monushka; 22.10.2009 в 15:09.
monushka вне форума
Старый 22.10.2009, 15:13   #7
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от monushka Посмотреть сообщение
Так он выводит в DBGrid только столбец с производителем, а остальные нет... И то две строки. Два производителя и две строки. Но зато появляются названия производителей в ДБКомбобокс. Но плохо, что других столбцов нет... И при нажатии на ДБГрид вылетает ошибка: "Недостаточные или неполные сведения о ключевом поле..."

Интересно получилось, все производители переименовались в одного...
так а вы что для DBGrid'а и Combox один и тот же Query используете???

Должно быть 2 Query. Тот который был у вас раньше оставьте как и был, а новый создайте, в котором укажите тот запрос, который я привёл и свяжите его с DBCombobox.
SlavaSH вне форума
Старый 22.10.2009, 15:19   #8
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Ключ?
наверное создали в запросе статичное поле (кликните 2 раза по компоненту квери и увидите список статичных полей)

если нужно локейтить по полю Ключ, то и включите его в текст запроса
при необходимости можно и DBLookupCombobox заюзать
soleil@mmc вне форума
Старый 22.10.2009, 15:39   #9
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Так, запуталась в край... Удалила все, буду заново пробовать разобраться! Спасибо всем за помощь.
Как только, так сразу отпишусь.
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума
Старый 22.10.2009, 17:38   #10
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

С одним DBComboBox'ом справилась. Вот так:

1. Здесь загружаем всех производителей из БД:

Код:
procedure TEquipForm.FormShow(Sender: TObject);
begin
DBComboBox1.Items.Clear;
DataModule1.NameQuery.Active:=False;
DataModule1.NameQuery.SQL.Clear;
DataModule1.NameQuery.SQL.Add('SELECT distinct Производитель FROM Cat_Table');
DataModule1.NameQuery.Active:=True;
DataModule1.NameQuery.First;
 while not DataModule1.NameQuery.Eof do
   begin
   DBComboBox1.Items.Add(DataModule1.NameQuery.FieldByName('Производитель').AsString);
   DataModule1.NameQuery.Next;
   end;
end;
2. Здесь осуществляем поиск по производителю из списка ДБКомбоБокса1 и тут же загружаем во второй ДБкомбобокс товар этого производителя:

Код:
procedure TEquipForm.DBComboBox1Change(Sender: TObject);
begin
DataModule1.FindQuery.Active:=False;
DataModule1.FindQuery.SQL.Clear;
DataModule1.FindQuery.SQL.Add('SELECT *');
DataModule1.FindQuery.SQL.ADD('FROM Cat_Table');
DataModule1.FindQuery.SQL.Add('WHERE Производитель LIKE '''+DBComboBox1.Text+'''');
DataModule1.FindQuery.Active:=True;
DBGrid1.Visible:=True;

DBComboBox2.Items.Clear;
DataModule1.ProductQuery.Active:=False;
DataModule1.ProductQuery.SQL.Clear;
DataModule1.ProductQuery.SQL.Add('SELECT distinct Товар FROM Cat_Table');
DataModule1.ProductQuery.Active:=True;
DataModule1.ProductQuery.First;
 while not DataModule1.ProductQuery.Eof do
   begin
   DBComboBox2.Items.Add(DataModule1.ProductQuery.FieldByName('Товар').AsString);
   DataModule1.ProductQuery.Next;
   end;
end;
Но здесь проблема... Выдается список всех товаров всех производителей и почему-то выбрат ни один нельзя! А как сделать так, чтобы появлялся список товаров только выбранного производителя? Т.е. в соответствии с выбранной позицией в ДБКомбоБокс1.
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума
Закрытая тема


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста сделать поиск по базе данных в форме! Access 2003 LilijaSt Microsoft Office Access 19 25.12.2010 10:13
Не могу организовать поиск! teenboy БД в Delphi 3 03.05.2010 17:17
База данных Access Xeon332 Помощь студентам 5 19.01.2009 03:13
База данных приделать поиск demon9999 Помощь студентам 0 03.06.2008 00:26
как организовать поиск по дате... Pitbull БД в Delphi 18 24.06.2007 22:28