Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.05.2021, 21:09
yuoras yuoras вне форума
Прохожий
 
Регистрация: 11.03.2014
Сообщения: 48
Версия Delphi: Delphi 7(4.453)
Репутация: 10
По умолчанию Combobox и Edit

Есть таблица , имеет два столбца
Нужно при выборе определенного значения combobox, подтягивать значение в DBEdit из этой же таблицы
То есть , combobox видит значения из scnazva и в DBEdit должно выводиться
значение fraza

Пример таблицы katalog
id scnazva fraza
1 Работа Пекарь
2 Машина Железо
3 Телевизор Изображение

Выбираю в combobox "Работа" в DBEdit должно быть "Пекарь"
Выбираю в combobox "Телевизор" в DBEdit должно быть "Изображение"

Код:
procedure Tnewabon.DBComboBoxEh2DropDown(Sender: TObject);
var ADOQuery1: TADOQuery;
begin
ADOQuery1 := TADOQuery.Create(self);
ADOQuery1.Connection := form2.Smart;
  with   ADOQuery1 do
begin
     ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
     ADOQuery1.SQL.Add('select scnazva, fraza from katalog');
     ADOQuery1.Open;
end;

 DBComboBoxEh2.Items.Clear ;
  while not  ADOQuery1.Eof do
  begin
    DBComboBoxEh2.Items.Add(ADOQuery1.Fields[0].AsString);
    ADOQuery1.Next;
  end;

  ADOQuery1.Free;
end;

Что сюда нужно добавить ?
Заранее благодарен

Последний раз редактировалось yuoras, 22.05.2021 в 21:13.
Ответить с цитированием
  #2  
Старый 23.05.2021, 12:01
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Не лучшим образом сформулирован вопрос, отсюда головоломка для читающего. "Сombobox видит значения из scnazva" - что такое scnazva? Из текста программы видно, что это имя поля, так сразу и напишите это. Если это имя поля, то как Combobox "видит" значения в этом поле? Копированием значений из таблицы в свойство Items Combobox-а, или же это всё-таки DBCombobox, связанный с соответствующим полем таблицы katalog?
И ещё, мелкая деталь. "with ADOQuery1 do" писать не нужно, если далее вы пишете:
Код:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
т.к. Вы явно указываете компонент.
Ответить с цитированием
Этот пользователь сказал Спасибо Guaho за это полезное сообщение:
yuoras (23.05.2021)
  #3  
Старый 23.05.2021, 19:44
yuoras yuoras вне форума
Прохожий
 
Регистрация: 11.03.2014
Сообщения: 48
Версия Delphi: Delphi 7(4.453)
Репутация: 10
По умолчанию

Спасибо за ответ.
Понял, что не верно выразил свою проблему.
Попробую еще раз
В таблице есть две колонки с названиями
scnazva, fraza
Это было видно по
Код:
select scnazva, fraza from katalog
Да й я привел содержимое таблицы
Код:
Пример таблицы katalog
id     scnazva          fraza
1      Работа           Пекарь
2      Машина         Железо
3     Телевизор      Изображение

Комбобокс получает названия значений из таблицы в свойство Items и
нормально работает .
Код:
связанный с соответствующим полем таблицы katalog
Нет не связаный на прямую , получает значения в свойство Items Combobox.

В чем сама проблема , то.
Этот код прекрасно работал для одного комбобокс и когда в таблице katalog, была одна колонка scnazva.
теперь понадобилось добавить еще одну колонку с названием fraza.
Результат должен быть такой
Я выбираю в комбобоксе "Машина" , а в DBEdit должно подтянуться значение Железо (смотрим пример таблицы выше)
Если выбираю в комбобоксе "Работа" , должно в в DBEdit "Пекарь"
Цитата:
И ещё, мелкая деталь. "with ADOQuery1 do" писать не нужно, если далее вы пишете:
Если удалить "while not ADOQuery1.Eof do" , тогда в комбобоксе не весь столбец с пятью значениями, а только одна запись .
Мне нужно все записи , которые находятся в этой колонке
Удалил
Цитата:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;

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

Я говорил удалить фразу "with", а Вы говорите про "while". Это разные вещи. Когда Вы пишете
Код:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
Вы явно указываете конкретный элемент (ADOQuery1), поэтому дополнительно писать "with ADOQuery1 do ..." не имеет смысла. Просто лишняя писанина. Она не повредит, но правильнее без неё.
Да, и ещё. Закрывать датасет командой Close не нужно, т.к. команда Clear автоматически вызовет закрытие.
Теперь по сути вопроса. Вам нужно, имея на входе текст, соответствующий значению поля таблицы (например, "Машина"), находить запись, где этот текст прописан, и отображать другое поле из этой записи. Это можно сделать либо поиском, либо фильтрацией (через свойство Filter датасета, либо через текст запроса). Раз Вы делаете динамический запрос, тогда проще всего условие фильтрации прописать в тексте запроса, примерно так:
Код:
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. Хорошая штука, с базами данных сильно облегчает жизнь!
Да, ещё не совсем понятно, зачем динамически создавать датасет. Не проще ли создать его статически и не тратить процессорное время на создание и уничтожение объектов?

Последний раз редактировалось Guaho, 26.05.2021 в 20:27.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter