Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Andrey19951
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 28
1

ADOTable: поиск через 2 Edit-a

24.05.2017, 19:41. Просмотров 1646. Ответов 57

Доброго времени суток. Столкнулся с очень неприятной ситуацией. В общем у меня есть две формы. На первой форме у меня DBGrid с номером, названием поезда. Вторая форма открывает расписание этого поезда через вот такую процедурку

Delphi
1
2
3
4
5
6
7
if Form2.ADOTable1.TableName=Form1.DBGrid1.DataSource.DataSet.Fields.Fields[i].Value then
      begin
        Form2.Label1.Caption:='Поезд №105 Киев - Одесса';
        Form2.DataSource1.DataSet:=Form2.ADOTable1;
        Form2.ADOTable1.Active:=true;
        Form2.ShowModal;
      end
Так вот мне нужно чтобы при вводе в Edit1 и Edit2 станций отправления и прибытия в DBGrid на первой форме остались только те поезда (строки), в расписании которых (ADOTable) есть эти значения (из Edit1 и Edit2 по порядку).
ADOQuery использовать не получается, потому что у меня в процедуре сравнивается текст ячейки с названием таблицы. Огромнейшее спасибо, кто откликнется!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2017, 19:41
Ответы с готовыми решениями:

Поиск в DBGrid через Edit
Всем привет, и снова нужна помощь... У меня есть формы, возьмем к примеру одну...

Поиск в dbgrid через 2 edit-а
В общем, у меня есть форма, на ней dbgrid, где записаны пациенты, их...

сравнение edit и adotable
Здравствуйте! У меня на форме есть 2 таблицы: приход и состояние склада....

Access БД. Поиск по таблице через Edit
Ребята, подскажите, какой нужно вписать код в Edit, чтобы осуществить поиск по...

Поиск в базе данных Access через Edit
Здравствуйте. Тут возникла проблемка у меня, подскажите пожалуйста: Вот код...

57
drvolodko
213 / 57 / 32
Регистрация: 23.05.2014
Сообщений: 559
25.05.2017, 09:05 2
Цитата Сообщение от Andrey19951 Посмотреть сообщение
ADOQuery использовать не получается, потому что у меня в процедуре сравнивается текст ячейки с названием таблицы.
Для чего такая конструкция странная? У вас есть список станций и список поездов. Формируйте расписание движения поездов. Вот из этого расписания уже выбирайте поезда следующих заданным в едитах курсом.
0
Cold
84 / 84 / 65
Регистрация: 22.05.2014
Сообщений: 478
25.05.2017, 09:14 3
Delphi
1
2
3
4
5
6
7
8
9
10
11
with Form_Main do //главная форма
      begin
        ADOQuery.Active := false;
        ADOQuery.SQL.Clear;
        ADOQuery.SQL.Add('SELECT *FROM Имя главной таблицы');
        ADOQuery.SQL.Add('WHERE [Станция отправления] LIKE :k1');
        ADOQuery.SQL.Add('AND [Станция прибытия] LIKE :k2');
        ADOQuery.Parameters.ParamByName('k1').Value := 'Ваше значение';
        ADOQuery.Parameters.ParamByName('k2').Value := 'Ваше значение';
        ADOQuery.Active := true;
end;
Добавлено через 4 минуты
на форму кинь ADOQuery привяжи его к ADOConnection и DataSourse. На второй форме по нажатию на кнопку вставь вышеуказанный текст.
0
Andrey19951
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 28
25.05.2017, 21:54  [ТС] 4
Cold, так мне нужно чтобы в моем DBGrid на главной форме сократился список поездов. Были все, а остались только те, которые соответствуют условию ввода в Edit1, Edit2
0
Cold
84 / 84 / 65
Регистрация: 22.05.2014
Сообщений: 478
25.05.2017, 22:01 5
Ну так и напиши
Delphi
1
2
3
4
5
6
7
8
9
10
11
with Form_Main do //главная форма
      begin
        ADOQuery.Active := false;
        ADOQuery.SQL.Clear;
        ADOQuery.SQL.Add('SELECT *FROM Имя главной таблицы');
        ADOQuery.SQL.Add('WHERE [Станция отправления] LIKE :k1');
        ADOQuery.SQL.Add('AND [Станция прибытия] LIKE :k2');
        ADOQuery.Parameters.ParamByName('k1').Value := StrtoInt(Edit1.text);
        ADOQuery.Parameters.ParamByName('k2').Value := StrtoInt(Edit2.text);
        ADOQuery.Active := true;
end;
Добавлено через 1 минуту
Ты это сделал?
"на форму (главную) кинь ADOQuery привяжи его к ADOConnection и DataSourse. На второй форме по нажатию на кнопку вставь вышеуказанный текст."
0
Andrey19951
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 28
25.05.2017, 22:05  [ТС] 6
drvolodko, допустим у меня в первой ячейке DBGrid написан №поезда 105. А таблица ADOTable1 называется 105 и содержит расписание этого поезда. Так и происходит у меня вызов расписания - при нажатии на ячейку. Мне нужно произвести фильтрацию поездов в DBGrid, чтобы остались только те, которым в их расписаниях соответствуют введенные с клавиатуры данные
0
Cold
84 / 84 / 65
Регистрация: 22.05.2014
Сообщений: 478
25.05.2017, 22:15 7
Andrey19951 ты так и не понял что с приведенным кодом делать?

Добавлено через 2 минуты
И ещё по теме! DBGrid только отображает данные, а управлять этими данными либо ADOTable, либо ADOQuery

