Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Глупый вопрос по циклу и Listbox

Автор: cooler 14.05.2010 3:22

procedure TForm2.ListBox4Click(Sender: TObject);
var sDBItem1,sDBItem2,sDBItem3,sDBItem4,sDBItem5:string;
i,ia:integer;
begin

Memo1.Lines.Clear;

with ADOQuery1 do begin
SQL.Clear;
SQL.Add ('Select event_note,event_site,koeff_p1,koeff_n,koeff_p2 from bet');

Open;
First;
while not eof do



begin
sDBItem1 := String(FieldValues ['event_note']);
sDBItem2 := String(FieldValues ['event_site']);
sDBItem3 := String(FieldValues ['koeff_p1']);
sDBItem4 := String(FieldValues ['koeff_n']);
sDBItem5 := String(FieldValues ['koeff_p2']);
Memo1.lines.Add(sDBItem1);
Memo1.lines.Add(sDBItem2);
Memo1.lines.Add('Коэффициенты: '+ sDBItem3+' - '+sDBItem4+' - '+sDBItem5);
Next;
end;
end;
end;


В листбоксе несколько записей(строк) при нажатии на разные строки должна появляться разная информация в Мемо, которая берется из файла БД access, но сейчас выводится до конца файла всё, а мне надо чтобы выводились записи с номером как у листбокса, как сделать?

Автор: Client 14.05.2010 3:31

Код
select * from bet
where id = listbox.itemIndex
?
или переходом на запись, или по записям по очереди, проверяя номер записи(RecNo) или ID или как ты определишь эту запись smile.gif

Автор: cooler 14.05.2010 3:45

Точно, так и знал что легко, заклинило smile.gif
Только выдаёт что listbox4.itemIndex не имеет значение по умолчанию ....

Автор: volvo 14.05.2010 3:50

Оно и не нужно. Когда кликаешь по ЛистБоксу, какой-то из элементов выделяется. Его номер - это и будет ItemIndex. Скорее всего, ты неправильно создал SQL-запрос.

Автор: cooler 14.05.2010 11:09

Все имена проверил
вот запрос

 SQL.Add ('select event_note,event_site,koeff_p1,koeff_n,koeff_p2 from bet where bet_id = listbox4.itemIndex');

Автор: Client 14.05.2010 14:55

SQL.Add ('select event_note,event_site,koeff_p1,koeff_n,koeff_p2 from bet where bet_id = ' +listbox4.itemIndex);
надо за апострофом писать значение smile.gif (если надо то приведи к строковому типу - inttostr)
можно через параметр
SQL.Add ('select event_note,event_site,koeff_p1,koeff_n,koeff_p2 from bet where bet_id = :pr1');
ADOQuery1.Parameters.ParamValues['pr1'] := listbox.itemindex
Пробуй так smile.gif

Автор: volvo 14.05.2010 16:34

Зависит от того, какой тип у поля bet_id... Если целочисленный - то:

SQL.Add ('select event_note,event_site,koeff_p1,koeff_n,koeff_p2 from bet where bet_id = ' +
IntToStr(listbox4.itemIndex));

, а если строковый - то
SQL.Add ('select event_note,event_site,koeff_p1,koeff_n,koeff_p2 from bet where bet_id = ' +
QuotedStr(IntToStr(listbox4.itemIndex)));

Автор: cooler 14.05.2010 16:54

good.gif Спасибо
Ещё вопросик

Код
Form2.ADOQuery1.Edit;
Form2.ADOQuery1.insert;
Form2.ADOQuery1.FieldByName('event_name').Asstring := Edit1.Text;
Form2.ADOQuery1.FieldByName('bet_id').Asinteger := 5;         //<---------------
Form2.ADOQuery1.Post;

Записывается в БД, как сделать чтобы в bet_id записывалось значение, следующее после того что уже есть в БД
Например, 9 записей, и пишет 10, когда добавляет 10ую
Тоже как-то просто....

Автор: volvo 14.05.2010 17:48

Если поле bet_id объявить в базе как AutoNumber, то это будет делаться автоматически

Автор: Feagor 28.05.2010 18:24

если юзаешь ms sql server, то в режиме редактирования таблицы на bet_id в свойствах ставишь identity specification - yes