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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.10.2017, 01:07
sashau01 sashau01 вне форума
Прохожий
 
Регистрация: 31.10.2017
Сообщения: 4
Версия Delphi: XE10.1
Репутация: 10
По умолчанию Извлечение данных из класса

Господа, подскажите.
Подскажите как делать правильно (best practice).
Есть клас Clients, в классе есть к примеру метод getclients который sqlем из базы возвращает список клиентов. Далее мне необходимо результат выгрузки загрузить в combobox, каким способом из метода забрать результаты выборки?
Код:
 for  что здесь запихнуть  do
   begin
      ComboBox1.Items.Add();
      Next;
   end;
Ответить с цитированием
  #2  
Старый 31.10.2017, 01:19
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,055
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Пусть для работы с БД мы используем 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  
Старый 31.10.2017, 07:41
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Переопределить метод 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  
Старый 31.10.2017, 18:31
sashau01 sashau01 вне форума
Прохожий
 
Регистрация: 31.10.2017
Сообщения: 4
Версия Delphi: XE10.1
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Переопределить метод 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%.

Спасибо огромное, работает.
Подскажите еще один момент . У меня в выборке возвращаеться два поля ID, NAMECLIENT. как мне таким шахером махером два значение добавить в комбо.
Аналогично етому
ComboBox1.Items.AddObject(ADOQuery1.FieldByName('F ield_with_name').AsString,TObject(ADOQuery1.FieldB yName('ID').AsInteger));
Ответить с цитированием
  #5  
Старый 31.10.2017, 23:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,055
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так и добавлять (плюс еще одна поправочка на всякий случай):
Код:
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  
Старый 01.11.2017, 17:56
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Ну уж на то пошло тогда с возбуждением исключения делать, а не в тихую ничего не делая
Код:
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;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter