|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Извлечение данных из класса
Господа, подскажите.
Подскажите как делать правильно (best practice). Есть клас Clients, в классе есть к примеру метод getclients который sqlем из базы возвращает список клиентов. Далее мне необходимо результат выгрузки загрузить в combobox, каким способом из метода забрать результаты выборки? Код:
for что здесь запихнуть do begin ComboBox1.Items.Add(); Next; end; |
#2
|
|||
|
|||
Пусть для работы с БД мы используем ADO:
Код:
ADOQuery1.First; While Not ADOQuery1.Eof Do begin ComboBox1.Items.Add(ADOQuery1.FieldByName('Field_with_name').AsString); ADOQuery1.Next; end; Если надо сохранить при этом ID, то можно пользоваться примерное так: Код:
... ComboBox1.Items.AddObject(ADOQuery1.FieldByName('Field_with_name').AsString,TObject(ADOQuery1.FieldByName('ID').AsInteger)); ... |
#3
|
||||
|
||||
Переопределить метод AssignTo:
Код:
type TClients = class(TPersistent) protected procedure AssignTo(Dest: TPersistent); override; end; procedure TClients.AssignTo(Dest: TPersistent); begin TStrings(Dest).Clear; TStrings(Dest).Add('1'); TStrings(Dest).Add('2'); TStrings(Dest).Add('4'); TStrings(Dest).Add('8'); end; Использовать метод Assign: Код:
begin ComboBox1.Items.Assign(TClients.Create); end; Работает 100%. Пишу программы за еду. __________________ |
#4
|
|||
|
|||
Цитата:
Спасибо огромное, работает. Подскажите еще один момент . У меня в выборке возвращаеться два поля ID, NAMECLIENT. как мне таким шахером махером два значение добавить в комбо. Аналогично етому ComboBox1.Items.AddObject(ADOQuery1.FieldByName('F ield_with_name').AsString,TObject(ADOQuery1.FieldB yName('ID').AsInteger)); |
#5
|
|||
|
|||
Ну так и добавлять (плюс еще одна поправочка на всякий случай):
Код:
type TClients = class(TPersistent) protected procedure AssignTo(Dest: TPersistent); override; end; procedure TClients.AssignTo(Dest: TPersistent); begin if Dest Is TStrings Then begin TStrings(Dest).Clear; TStrings(Dest).AddObject('1',TObject(1)); TStrings(Dest).AddObject('2',TObject(2)); TStrings(Dest).AddObject('4',TObject(4)); TStrings(Dest).AddObject('8',TObject(8)); end; end; |
#6
|
||||
|
||||
Ну уж на то пошло тогда с возбуждением исключения делать, а не в тихую ничего не делая
Код:
procedure TClients.AssignTo(Dest: TPersistent); begin if not (Dest is TStrings) then raise Exception.Create('!TStrings'); TStrings(Dest).Clear; TStrings(Dest).Add('1'); TStrings(Dest).Add('2'); TStrings(Dest).Add('4'); TStrings(Dest).Add('8'); end; Пишу программы за еду. __________________ |