С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
3 / 3 / 1
Регистрация: 02.04.2013
Сообщений: 115

Поиск информации в DBGrid через DBLookupComboBox

04.04.2013, 13:06. Показов 4516. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть форма, на ней элементы
ADOQuery, ADOConnection, DataSource
Все они подключены и выводят всю информацию в таблицу DBGrid
Из существующей таблице есть sql запрос, информация такая:
Машина, Дата, км1, км2, км3, км4, км0, километраж_итог,
150 1.04.2013 20 0 0 0 0 20
150 2.04.2013 45 25 0 0 0 70
151 1.04.2013 20 0 0 0 0 20
151 2.04.2013 20 0 0 0 0 20

На форму поставил DBLookupComboBox Подключил к элементам ADOQuery, DataSource через ListSourse и Key
Field
Нужно что бы при выборе в элементе DBLookupComboBox допустим машина 150 в грид выводилась информация о ней по нажатию на кнопку.

В ADOQuery получается одинаковые запросы:
SELECT t_ps.number, t_ps.data, t_ps.p_km_1, t_ps.p_km_2, t_ps.p_km_3, t_ps.p_km_4, t_ps.p_km_0, t_ps.it_p_km
FROM t_ps;

Процедура по нажатию на кнопку такая:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm6.Button1Click(Sender: TObject);
begin
 try
          ADOQuery1.Active:=false;
          ADOQuery1.FieldByName('number').AsString:=DBLookUpComboBox1.Text;
          ADOQuery1.Active:=true;
     except
        on error: EDatabaseError do begin
           MessageDlg('месседж'+
           error.Message ,mtError,[mbOK],0);
        end;
     end;
end;
Подскажите, что нужно изменить, добавить, что бы ошибку исключить по нажатию на кнопку? ругается на строку без наименования ошибки
Delphi
1
ADOQuery1.FieldByName('number').AsString:=DBLookUpComboBox1.Text;
При изменении ADOQuery1 на 2 такая же ошибка. Не пойму никак.
ЗЫж Сильно не пинайте
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.04.2013, 13:06
Ответы с готовыми решениями:

Поиск через DBLookupComboBox и ComboBox
Извините, если повторяюсь, но из прочитанного на форуме так и не нашёл ответа Есть бд с фамилиями, айдишниками и кучей всего, как...

DBGrid с DBLookupComboBox
На форме есть DBLookupComboBox и DBGrid когда я в DBLookupComboBox выбираю значение в DBGrid появляется ключ, а не значение. Как это...

DBLookupComboBox и DBGrid
Здравствуйте. Помогите, пожалуйста у меня таблицы Студенты и Группы связаны по ключевому полю "Номер_группы" у меня на форме...

10
Android
245 / 242 / 52
Регистрация: 19.01.2013
Сообщений: 1,896
Записей в блоге: 3
04.04.2013, 13:27
procedure TForm6.Button1Click(Sender: TObject);
begin
try
ADOQuery1.Active:=false;
ADOQuery1.FieldByName('number').AsString :=DBLookUpComboBox1.Text; // добавляешь
ADOQuery1.Active:=true;
except
on error: EDatabaseError do begin
MessageDlg('месседж'+
error.Message ,mtError,[mbOK],0);
end;
end;
end;

выделенные строки там 250% не нужны там.. и чего ты хочешь добится по нажатию этой кнопки ? поиска или добавления? - ты добавляешь !

Добавлено через 1 минуту
кури sql запрос лучше! в ADOQuery sql наверное лучше будет
0
3 / 3 / 1
Регистрация: 02.04.2013
Сообщений: 115
04.04.2013, 13:27  [ТС]
АА, а как сделать так что бы искал, подскажи пожалуйста...
0
Android
245 / 242 / 52
Регистрация: 19.01.2013
Сообщений: 1,896
Записей в блоге: 3
04.04.2013, 13:35
ну чтото типо этого можно попробывать:
Delphi
1
2
3
4
ADOQuery1.Sql.Clear;
ADOQuery1.Sql.Add('SELECT * FROM имятаблицы WHERE number = :FindValue');
ADOQuery1.Parameters.ParamByName('FindValue').Value:=DBLookUpComboBox1.Text;
ADOQuery1.Open;
1
3 / 3 / 1
Регистрация: 02.04.2013
Сообщений: 115
04.04.2013, 14:03  [ТС]
Да всё прекрасно получилось!
А для поиска необходимой даты как будет выглядеть процедура?

Delphi
1
2
3
4
ADOQuery1.Sql.Clear;
ADOQuery1.Sql.Add('Select * FROM t_ps WHERE data = FindValue');
ADOQuery1.Parameters.ParamByName('FindValue').Value:=DateTimePicker1.Date;
ADOQuery1.Open;
0
Android
245 / 242 / 52
Регистрация: 19.01.2013
Сообщений: 1,896
Записей в блоге: 3
04.04.2013, 14:05
Цитата Сообщение от ul_mralex Посмотреть сообщение
Да всё прекрасно получилось!
А для поиска необходимой даты как будет выглядеть процедура?

