如何实现动态生成数据库输入界面?(100分)

C

coolnet

Unregistered / Unconfirmed
GUEST, unregistred user!
现有一数据库系统,要求数据库的结构可以变化,
即可以追加和删除字段,在数据库的结构变化后,
输入界面也要相应变化,以使新加入的字段得以输入,
同时还要求输入顺序可以调整,即可以将想输入的项放
到前面输入,一句话,就是说要动态生成输入界面,
但我不想用grid形式的输入界面,而想采用form界面,
即一屏一条记录,不知是否只能一个一个Create控件,
请大侠指教,急急急!!!
 
1. 自己根据数据库的Fields创建输入界面
2. 使用InfoPower中的控件。
 
例子如下:

class TDynDataForm=TForm
Table1:TTable;
private
CtrlArry:TStrings;
protected
procedure BuildForm;
public
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
publish
end;

implement

constructor TDynDataForm.Create(AOwner:TComponent);
begin
inherited;
CtrlArry:=TStringList.Create;
end;

destructor TDynDataForm.Destroy(AOwner:TComponent);
begin
while CtrlArry.count>0 do begin
CtrlArry.Objects[CtrlArry.count-1].free;
CtrlArry.delete(CtrlArry.count-1);
end;
inherited;
end;


procedure TDynDataForm.BuildForm;
var i:integer;
tmpctrl:TWinControl;
begin
Table1.open;
//if you do want this order
//you can use a TList to change the order
for i:=0 to Table1.FieldsCount-1 do begin
case Table1.Fields.DataType of
ftstring:begin
tmpctrl:=TDBEdit.Create;
//do something that you want
//and assign tmpctrl property
end;
ftMemo: begin
tmpctrl:=TDBMemo.Create;
//do something that you want
//and assign tmpctrl property
end;
end;
//add you case
end;
CtrlArry.AddObject(Table1.Fields.FieldName,tmpCtrl);
end;
end;





 
1.DBPower中有个控件可以达到你的要求.
2.我写的两个控件(DBEditor和PowerEditor)也是用于此目的,已成功地用于了一个管理信息系统中.

上述两个控件可在Delphi集中营(http://www.netease.com/~weimin/)中找到.
 
Delphi Super Page上 的 dbpanel.zip 很好. (带源码,值得研究一下)
好过 DB Power 套件中的那个类似的.
 
接受答案了.
 
顶部