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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.11.2010, 20:34
efimalex efimalex вне форума
Прохожий
 
Регистрация: 06.11.2010
Сообщения: 7
Репутация: 10
По умолчанию TStringList

Есть такой класс

Код:
unit FillComboClass;

interface
uses
SysUtils, DBCtrlsEh,FIBDatabase, pFIBDatabase,FIBDataSet,pFIBDataSet,Classes;
Type
  TFillCombo = class(TObject)
    Private
      fset: TpFIBDataSet;
      citem:  TStringList;
      fieldname: String;
    Protected
      Procedure Setfset(Val: TpFIBDataSet);
      Procedure Setfieldname(Val: String);
    Public
//      Constructor Create(DataSet: TpFIBDataSet; FieldName: string); // Конструктор
      Constructor Create; // Конструктор
      Destructor Destroy;// Деструктор
      Property DataSe: TpFIBDataSet write Setfset; // Свойство класса
      Property FieldNam: String write Setfieldname; // Свойство класса
      function fill(Val:TStringList):TStringList;
end;
implementation

uses DMUnit;

//constructor TFillCombo.Create(DataSet: TpFIBDataSet; item: TDBComboBoxEh; FieldName: string);
//constructor TFillCombo.Create(DataSet: TpFIBDataSet; FieldName: string);
constructor TFillCombo.Create;
begin
   citem:=TStringList.Create;
end;

destructor TFillCombo.Destroy;
begin

 inherited;
end;

function TFillCombo.fill(Val:TStringList):TStringList;
begin
  fset.First;
    while not fset.Eof do
      begin
        citem.add(fset.FieldByName(fieldname).AsString);
        fset.Next;
      end;
  result := citem;
  citem.Free;
end;

procedure TFillCombo.Setfieldname(Val: String);
begin
fieldname:=val;
end;

procedure TFillCombo.Setfset(Val: TpFIBDataSet);
begin
fset :=TpFIBDataSet.Create(nil);
fset:=Val;
end;

end.

в этом кусочке
Код:
citem.add(fset.FieldByName(fieldname).AsString);
в citem типа TStringList не добовляются строки. Почему так? Вроде все правильно.
у меня Delphi 2009.
Ответить с цитированием
  #2  
Старый 06.11.2010, 20:46
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

1. Я не увидел вызова вашей процедуры Fill, поэтому трудно сказать в чем проблема.

2. Вот тут вы чего-то мудрите:
Код:
procedure TFillCombo.Setfset(Val: TpFIBDataSet);
begin
fset :=TpFIBDataSet.Create(nil);
fset:=Val;
end;
Вы создаете экземпляр fset, а затем благополучно подменяете его другим.
При такой реализации смысла в этой процедуре нет никакого.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 06.11.2010, 21:01
efimalex efimalex вне форума
Прохожий
 
Регистрация: 06.11.2010
Сообщения: 7
Репутация: 10
По умолчанию

//Создаем клас описанный выше
ob := TFillCombo.Create;
//Здесь передаем датасет
ob.DataSe:=dm.SetSprCom;
//здесь поле таблици из которой значениями
//надо заполнить сомбобох
ob.FieldNam:='SPR_VALUE';
//сам методо про который и разговор
ob.fill(t);
//здесь заполняем item комбобокса
ComboGroupNomen.Items.Assign(t);
Ответить с цитированием
  #4  
Старый 06.11.2010, 21:04
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Судя по коду процедуры fill ваша переменная t просто нигде там не используется.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 06.11.2010, 21:07
efimalex efimalex вне форума
Прохожий
 
Регистрация: 06.11.2010
Сообщения: 7
Репутация: 10
По умолчанию

да нет просто не доконца написал
вот полный вызов

Код:
procedure TAddNomenGroupForm.ComboGrNomUnitButtonDown(Sender: TObject;
  TopButton: Boolean; var AutoRepeat, Handled: Boolean);
var
ob:TFillCombo;
t:TStringList;
begin
t:=TStringList.Create;
  //Заполняем ComboBox
  dm.SetSprCom.Active:=true;
 // ob.Create(dm.SetSprCom,'SPR_VALUE');
 ob := TFillCombo.Create;
 ob.DataSe:=dm.SetSprCom;
 ob.FieldNam:='SPR_VALUE';
 ob.fill(t);

  ComboGroupNomen.Items.Assign(t);
//  ComboGroupNomen.Items:=t;
  //ComboGroupNomen.Items.AddStrings(t);
end;


там можно было сделать так и без t

Код:
ob.fill(ComboGroupNomen.Items);
но не работает ни так и ни так.
проблема в самом методе fill
Ответить с цитированием
  #6  
Старый 07.11.2010, 02:12
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

А зачем в Вашем методе fill вот такая строчка: citem.Free; ?
Вероятно она должна быть в деструкторе Destroy...

Последний раз редактировалось roamer, 07.11.2010 в 02:14.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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