Delphi
1
2
3
4
ADOQuery1.Sql.Clear;
ADOQuery1.Sql.Add('Select * FROM t_ps WHERE data = FindValue');
ADOQuery1.Parameters.ParamByName('FindValue').Value:=DateTimePicker1.Date;
ADOQuery1.Open;
В принципе должно быть так попробуй
1
3 / 3 / 1
Регистрация: 02.04.2013
Сообщений: 115
04.04.2013, 14:29  [ТС]
Нет, не получается, выкидывает сразу с ошибкой: "несоответствие типов данных в выражении условия".
В базе на ячейке 'data' стоит тип дата/время, короткий формат времени.
Делаю естественно через компоненту DateTimePicker1.Date в свойствах DataFormat указано dfShort
0
Android
245 / 242 / 52
Регистрация: 19.01.2013
Сообщений: 1,896
Записей в блоге: 3
04.04.2013, 14:34
Цитата Сообщение от kaspersky Посмотреть сообщение
ADOQuery1.Parameters.ParamByName('FindVa lue').Value:=DateTimePicker1.Date;
сейчас не могу проверить код, попробуй вот так может и получится )


Delphi
1
2
3
4
ADOQuery1.Sql.Clear;
ADOQuery1.Sql.Add('Select * FROM t_ps WHERE data = FindValue');
ADOQuery1.Parameters.ParamByName('FindValue').AsDateTime:=DateTimePicker1.Date;
ADOQuery1.Open;
Добавлено через 1 минуту
или так
Delphi
1
2
3
4
ADOQuery1.Sql.Clear;
ADOQuery1.Sql.Add('Select * FROM t_ps WHERE data = FindValue');
ADOQuery1.Parameters.ParamByName('FindValue').Value:=DateTimeToStr(DateTimePicker1.Date);
ADOQuery1.Open;
0
3 / 3 / 1
Регистрация: 02.04.2013
Сообщений: 115
04.04.2013, 16:59  [ТС]
Надо что то новое придумать ) Путая таблица после нажатие на кнопку.

Добавлено через 1 час 1 минуту
И еще, как сделать правильно процедуру и запрос.
Нужно вывести например информацию по машине 150 за период с 1.04.2013 по 2.04.2013.
Так будет выглядеть запрос если делать в access
SQL
1
2
3
SELECT t_ps.number, t_ps.data, t_ps.it_p_km 
FROM t_ps
WHERE (((t_ps.number)=[Введите машину]) AND ((t_ps.data) BETWEEN [Введите начальную дату] AND [Введите конечную дату]));
С 1м пунктом понятно:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm6.Button1Click(Sender: TObject);
begin
 try
            ADOQuery1.Sql.Clear;
ADOQuery1.Sql.Add('SELECT * FROM t_ps WHERE number = :FindValue');
ADOQuery1.Parameters.ParamByName('FindValue').Value:=DBLookUpComboBox1.Text;
ADOQuery1.Open;
          except
        on error: EDatabaseError do begin
           MessageDlg('месседж:'+
           error.Message ,mtError,[mbOK],0);
        end;
     end;
       end;
Как это прописать все правильно, что бы задавать период дат через DateTimePicker1.Date

Добавлено через 48 минут
я что то недопонимаю...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm6.Button3Click(Sender: TObject);
begin
 try
ADOQuery1.Sql.Clear;
ADOQuery1.Sql.Add('SELECT * FROM t_ps WHERE data BETWEEN :first_date AND :last_date');
ADOQuery1.Parameters.ParamByName('first_date').Value:= DateTimePicker1.Date;
ADOQuery1.Parameters.ParamByName('last_date').Value:= DateTimePicker2.Date;
 
          except
        on error: EDatabaseError do begin
           MessageDlg('111'+
           error.Message ,mtError,[mbOK],0);
        end;
end;    end;
После нажатия на кнопку DBgrid очищается
0
Android
245 / 242 / 52
Регистрация: 19.01.2013
Сообщений: 1,896
Записей в блоге: 3
04.04.2013, 17:38
Цитата Сообщение от ul_mralex Посмотреть сообщение
я что то недопонимаю... Код Delphi1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm6.Button3Click(Sender: TObject);
begin
*try
ADOQuery1.Sql.Clear;
ADOQuery1.Sql.Add('SELECT * FROM t_ps WHERE data BETWEEN :first_date AND :last_date');
ADOQuery1.Parameters.ParamByName('first_ date').Value:= DateTimePicker1.Date;
ADOQuery1.Parameters.ParamByName('last_d ate').Value:= DateTimePicker2.Date;
except
* * * * on error: EDatabaseError do begin
* * * * * *MessageDlg('111'+
* * * * * *error.Message ,mtError,[mbOK],0);
* * * * end;
end; * *end;После нажатия на кнопку DBgrid очищается
это потому что ты делаешь новый запрос к бд.
0
3 / 3 / 1
Регистрация: 02.04.2013
Сообщений: 115
04.04.2013, 18:08  [ТС]
А иначе?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.04.2013, 18:08
Помогаю со студенческими работами здесь

Dblookupcombobox и dbgrid
Подскажите, пожалуйста, как передать значения из dblookupcombobox в dbgrid не IDишками, а словами (а именно чтобы в dbgrid было не id...

dblookupcombobox и dbgrid
Здравствуйте!У меня 2 таблицы одна с полями : №,фио, должность, пол, другая: №, пол.Подскажите пожалуйста как сделать так чтобы при выборе...

Dblookupcombobox и Dbgrid
Имеется форма с 2-мя Dblookupcombobox 1. Dblookupcombobox= Класс 2. Dblookupcombobox= Предмет(Дисциплина) Dbgrid=список учеников ...

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

DBLookupCombobox и DBGrid
Имеется проблема. У меня есть на форме DBLookupCombobox, который подключен к БД с информацией о фильмах и в него выводятся названия...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru