Тема: Combobox и Edit
Показать сообщение отдельно
  #4  
Старый 26.05.2021, 20:16
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 179
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Я говорил удалить фразу "with", а Вы говорите про "while". Это разные вещи. Когда Вы пишете
Код:
1
2
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
Вы явно указываете конкретный элемент (ADOQuery1), поэтому дополнительно писать "with ADOQuery1 do ..." не имеет смысла. Просто лишняя писанина. Она не повредит, но правильнее без неё.
Да, и ещё. Закрывать датасет командой Close не нужно, т.к. команда Clear автоматически вызовет закрытие.
Теперь по сути вопроса. Вам нужно, имея на входе текст, соответствующий значению поля таблицы (например, "Машина"), находить запись, где этот текст прописан, и отображать другое поле из этой записи. Это можно сделать либо поиском, либо фильтрацией (через свойство Filter датасета, либо через текст запроса). Раз Вы делаете динамический запрос, тогда проще всего условие фильтрации прописать в тексте запроса, примерно так:
Код:
1
2
3
4
5
ADOQuery1.SQL.Clear; // Close - не надо!
ADOQuery1.SQL.Add('SELECT scnazva, fraza FROM katalog');
ADOQuery1.SQL.Add('WHERE scnazva = "' + combobox1.Text + '"'); // по идее здесь должно быть DBComboBoxEh2 вместо combobox1, если я правильно понял по тексту Вашей программы.
ADOQuery1.SQL.Add('ORDER BY scnazva'); // Это по желанию, сортировка по полю scnazva (можно и по полю fraza, а можно и вообще убрать строку сортировки).
ADOQuery1.Open;
Вижу, что используете библиотек EhLib. Хорошая штука, с базами данных сильно облегчает жизнь!
Да, ещё не совсем понятно, зачем динамически создавать датасет. Не проще ли создать его статически и не тратить процессорное время на создание и уничтожение объектов?
Ответить с цитированием