Консультация № 150358
12.11.2008, 20:33
0.00 руб.
0 3 2
Здравствуйте! Помогите пожалуйста. У меня есть табличка с одним полем. Как вывести все данные таблицы в Combobox? Я использовала вот такой код программы:

ADOTable1.First;
for i:=1 to ADOTable1.RecordCount do
begin
ComboBox1.Items.Add(ADOTable1.fieldbyname('name_p').AsString);
end;
ADOTable1.Next;

Но в Combobox выводиться только первое значение поля, причём несколько раз. В чём ошибка?

Обсуждение

Неизвестный
12.11.2008, 22:03
общий
это ответ
Здравствуйте, Шушкова Марина Сергеевна!

Ваша ошибка двольно элементарна, хотя и встречается весьма часто. Оператор ADOTable1.Next; Вы вынесли за пределы цикла, поэтому он выполняется единственный раз уже после того, как отработал весь цикл. Его следует внести внутрь, но желательно с небольшим уточнением. Привожу исправленный вариант.

ADOTable1.First;
for i:=1 to ADOTable1.RecordCount do
begin
ComboBox1.Items.Add(ADOTable1.fieldbyname('name_p').AsString);
if i < ADOTable1.RecordCount then ADOTable1.Next; { проверка предотвращает попытку перехода на несуществующую запись, следующую после последней }
end;

Желаю успехов!
Неизвестный
13.11.2008, 06:27
общий
это ответ
Здравствуйте, Шушкова Марина Сергеевна!

К дополнению ответа от Delph

RecordCount желательно неиспользовать для цикла, Eof оптимально, все зависит от датасетов - их настроек, так например реальное число записей может 100, а recordcount покажет 10 (не все записи сразу подгружаются (реальное кол-во записей можно узнать - например- last поставить а затем recordcount))

ADOTable1.First;
while(AdoTable1.Eof=false)do
begin
ComboBox1.Items.Add(ADOTable1.fieldbyname('name_p').AsString);
Adotable1.Next;
end;
Неизвестный
13.11.2008, 16:52
общий
классическая "схема":
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1.Items.Clear;
ADOTable1.Active:= true;
ADOTable1.DisableControls;
ADOTable1.First;
while(not AdoTable1.Eof)do
begin
ComboBox1.Items.Add(ADOTable1.fieldbyname('name_p').AsString);
Adotable1.Next;
end;
ADOTable1.EnableControls;
ComboBox1.ItemIndex := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Style := csDropDownList; // не редактируемый, выподающий список, пользователь может только выбирать.
end;

Форма ответа