ОХ
Олег Харченко

Вывод столбца БД в ListBox

Очень нуждаюсь в помощи. Не могу разобраться с проблемой уже часов 15( Я только учусь, поэтому не судите строга. Вообщем проблема такая: у меня есть таблица Resalt, комбобокс (КБ) 1 и 2. КБ1 и 2 заполняется значениями из таблицы Grumma.name gruppa. С КБ все вопрядке, заполняются нормально. Теперь, когда я выбрала в КБ каку-нибудь группу и нажала на кнопку, в ListBox должны попасть значения из таблицы Resalt столбец Obshie. Значения в ListBox попадают, но криво. Например у меня в КБ : Асу, Повт, ИСТб.... Я выбираю Асу. ТОгда в ListBox ничегго не попадает. Если выберу Повт, то попадают значения списка АСУ. А если ИСТб, то значения списка Повт

вот код заполнения КБ
procedure TForm7.FormShow(Sender: TObject);
begin
DataModule3.ADOQuery5.SQL.Clear;
DataModule3.ADOQuery5.SQL.Text:='Se lect Gruppa.Name_gruppa, Gruppa.Id_gruppa from Gruppa';
DataModule3.ADOQuery5.open;
ComboBox2.Items.Clear;
DataModule3.ADOQuery5.First;
while (not DataModule3.ADOQuery5.Eof) do
begin
ComboBox1.Items.Add( DataModule3.ADOQuery5.Fields[0].AsString);
ComboBox2.Items.Add( DataModule3.ADOQuery5.Fields[0].AsString);
DataModule3.ADOQuery5.Next;
end;
end;

а это код вывода в лист грид
if (Combobox1.Text <> '') and (Combobox2.Text <> '')then
begin
ListBox1.Clear;
ListBox2.Clear;

DataModule3.ADOQuery4.SQL.Clear ;
DataModule3.ADOQuery4.SQL.Text:='Se lect Result.Obshie from Result where Result.Id_gruppa ='+IntToStr(Integer(Combobox1.ItemI ndex));
DataModule3.ADOQuery4.open;
DataModule3.ADOQuery4.First;
while (not DataModule3.ADOQuery4.Eof) do
begin
ListBox1.Items.Add(DataModule3.ADOQ uery4.Fields[0].AsString);
DataModule3.ADOQuery4.Next;
end;

DataModule3.ADOQuery11.SQL.Clear ;
DataModule3.ADOQuery11.SQL.Text:='S elect Result.Obshie from Result where Result.Id_gruppa ='+IntToStr(Integer(Combobox2.ItemI ndex));
DataModule3.ADOQuery11.open;
while ( not DataModule3.ADOQuery11.Eof) do
begin
ListBox2.Items.Add(DataModule3.ADOQ uery11.Fields[0].AsString);
DataModule3.ADOQuery11.Next;
end;

end;

Алексей Иванов
Алексей Иванов

Для начала вы неправильно работаете с ADOQuery5:
1. Нет явной необходимости зачищать SQL и устанавливать (достаточно задать в дизайнере)
2. Нет ни блока try-finally, ни try-except (ошибки должны забиваться или обрабатываться)
3. Не закрывается после использования (есть Open, нет Close)

Почему у вас ничего не работает: ComboBox.ItemIndex никак не связан с Gruppa.Id_gruppa.
Правильно сохранять пары (id, name) в StringList'е через AddObject(name, TObject(id))
Потом, когда при выборе текста ItemIndex будет >= 0, нужно получить id = Integer(ComboBox.Items.Objects[ComboBox.ItemIndex]) и уже использовать его.
Некрасиво сделано (целое хранится как TObject), но работает.

Запросы к Result обладают всеми из недостатков 1-3 плюс:
4. Неверно сделан запрос, нужен параметр:
'Select Result.Obshie from Result where Result.Id_gruppa=:Id_Param',
установка параметра DataModule3.ADOQuery4.Parameters[0].Value:=id; (об id см. выше)
и потом выполнять запрос
5. Проверка ComboBox.Text <> '' не верна. Нужно ComboBox.ItemIndex >= 0
6. Достаточно одного запроса, так как ADOQuery11 не будет отличаться от ADOQuery4

ЗЫ
На практике используют локальную переменную (например с именем q), чтобы не писать каждый раз конструкцию DataModule3.ADOQuery4. Это сильно облегчает жизнь, когда надо переименовать ADOQuery4 или DataModule3.

ГС
Галина Спиридонова

Алексей Кузьминов - try-finally какой смысл скрывать собственные ошибки?

Похожие вопросы
обновление ListBox-а в c#
Делфи: Как считать данные из столбца таблицы БД?
Delphi. Как сделать, чтоб при выборе пункта в ListBox, для него выводилась соответсвующая картинка на форме?
Как в делфи добавить строку в listbox из другого listbox?
надо чтобы в DBRadioGroup выводились все значения одного столбца (delphi) как это реализовать???
Как сделать вывод данных из БД MySql
Проблемы с выводом ссилки из БД printf
Проблемы с выводом из БД
c#, list<string>, вывод в listbox
Вывод данных из бд