一个关于COM+对象动态更新数据的问题,在线等待。(100分)

  • 主题发起人 主题发起人 square_dch
  • 开始时间 开始时间
S

square_dch

Unregistered / Unconfirmed
GUEST, unregistred user!
为了减少数据量,有数据表设计为aaaa_XXXX,其中XXXX是年份
现在希望用COM+对象实现数据表的批量更新,具体情况是:
从外部设备读入批量数据(比如5000条纪录),修改(增加)ClientDataSet
的数据集,然后利用ApplyUpdates方法更新数据库。但是要求
根据服务器的时间来确定采用哪一张表(例如:服务器时间是2003年,用aaaa_2003)
请问如何解决?
 
没人回答吗?
如果是嫌分少我可以再加。
大家帮帮忙啊!我急等!
 
大虾们今天都休假吗?
这个问题很难吗?
 
在客户端用ApplyUpdates方法估计不行。因为多层基本上是无状态的,而ApplyUpdates的更新是对应服务器中ADODataSet查询时所用的表的,你现在用ApplyUpdates更新回去,就必定会更新到服务器端ADODataSet的commandtext里默认所用到的表。而且你也不可能调用过程去改变远程ADODataSet里面的Commandtext,因为你改变的只是某一个实例,一旦你调用过程ApplyUpdates(注意这时是第二次调用,和前一次已经没有关系了),ADODataSet中的表又会回到默认状态。
我建议你自己写个过程,例如:
1 procedure Updates(const Delta:Olevariant;var Errors:integer);
然后在这个过程里面首先把ADODataSet的commandtext改变成对应当前时间表的SQL(因为这已经在服务器上了,所以很容易得到表名)
再通过DataSetProvider1.ApplyUpdates(.........)将Delta通过ADO执行到数据库中去
 
给你一条MSSQL语句,查找用户表。
知道表了就应该知道该如何做了吧。
SELECT name FROM sysobjects WHERE name = ''' + 'aaaa_' + FormatDateTime('yyyymmdd',Now) + '''';
 
用分区视图解决,每个年份建立一张表,
查询时使用联合,更新时使用存储过程。
 
很简单,在provider得BeforUpdateRecord自己写sql,或者用UpdateSQL处理.
 
我觉得事情比想象的要简单,
如果前台修改数据,而服务器来确定将数据提交到哪一个表中,那么每个数据表的结构应该
是一致的,如果是这样,只要根据时间的判断来更改服务器端query控件中的sql语句就可以了。
 
如果表结构一样DataSetProvider.OnGetTableName下根据条件变更表名
 
可不可以先将客户端数据形成一个记录集数据,再将这些数据传到应用服务器,由应用服务器来处理数据的添加、删除等操作,再将结果返回给客户端呢?
 
很简单啊,一条记录写一个SQL添加语句。然后执行SQL将数据添加到数据库中
 
问题解决了,抱歉现在才接贴。
谢谢各位,特别是Xiaasp!
 
后退
顶部