现在正在做一个三层结构的MIS系统!
在数据更新方面使用的方案是服务器端通过一个Provider来完成客户端所有数据的更新!
客户端只需要传递Delta和数据集的ID到服务器端!
服务器端将从数据字典中搜索出数据集ID的相关字段及其属性!
并根据字段的属性值来完成数据的更新!现在数据的解析部分已经完成!
但有一个问题比较难解决!
就是客户端怎么把数据集的ID传递到服务器端!
如果用ClientDataSet.DataRquest来实现的话!
数据处理的过程中可能会出现问题!
如客户端一次性传递了一个数据集ID及一千条更改的数据到服务器端!
服务器端需要一条一条的去解析并将其转化为SQL语句!
如果服务器端还未更新完这一千条数据,客户端又进行了一次数据更新(由于客户端采用MDI模式,这种情况有可能发生)
此时传递过到服务器端的数据集ID将覆盖原有的数据集ID!
服务器在更新第一次传递的数据时就会出错(因其原来更新的数据集ID已经被覆盖,服务器端不能正确解析数据集)!求上述问题的解决方案!我想最好能够把数据集的ID包含到Data或Delta中去!这样服务器端在进行数据更新时,需要更新的数据及其数据集ID都是从Delta中读取,就不会产生上述问题!在网上看了一遍相关文章,但不能实现!在此想听听各位富翁的意见及建立!
最好是能找出一种完美的解决方案!
在数据更新方面使用的方案是服务器端通过一个Provider来完成客户端所有数据的更新!
客户端只需要传递Delta和数据集的ID到服务器端!
服务器端将从数据字典中搜索出数据集ID的相关字段及其属性!
并根据字段的属性值来完成数据的更新!现在数据的解析部分已经完成!
但有一个问题比较难解决!
就是客户端怎么把数据集的ID传递到服务器端!
如果用ClientDataSet.DataRquest来实现的话!
数据处理的过程中可能会出现问题!
如客户端一次性传递了一个数据集ID及一千条更改的数据到服务器端!
服务器端需要一条一条的去解析并将其转化为SQL语句!
如果服务器端还未更新完这一千条数据,客户端又进行了一次数据更新(由于客户端采用MDI模式,这种情况有可能发生)
此时传递过到服务器端的数据集ID将覆盖原有的数据集ID!
服务器在更新第一次传递的数据时就会出错(因其原来更新的数据集ID已经被覆盖,服务器端不能正确解析数据集)!求上述问题的解决方案!我想最好能够把数据集的ID包含到Data或Delta中去!这样服务器端在进行数据更新时,需要更新的数据及其数据集ID都是从Delta中读取,就不会产生上述问题!在网上看了一遍相关文章,但不能实现!在此想听听各位富翁的意见及建立!
最好是能找出一种完美的解决方案!
解决方案 »
- 100分:调用DLL中的函数而导致的奇怪问题
- qreport制作的报表怎么转化成excel
- delphi 水晶报表9 打印
- 那位朋友能帮忙解释一下TFindDialog和TReplaceDialog这两个类是作什么用的?(在线)
- 在Win2000中访问注册表问题。
- ADO + MS SQL server 2000 用什么中文打包工具比较好?
- 我要做一个类似TDBNavigator的控件,求教!!!!!解决给高分!!
- 怎么引用REMOTEDATAMODUAL上的控件?(如ADOCONNECTION)
- 新建一个工程时,会自动引用一些单元,怎样将一个单元(比如db)加入到这些默认的引用单元里呢?
- DELPHI中编写CGI和ISAPI有区别
- 发起最完美的Delphi VCL Unicode 兼容计划, 准备在sf.net开项目, 方案已定! 有经验的大虾请进!
- 想用DELPHI来做网站的开发~!有熟悉这方面技术的吗?说下ASP和DELPHI的利弊~!
我在的公司就是搞三层开发的,数据库连接是ADO,通讯技术是Corba。
数据更新基本流程是:在TADODataSet的commandtext属性里写SQL语句,这样可以在数据集里自动添加SQL里的字段信息,然后通过TDataSetProvider把该数据集提供给客户端的TClientDataSet,然后启动服务器,设置好客户端与服务器的连接,这样客户端的TClientDataSet可以从服务器端的字段信息读出来,在客户端对TClientDataSet字段内容的所有修改都可以通过TClientDataSet的ApplyUpdates()提交到服务器端。
可以采用登记的形式,不是对每一个id都作一次相应的更新,而是提交到服务器端后,一次性的更新
银行的系统就是采用这种方式。
我在的公司就是搞三层开发的,数据库连接是ADO,通讯技术是Corba。
数据更新基本流程是:在TADODataSet的commandtext属性里写SQL语句,这样可以在数据集里自动添加SQL里的字段信息,然后通过TDataSetProvider把该数据集提供给客户端的TClientDataSet,然后启动服务器,设置好客户端与服务器的连接,这样客户端的TClientDataSet可以从服务器端的字段信息读出来,在客户端对TClientDataSet字段内容的所有修改都可以通过TClientDataSet的ApplyUpdates()提交到服务器端。
--------------------------同意force2004(牛牛)的处理办法。你所说的“如果服务器端还未更新完这一千条数据,客户端又进行了一次数据更新(由于客户端采用MDI模式,这种情况有可能发生)”,这种情况服务器会自己处理数据冲突的,当你设置了adodataset的locktype属性,也就是adodataset的锁定方式!
客户端ClientDataSet1的ID为100(该ClientDataSet1显示的数据通过Inner join 或 Left join 来自于多个数据表),连接到服务器端的Update_Provider;
在客户提交ClientDataSet1所更新的数据到服务器端时
服务器端根据客户端传递过来的数据集ID(此时为100)到数据字典里面去搜索字段信息,并将相应字段值更新到该字段所属的数据表中;当ClientDataSet2也是连接到服务器端的Update_Provider,但他的ID为1001
对ClientDataSet2的更新也是按ClientDataSet1的方式!传递数据集ID的作用只是为了服务器在更新数据的时候,能够在数据字典中准确的找到更新的数据集中每一个字段所属的数据表,并能将数据准确的进行更新!所以我想把客户端数据集的ID嵌入到delta中!