抛砖引玉,讨论一下三层中数据更新的问题,顺便散分 ( 积分: 300 )

  • 主题发起人 主题发起人 nanami
  • 开始时间 开始时间
N

nanami

Unregistered / Unconfirmed
GUEST, unregistred user!
多层结构,服务器端TADOQuery,TDataSetProvider,客户端TClientDataSet,数据显示在DBGrid中间。在客户端操作删除了部分数据后提交,如何提交才是正确的?
1、Applyupdate:使用这个函数,需要注意什么问题?一般是用ApplyUpdate(-1)是么?我现在遇到一个问题,删除后使用Applyupdate显示“record not found or changed by another user”?请问要怎样才能成功?
2、有人说不使用ApplyUpdate,不够专业,使用传递Delta的方式来更新,那么怎么将Delta转化为SQL语句更新到数据库呢?怎么判断Delta的内容是添加、删除、修改呢?
3、其他还有什么好的建议么?
希望大家踊跃回答,都有分的。
 
多层结构,服务器端TADOQuery,TDataSetProvider,客户端TClientDataSet,数据显示在DBGrid中间。在客户端操作删除了部分数据后提交,如何提交才是正确的?
1、Applyupdate:使用这个函数,需要注意什么问题?一般是用ApplyUpdate(-1)是么?我现在遇到一个问题,删除后使用Applyupdate显示“record not found or changed by another user”?请问要怎样才能成功?
2、有人说不使用ApplyUpdate,不够专业,使用传递Delta的方式来更新,那么怎么将Delta转化为SQL语句更新到数据库呢?怎么判断Delta的内容是添加、删除、修改呢?
3、其他还有什么好的建议么?
希望大家踊跃回答,都有分的。
 
我先研究研究!
 
沉下去了,顶上来,希望高手来讨论啊~
 
自己写Sql语句啊,参考updateSql控件吧。
看看李维的书
 
使用Applyudates对数据库表有什么要求没有?比如:是否要定义主键?能否定义自增量字段?
另外,请问是李维的哪本书?
 
现在正在看这方面的,就帮楼主顶顶先,共同学习。
 
我以前是用传递Delta到服务器端更新的方式,现在我想将传递过来的Delta转换为SQL语句然后更新,不知道有没有什么好办法?有的能不能贴一个例子?
注:我以前更新方法
服务器端程序:
使用一个ADOQuery,一个Provider,Provider对应的DataSet为ADOQuery
function UdpateData(Delta : OleVariant;TableName : string;MaxError : integer;Var Error : integer) : OleVariant
var
ss : string;
begin
//连接服务器端数据库
SetADOConnect(ConnectString);
ss := 'select * from ' + TableName + ' where 1=2';
ADOQuery.SQL.Text := ss;
ADOQuery.Open;
Result := Provider.ApplyUpdate(Delta,MaxError,Error);
end;
 
我也想用Delta转换为SQL语句然后更新,但传到服务器的 Delta 字段的 OldValue NewValue 都是一样的,不管你更新没有。
还有个方法都是在客户端生成 SQL 的一部分,如:'username=''xxxx'' , passwd=''xxx'''
把这个 WideString 传到服务器 服务器再加上 'Update tabel set '+ HQL+ 'where xxxx '这样。
不过这样太烦了。
 
1.一般是用ApplyUpdate(-1)是么?-1表示不管數據中有沒有錯誤,都提交,即只提交沒有錯誤的數據,ApplyUpdate(0)表示記錄中應沒有數據,才能正確提交,如果有一條有錯誤,才不提交,事務回滾!ApplyUpdate(n)  n表示錯誤數.删除后使用Applyupdate,應該會出錯,采用刪除後,再重新刷新一次數據
 
Applyupdates这个函数的功能我还是基本知道,现在感觉好像是数据库表设置问题导致无法更新。所以我想问一下使用applyupdates函数需要注意一些什么地方。
 
三层的结构一般都把数据编辑的操作放到 中间层,而不是像你这样放到客户端。
你应该在中间层做个服务,然后在客户端调用这个服务来进行数据编辑。
象你这么做还是两层的做法。
 
把SQL语句和CDS.Data传给中间层的接口里,在中间层里处理,通过Variant类型传过去,
很方便的的,又可以做事务处理。。。
 
客户端我不想涉及到SQL语句,我只想放到服务器端。
另外,Applyupdates对数据库表到底有什么样的要求呢?
 
客户端我不想涉及到SQL语句,
--------------
但一些必要的条件说明的必须的。
我也在用 nanami 的方法。但好象听说 ApplyUpdates 可能更新单表。
 
客户端我不想涉及到SQL语句,
--------------
但一些必要的条件说明的必须的。
我也在用 nanami 的方法。但好象听说 ApplyUpdates 可能更新单表。
 
ApplyUpdates对多表更新要求很多的,反正我感觉很烦琐,
所以,我觉得你根本就没有必要在客户端涉及到SQL语句,
直接把数据保存在ClientDataSet和一些字符串里,直接传给服务器处理就可以了,
还可以实现事务处理,很方便的,自由度也很大,
你多试下吧
 
后退
顶部