各位高人,我想编一个单据录入模块,而单据是主—明细结构的两个表构成的。如何对两表进行添加、删除、修改等操作及错误处理?(100分)

  • 主题发起人 主题发起人 i2346
  • 开始时间 开始时间
I

i2346

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高人,我想编一个单据录入模块,而单据是主—明细结构的
两个表构成的。如一单据中表头(InvoiceMain)和明细表(InvoiceList),
以InvoiceID字段以一对多的关系相联,
如何对两表进行添加、删除、修改等操作及错误处理?
 
可用触发器
 
参见Delphi自带的例子:../delphiX/demos/db/mastApp 或 IBMastApp。重点研究其数据模块!
 
添加,修改纪录系统自动完成,但在删除操作时则必须由人工来完成!
 
找本书看,很简单的.
 
建一主表IM.DB(字段Id1为主键) 与一明细表IL.DB(字段Id1为副索引,类型与主表字段
Id1相同);
设置好主从关系,可参见/Demo/db/mastApp等实例。
Table1.tablename:=im.db
Table2.tablename:=il.db
Table1.open;
Table2.open;
...
当对主表操作时:
Table1.append;
在Table1.OnNewRecord事件中添加代码 :
Table1.Edit;
Table1['xxxx']:= ...
...

在Table1.OnAfterPost事件中添加代码 :
检测是否新增记录,是则:
Table2.Append;
Table2['xxxxxxx']:=dbedit1.text
....
否: exit;

删除记录时删主表Id1号=edit1.text的记录,细表删Id1号=edit1.text的所有记录。

在Table1.OnPostError件中添加代码 :
if (E is EDBEngineError) then
if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then
begin
application.MessageBox('输入的记录编号重名.','问题',mb_ok+MB_ICONERROR);
Abort;
end;
...
...

希望你能有收获。
 
我觉得最简单最可靠的方法是用触发器。
这样一个表在改变时触发特定的语句,在sever端
执行,比在客户端要求执行更加保险。
 
多人接受答案了。
 
后退
顶部