最简单的三层例子出的问题?(100分)

  • 主题发起人 主题发起人 dingfuhai
  • 开始时间 开始时间
D

dingfuhai

Unregistered / Unconfirmed
GUEST, unregistred user!
我按照李维书上的例子,没有更改任何设置,做了一个最简单的三层的例子?但是
我更改数据后在ApplyUpdate到数据库是出现错误:我删除和新增的记录总是不能更新
到数据库(报错:不能找到相应的记录),而修改的记录可以正确ApplyUpdate.请问
为什么,怎么解决?
 
能不能把你的代码贴出来看看
 
上面的问题我已经解决了,能不能帮我解决下面的问题。
在三层中怎样实现主细表的更新:
1。我的主表主键是一个自增字段
2。细表以主表的主键作为关键字段
3。必须实现新增主表和细表,然后同时ApplyUpdate。
 
主表主键最好不要设成自增字段
事务处理
 
可以使用存贮过程来实现,把各字段的值以参数的形式传入,如果是自增字段,
需要在存贮过程中定义一个变量用来保存,这个变量的值从主表中得到如下:
--变量名 keyFieldValue
select keyFieldValue = keyField from TableName
使用这个变量直接作为从表的主关键字,然后使用ClientDataSet执行该存贮过程即可
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1315312
 
主表关键字更新未包含在客户端,最好主从表关键字的更新包含在客户端,还有数据库最好不要包含自动增号字段(若一定要自动编号,则使用createguid.
此外,你的主从表逻辑是放在客户端还是服务器端?
 
主从表逻辑我放在了应用服务其中。
向你所说,数据库中最好不用自增字段,那么有什么更好的方法能实现有序编号的自增呢?
就像“学生编号”,“职工编号”等等。
 
主从表逻辑放在应用服务,在客户端只需要更新主表(master)即可,因为从表(detail)是作为一个数据集字段(Tdatasetfield)放在主表的Clientdataset中的。即
客户端只需master.ApplyUpdate(-1)即可完成更新。
有序编号ID的自增:
procedure TDM.MasterDatasetBeforePost(DataSet: TDataSet);
var Guid: TGUID;
begin
if DataSet.UpdateStatus in [usModified,usInserted] then
begin
CreateGUID(Guid);
dataset['ID']:=GUIDToString(guid);
end;
end;
 
多人接受答案了。
 
后退
顶部