Добавлено через 3 минуты
Фильтрация в ADOTable
0
Andrey19951
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 28
25.05.2017, 22:27  [ТС] 8
Cold, ошибка "Неправильно определен объект Parameter. Предоставлены несогласованные или неполные сведения"

Добавлено через 2 минуты
Cold, я запутался.(( У меня на главной форме уже есть изначально ADOQuery1 для отображения DBGrid-а
И кнопка у меня на главной форме
а все таблицы на второй форме (с расписаниями)
0
Cold
84 / 84 / 65
Регистрация: 22.05.2014
Сообщений: 478
25.05.2017, 22:32 9
Цитата Сообщение от Cold Посмотреть сообщение
ADOQuery.Parameters.ParamByName('k1').Value := StrtoInt(Edit1.text);
* * * * ADOQuery.Parameters.ParamByName('k2').Value := StrtoInt(Edit2.text);
а если просто едиты написать:
Delphi
1
2
ADOQuery.Parameters.ParamByName('k1').Value := Edit1.text;
        ADOQuery.Parameters.ParamByName('k2').Value := Edit2.text;
Добавлено через 3 минуты
так бы сразу и написал
0
Andrey19951
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 28
25.05.2017, 22:36  [ТС] 10
Cold, меня отображение таблиц вообще не интересует, важно, чтобы в DBGrid были нужные поезда

Добавлено через 2 минуты
Cold, грубо говоря у меня внутри каждой строчки DBGrid есть расписание
И нужно проверить каждое расписание на соответствие введенным данным в Edit-ы, а оставить только подходящие поезда
0
Cold
84 / 84 / 65
Регистрация: 22.05.2014
Сообщений: 478
25.05.2017, 22:38 11
Delphi
1
2
3
4
5
6
7
8
ADOQuery1.Active := false;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('SELECT *FROM Имя таблицы (на 2 форме) где есть поля отправления и прибытия');
        ADOQuery1.SQL.Add('WHERE [Станция отправления] LIKE :k1');
        ADOQuery1.SQL.Add('AND [Станция прибытия] LIKE :k2');
        ADOQuery1.Parameters.ParamByName('k1').Value := StrtoInt(Edit1.text);
        ADOQuery1.Parameters.ParamByName('k2').Value := StrtoInt(Edit2.text);
        ADOQuery1.Active := true;
Добавлено через 56 секунд
а лучше скинь всю прогу,так будет легче разобраться...
0
Andrey19951
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 28
25.05.2017, 22:44  [ТС] 12
Cold, только поле Станция одно (нет отправления и прибытия)
0
Вложения
Тип файла: zip Поезда (курсач).zip (3.88 Мб, 10 просмотров)
Cold
84 / 84 / 65
Регистрация: 22.05.2014
Сообщений: 478
25.05.2017, 22:59 13
Andrey19951, завтра посмотрю прогу. Оказалось дома не установлена Delphi...
0
Andrey19951
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 28
25.05.2017, 23:01  [ТС] 14
Cold, спасибо..
0
Andrey19951
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 28
28.05.2017, 13:55  [ТС] 15
Cold, ну как, не смотрел?
0
Cold
84 / 84 / 65
Регистрация: 22.05.2014
Сообщений: 478
29.05.2017, 09:13 16
Не могу сообразить как SELECT в SELECTe сделать...
0
Andrey19951
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 28
29.05.2017, 19:42  [ТС] 17
Cold, мне советовали через Filter
0
Пытливый
1381 / 692 / 249
Регистрация: 29.05.2013
Сообщений: 3,120
29.05.2017, 22:23 18
105,112,117,12 - это что вы что под каждый номер поезда таблицу сделали? Да зачем-же, если достаточно было добавить поле Номер в одну таблицу Расписание и загнать в эту таблицу все поезда.
Зачем вы связали Вагон с Поездом через поля Номер поезда и Тип вагона? Никаким боком там такой связи быть не может.
Если уж вы хотите сделать отдельную таблицу вагонов и собирать состав из вагонов, то придется сделать таблицу Состав с полями НомерВагона, КодПоезда и КодВагона и добавить в нее перечень всех вагонов для каждого из поездов.
Номер поезда у вас сделан как главный ключ - плохая идея.
1. Главный ключ - это системное поле и рулить им вы не должны.
2. Номер поезда очень часто содержит букву и следовательно это поле должно быть строковым.

Пока все. Исправляйте.

Добавлено через 5 минут
Сколько же всего вы в БД неправильно сделали - ужас.

Добавлено через 59 секунд
Вам бы начать с создания правильной схемы БД, половина проблем просто бы не возникла. Сейчас все это переделывать надо.
0
Andrey19951
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 28
29.05.2017, 22:25  [ТС] 19
Пытливый, но дело в том, что у каждого поезда разное расписание. Нет ни одного поезда с одинаковым расписанием
0
Пытливый
1381 / 692 / 249
Регистрация: 29.05.2013
Сообщений: 3,120
29.05.2017, 22:56 20
И как это противоречит с тем, что я сказал ранее?

Добавлено через 3 минуты
У вас формат базы обязательно должен быть Акцес 2000 или можно в более новый Акцес 2007 года перейти?
0
29.05.2017, 22:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2017, 22:56

Поиск в базе данных Access через Edit
Прочитал до этого созданные темы перепробовал по разному, но у меня всё равно...

Поиск в DBGrid по каждому столбцу через единственный Edit
Добрый день, прошу помочь с одной задачкой. Мне нужно чтобы при вводе текста в...

добавление записей в цикле из edit (adotable, access)
Здравствуйте! Есть форма для ввода пользователем учебных предметов. Сначала...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru