从程序来看,读数据时: DataModule -> Control -> Form 写数据则: Form -> Control -> DataModule
FControl1 := TDFControl.Create(Form1, DataModule1)中的DataModule部分是指 数据部分,也相当于所使用的数据库的问题,不过通常只使用一个的话,可以定义为全局变量。
使用Control类的话,DataModule 即使换了数据库类型,Form换控件类型也不影响太大,Control类甚至不用重写,我的方法是在 Control建立 数据类型 <-> 控件 的配对链接。算不算 OO 我就不知道了。
constructor TBaseControl.Create(AForm: TForm);
begin
FForm := AForm;
AddDataLink
//virtual
Base Empty
在这里配对
ConvertToPorperty
end;
FDataLink 是一个自定义容器类。例如在雇员控制类,可以这样写:
TCtrlEmploye = class(TBaseControl) ...
procedure TCtrlEmploy.AddDataLink
//override;
begin
FDataLink.Add('ID','EditID',True,False);
// 对应数据库内字段、Form里的名称、是否读、是否写;自己可根据情况定义,如权限,控件是否显示等
FDataLink.Add('Name','EditName',True,False);
...
end;
而procedure ConvertToPorperty 则是将 名称String 改为 字段Field,控件Component,可以起到检查数据和提高运行效率。
TCtrlEmploy类可以定义 LoadData(FCondition: String)
SaveData(FCondition: String)等操作,通过 自己的判定 和 FDataLink的数据 和 DataModule 的数据生成 SQL 并操作。
这样,可以简单的使用 TCtrlEmploye 类就可以进行数据库操作,不需要复杂的交互工作。即使日后修改界面、添加数据字段等,也可以通过配置 或 继承类等的方法进行小修改即可。
说得比较模糊,不过思想还是比较容易明白的吧。希望能看懂。