为什么不能更新数据?(100分)

  • 主题发起人 主题发起人 大笨
  • 开始时间 开始时间

大笨

Unregistered / Unconfirmed
GUEST, unregistred user!
我自己建立了一个midas三层系统.应用服务器的RDM有一个Query和一个DataSetProvider,
客户端用ClientDataSet和DcomConnection来联结这个Query,开始查询还好好的,可是一
修改数据麻烦就来了:调用ClientDataset的ApplyUpdate方法根本不能更新数据库中的数
据!我试着把Query换成Table,结果可以成功.
请问各位高手:为什么用Query不能更新数据?如果能,应该怎么做?
 
对于应用于远程数据模块中的query,在更新数据方面有很多限制。
我记得的有:
1.不能join多表
2.不能有不基于索引的order by语句
3.不能包括子查询
等等。
如果你确实非常想知道,我给你查一下资料。
txmaster@163.com
 
多表连接是不能直接更新的
 
query的ParamCheck属性是否设置为True
 
1.我并没有超出txmaster和kindly所说的几种限制(具体sql语句如下),但查询时的sql语
句是从客户端传到服务端,再由服务端执行的.这种执行方式有影响吗?
SqlStr:='SELECT DWBM 单位编码,'+
'JZH 机组号,'+
'RL 容量,'+
'TCRQ 投产日期,'+
'SBZT 设备状态,'+
'ZJM 助记码,'+
'BZ 备注'+
' FROM TAD_JZ'+
' WHERE DWBM='''+Tmp_Dwbm+'''';
DcomConntion1.AppServer.QryTest(SqlStr);
......
2.我的query的ParamCheck的确为true,可是改为false以后还是不能更新啊!
 
大笨,你是哪个电厂的
 
呵呵,老兄一定是电力部门的吧?
可惜我不是,我们正在为某电力局做mis......
 
动态设置的sql语句查询是可以的,但是你怎么来动态设置query对应的updatesql组件的
更新语句呢
建议:1。对于既要查询又要更改的query,起码要把sql,确定好,where条件则可以动态改变
这样你可以确定你的updatesql的更新语句。
 
用updatesql是可以解决,但不用呢?我也遇到了这个问题,提示是"表和视图不存在"
 
我建议用ASTA,只要你QUERY的关键字设对就行了.
 
因为你的TDatasetProvider.resolvetodataset:=false,因此数据更新语句是在TDatasetProvider
里生成的。而你的SQL是 '机组号'/'容量'之类的重定义字段。而TDatasetProvider生成的更新
语句就类似 'update TAD_JZ set 容量=1000 where 机组号=1'。这样的语句提交到你的数据库里当然
不能更新你的TAD_JZ表了。
 
用updatesql就可以了.
 
updatesql 好象只能一对一,谁知道如何写一对多的方法?除了写SQL语句!
好象在服务器端拆分包也能实现,谁能举个例子?thanks
 
各位,如果在三层中的服务器端的Tquery不能确定SQL语句,只靠客户端的clientdataset
向服务器端提交各种sql语句来实现数据库中的数据更新。不知行不行?因为实际上事先
在服务器上确定表是太不灵活了。如果事先不能在服务器端确定sql语句,那么是就不能
用updatesql了。那么怎么才能更灵活呢?
 
我在用BCB5做多层结构系统时,我在Server端加入了一个取得服务器IP地址的方法:GetServerIP它的参数是vIP:Variant *,IN方式,并在服务端实现了这个方法,
加入的代码如下:
*vIP="192.168.0.01";最后我注册成功。
可是在我开发客户端程序时,我用TSocketConnection
当取得它的服务时我是这样做的:
Variant* vip;
SocketConnection1->AppServer.GetServerIP(vip);
Edit1->Tex=vip;
可 是我在运行程序时出错,没有编译通过。
它说getserverIP不是variant的成员
getserverIP is not a memober of variant
请问?
我该如何去调用这个方法呢?
请各位大侠多多指教?
小生的QQ:65466700(24小时在线恭候)
MAIL: alongsun@sina.com
 
呵呵,最近一直没有上网……
感谢大家的帮助,我现在已经不用applyupdate了[:D]
 
后退
顶部