Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Динамическое создание объекта TDBLookUpComboBox


Автор: Dolphinchik 23.2.2009, 00:49
Доброго времени суток, уважаемые винградовцы! 
Подскажите, пожалуйста, по проблеме. Я в коде создаю объекты TSimpleDataSet, TDataSource , TDBLookUpComboBox и TLabel
Код

while not Param_SimpleDataSet.Eof do
   begin
     if Param_SimpleDataSet.FieldByName(FindType).AsInteger=1 then
     begin
        // TSimpleDataSet
          with TSimpleDataSet.Create(Self) do
          begin
            Name := 'SimpleDataSet_'+(Param_SimpleDataSet.FieldByName('parambox_field').AsString);
            //ShowMessage(Name);
            Connection := MainForm.SQLConnection1;
            DataSet.CommandType := ctTable;
            DataSet.CommandText := Param_SimpleDataSet.FieldByName('parambox_field').AsString;
            DataSet.Active := true;
            Active := true;
          end;
          // TDataSource
          with TDataSource.Create(Self) do
          begin
            Name := 'DataSource_'+(Param_SimpleDataSet.FieldByName('parambox_field').AsString);
            Enabled := true;
            AutoEdit := true;
          end;
          // TLabel
          with TLabel.Create(Self) do
          begin
            Name := 'Label_'+(Param_SimpleDataSet.FieldByName('parambox_field').AsString);
            Caption := Param_SimpleDataSet.FieldByName('parambox_name').AsString;
            Parent := MainForm.GroupBox2;
            Left := x;
            Top := y;
            Width := a;
            Height := b;
          end;
        //TDBLookUpComboBox
        test:='DataSource_'+(Param_SimpleDataSet.FieldByName('parambox_field').AsString);
          with TDBLookUpComboBox.Create(Self) do
          begin
            Name := 'DBLookUpComboBox_'+(Param_SimpleDataSet.FieldByName('parambox_field').AsString);
            Caption := Param_SimpleDataSet.FieldByName('parambox_name').AsString;
            Parent := MainForm.GroupBox2;
            if Self.FindComponent('DataSource_'+(Param_SimpleDataSet.FieldByName('parambox_field').AsString)) = nil then  ShowMessage('Объект DataSource_'+(Param_SimpleDataSet.FieldByName('parambox_field').AsString)+' не найден');
            ListSource.DataSet.Name := 'DataSource_'+(Param_SimpleDataSet.FieldByName('parambox_field').AsString); // тут возникает ошибка
            ListField := ListSource.DataSet.Fields[1].FieldName;
            KeyField := ListField;
            Left := x+80;
            Top := y;
            Width := a;
            Height := b;
          end;
     end
     else if Param_SimpleDataSet.FieldByName(FindType).AsInteger=2 then
     begin
 // что-то там..
     end;
     Param_SimpleDataSet.Next;
     y:=y+40;
   end;



То есть вот в ниже приведенной строчке кода возникает ошибка. Хотя объект TDataSource создается, это я проверяла с помощью FindComponent. У меня подозрение что вместо ListSource.DataSet.Name нужно что-то другое, но что не пойму. Подскажите пожалуйста в чем может быть проблема?

Код

ListSource.DataSet.Name := 'DataSource_'+(Param_SimpleDataSet.FieldByName('parambox_field').AsString); // тут возникает ошибка




Если не сложно, модеры  smile  , перенесите пожалуйста в "Delphi: Базы данных и репортинг", ошиблась веткой. 

Автор: Dolphinchik 23.2.2009, 03:59
Разобралась!

Оказывается проще пареной репы, нужно делать вот так:
Код

ListSource:=Self.FindComponent('DataSource_'+(Param_SimpleDataSet.FieldByName('parambox_field').AsString)) as TDataSource;


Другой вопрос правда напрашивается, насколько FindComponent быстро работает. У меня правда объектов не особо будет много в программе, но все таки, если есть альтернативный вариант и если он действительно нужен, огласите пожалуйста, а пока все!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)