Вниз
Скачать: CL | DM;

Создание в run-time компонентов заранее неизвестных типов   Найти похожие ветки 

← →
bopmy   (2006-01-04 23:44) [0]

Необходимо создать компоненты по данным о них взятым из БД  
В БД храняться псевдо-данные о типе компонента ("Integer",Name,Длинна,Имя поля в БД).
Как в run-time создать компонент заранее неопределенного типа и присвоить ему необходимые свойства.
Я пробовал так

var
 DbObgParam: array [1..10] of TControl;
begin
 while not FormParam.Eof do
 begin
   if pos("Varchar",FormParamD_type.AsString)<>0 then
   begin
// Npp-номер попорядку вывода на панель
        DbObgParam[FormParamNpp.Value]:=TDBEdit.Create(Self);
        DbObgParam[FormParamNpp.Value].Parent:=Self;
        TDBEdit(DbObgParam[FormParamNpp.Value]).DataSource:=DSSpr;
//на этой строчке валится с AV (FormParamTable_name - имя поля в таблице)
        TDBEdit(DbObgParam[FormParamNpp.Value]).Field.FieldName:=FormParamTable_name.Value;
        DbObgParam[FormParamNpp.Value].Left:=8;
        DbObgParam[FormParamNpp.Value].Top:=20;
        DbObgParam[FormParamNpp.Value].Left:=8;
        DbObgParam[FormParamNpp.Value].Width:=190;
   end;
   FormParam.Next;
 end;

Как это можно сделать еще или где ошибка.
Заранее благодарен.


← →
Polevi ©   (2006-01-05 09:49) [1]

DbObgParam[FormParamNpp.Value]).Field


← →
Stanislav ©   (2006-01-05 13:42) [2]

А почему так?
DbObgParam: array [1..10] of TControl;
 DbObgParam[FormParamNpp.Value]:=TDBEdit.Create(Self);


← →
bopmy   (2006-01-05 20:05) [3]

А как еще можно я ведь об этом и спрашиваю
Пока решил так
DbObgParam: array [1..10] of TControl;

        DbObgParam[FormParamNpp.Value]:=TDBEdit.Create(PageControl1.Pages[5]);
        DbObgParam[FormParamNpp.Value].Parent:=PageControl1.Pages[5];
        TDBEdit(DbObgParam[FormParamNpp.Value]).DataSource:=DSSpr;
        DbObgParam[FormParamNpp.Value].Left:=8;
        DbObgParam[FormParamNpp.Value].Top:=i+20;
        DbObgParam[FormParamNpp.Value].Left:=8;
        DbObgParam[FormParamNpp.Value].Width:=190;
        TDBEdit(DbObgParam[FormParamNpp.Value]).DataField:=FormParamTable_name.Value;
        DbObgParam[FormParamNpp.Value].Show;


← →
bopmy   (2006-01-05 20:09) [4]

Может кто подскажет сылку на решение подобной задачи
"Динамическое построение параметров справочника"
имеется в виду создание справочников с различными полями и наборами данных по заранее созданному шаблону который хранится в БД. Шаблон подразумевает не хранение всей формы а только псевдо данных о структурк и типах данных.


← →
Fay ©   (2006-01-06 03:17) [5]

2 bopmy   (05.01.06 20:09) [4]
Думаю, это задачка на знание оператора IF.
Других сложностей нет. Ну, м.б., кроме чтения собственных текстов с инвариантами (DbObgParam[FormParamNpp.Value]).


← →
tech ©   (2006-01-08 01:46) [6]

//на этой строчке валится с AV (FormParamTable_name - имя поля в таблице)
TDBEdit(DbObgParam[FormParamNpp.Value]).Field.FieldName:=FormParamTable_name.Value;

AV возникает, поскольку еще не определ Field. Чтобы он находился сам в присоединенном через DataSource DataSet (проверьте, есть ли связка DataSource DataSet !), необходимо писать

TDBEdit(DbObgParam[FormParamNpp.Value]).DataField:=FormParamTable_name.Value;

далее по тексту.
Хорошо бы еще перед

while not FormParam.Eof do

прописать

 FormParam.First;

поскольку неясно, где открывается таблица и что с ней еще делается до вызова приведенной процедуры.


← →
Fay ©   (2006-01-08 04:56) [7]

2 tech ©   (08.01.06 1:46) [6]
> поскольку неясно, где открывается таблица
Если уж на то пошло, то не очевидно, что открыт именно двунаправленный курсор 8)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.024 c
2-1139913584
LordOfRock
2006-02-14 13:39
2006.03.05
Указатели и классовые переменные


4-1134568592
Revenkov
2005-12-14 16:56
2006.03.05
Завершение работы программы при выключении машины


3-1134642131
softmaster
2005-12-15 13:22
2006.03.05
Вопрос по хранимой процедуре и BDE


15-1139498742
oldman
2006-02-09 18:25
2006.03.05
Да кто там пишет БИОСы???


1-1138871570
Bratskiy
2006-02-02 12:12
2006.03.05
Список названий шривтов в ComboBox




   Наверх