有这么一个系统,在设计时,每个表为一个类,系统有100多个表,就是100多个类,每个类为一个单元,每个字段就是类的属性,所有的SQL都写在类中,再把返回值给Form中的控件中。(涉及复杂的SQL,就麻烦大啦),一个城市的小表,我就写了两天,要是用dbgrid+adoquery,一个小时就搞定,请问大家伙,这样设计系统是不是画蛇添足??????????
解决方案 »
- 求高手解决,如何读取BMP图片,转换成二进制的数据流文件BIN?
- 关于hextobin函数的问题请教(急,在线等待)
- 如何找到进程中各控件的名字?
- 树结构存放倒INI文件的困惑:节点名相同怎么处理的?
- forgot的散分帖,朋友们进来轻松一下:快过年了,请大家遵守交通规则.
- 高分求解!习惯于动手者请进!
- 请大师帮忙!如何编辑INI文件,并保存INI 文件?谢谢~~~~~~~~~~~~~~~~`
- Delphi中对象的Anchors属性是什么东西?
- 如何实现捕获外部程序的输出,如运行Apache时会在Dos窗口输出 ~~Runing...,我如何用程序捕获这些输出
- 一段导入CSV文件WIN 7 64位下异常!
- 删除文件目录
- 高分求救,记录转字段问题
我的生成类的程序是用awk写的,我的开发过程为,先定义一表结构(文本形式),然后根据表结构生成相应的建表SQL,并生成相应的类,每个类基本结构大至如下:
//工作简历库
TGZJLK=object
GZJLBM:integer;
GRBM:integer;
DWMC:string[60];
QSRQ:string[10];
ZZRQ:string[10];
GZBM:string[20];
JCLB:string[4];
UpdateStat:boolean;
Function InsertIt:Boolean;
Function GetDataFromDataSet(const asql:TDataSet;const tran:boolean=true):Boolean;
Function SetDataToDataSet(const asql:TDataSet):Boolean;
Function saveIt(const st:TDataSet):Boolean;
Function UpdateIt(st:TDataSet):boolean;
end;
而函数的实现为:
Function TGZJLK.InsertIt:Boolean;
Begin
Result:=False;
try
CurDatabase.StartTransAction();
With CurDatabase.IBSql do
begin
Sql.Text:='Insert into GZJLK ( GZJLBM,GRBM,DWMC,QSRQ,ZZRQ,GZBM,JCLB) '
+Format('values ( ''%d'',%d,''%s'',''%s'',''%s'',''%s'',''%s'')'
,[GZJLBM,GRBM,DWMC,QSRQ,ZZRQ,GZBM,JCLB]);
ExecSql();
CurDatabase.Commit();
end;
ReSult:=True;
except
on E: Exception do
begin
CurDatabase.RollBack();
TUtils.ShowMess(e.Message);
end;
end;
end;
//其它函数略
上面的代码都是由以下文本生成,不需自己写任何代码
---------------------------------------------------
工作简历库
--------------------------------------------------
工作简历编码(内部码) I R K A
个人编码 I R
单位名称 C 60
起始日期 C 10
终止日期 C 10
工作部门 C 20
奖惩类别 C 4
---------------------------------------------------------
我们甚至可以由以上结构生成一个简单的输入界面
它的做法就是为每一个表生成一个类如果表比较多的话,应该要有一种根据表结构自动生成类的机制,
否则写起来很麻烦