Форум по 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,721
Репутация: 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,721
Репутация: 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.
Ответить с цитированием
  #7  
Старый 07.11.2010, 02:30
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

По-моему дело вот в чём:
Код:
function TFillCombo.fill(Val:TStringList):TStringList;
здесь два TStringList-а, один - Result, другой - параметр Val (который кстати в функции никак не используется)
Код:
 result := citem;
в функции fill ты заполняешь Result
Код:
ob.fill(t);
а потом пытаешься получить эти строки из Val
Ответить с цитированием
  #8  
Старый 07.11.2010, 03:00
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

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

Код:
procedure TMainForm.JvXPBar1Items1Click(Sender: TObject);
var
t:tstringlist;
begin
t:=tstringlist.Create;
t.Add('fffff');
end;

Все понятно в посте выше, это дело оптимизации. Спасибо конечно. Но дело не в том. Даже в коде выше в t не пишется 'fffff'. в tstringlist не добовляются строчки, вот в этом проблема. Может быть дело в том что в D2009 появился Юникод и теперь как нибудь по другому надо?
Ответить с цитированием
  #10  
Старый 07.11.2010, 09:23
efimalex efimalex вне форума
Прохожий
 
Регистрация: 06.11.2010
Сообщения: 7
Репутация: 10
По умолчанию

Все разобрался, все работает. Всем спасибо за помощь.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter