DCOM三层结构中 ClientDataSet1.ApplyUpdates更新数据问题 ( 积分: 100 )

  • 主题发起人 主题发起人 riccdw
  • 开始时间 开始时间
R

riccdw

Unregistered / Unconfirmed
GUEST, unregistred user!
大富翁们好。<br>本人通过TClientDataSet来更新数据库时,怎么就只能更新一条记录<br>当我更新两条记录时。出现“Cannot&nbsp;Perform&nbsp;this&nbsp;operation&nbsp;on&nbsp;a&nbsp;closed&nbsp;dataset”<br>客户端我是采用DCOM来联接RemoteDataModule<br>客户端代码如下:<br>procedure&nbsp;TForm1.Button2Click(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;ClientDataSet1.Append;&nbsp;//添加记录<br>end;<br><br>procedure&nbsp;TForm1.Button3Click(Sender:&nbsp;TObject);<br>begin<br><br>&nbsp;&nbsp;ClientDataSet1.Delete&nbsp;;//删除记录<br><br>end;<br><br><br>procedure&nbsp;TForm1.Button4Click(Sender:&nbsp;TObject);<br>//提交数据更新<br>begin<br>&nbsp;&nbsp;ClientDataSet1.CheckBrowseMode();<br>&nbsp;&nbsp;ClientDataSet1.ApplyUpdates(-1);<br>end;<br>服务端处理:<br>procedure&nbsp;TGP40CommData.ProProduceCostBeforeUpdateRecord(Sender:&nbsp;TObject;<br>&nbsp;&nbsp;SourceDS:&nbsp;TDataSet;&nbsp;DeltaDS:&nbsp;TCustomClientDataSet;<br>&nbsp;&nbsp;UpdateKind:&nbsp;TUpdateKind;&nbsp;var&nbsp;Applied:&nbsp;Boolean);<br>var&nbsp;str1:string;<br>begin<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//----分为插入、删除、更新改变记录---<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;UpdateKind&nbsp;=&nbsp;ukInsert&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str1:='insert&nbsp;into&nbsp;ProduceCost&nbsp;(ProdID,StapID,StapAmount)&nbsp;values(';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str1:=str1+''''+DeltaDS.FieldByName('ProdID').Text+''',';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str1:=str1+''''+DeltaDS.FieldByName('StapID').Text+''',';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str1:=str1+''''+DeltaDS.FieldByName('StapAmount').Text+''')';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;UpdateKind=ukDelete&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str1:='delete&nbsp;from&nbsp;ProduceCost&nbsp;where&nbsp;pcid='''+SourceDS.FieldByName('PCID').Text+'''&nbsp;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;UpdateKind=ukModify&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str1:='update&nbsp;ProduceCost&nbsp;set&nbsp;stapAmount=';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str1:=str1+DeltaDS.FieldByName('stapamount').Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str1:=str1+'&nbsp;where&nbsp;pcid&nbsp;=&nbsp;'''+SourceDS.FieldByName('pcid').Text+'''&nbsp;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ProduceCost.Close;&nbsp;//这句要不要都出现问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProduceCost.SQL.Clear();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProduceCost.SQL.Add(str1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProduceCost.ExecSQL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Applied:=true;<br>end;<br><br>实在是搞不清楚那里错了。是不是某个控制的属性没有设置好。请各位大富翁帮帮忙。
 
这是你的表的约束限制的,ProdID,StapID那个是你的主key
 
没有啊。<br>我的PK是PCID<br>ProdID,StapID只不过是不为空的字段,但是有索引<br>这样的更新是跟主键和索引有关系是吗?
 
ProProduceCostBeforeUpdateRecord<br><br>每更新一条记录这个事件触发一次。你再找找其它的代码吧。<br><br>也可单步跟下代码。
 
谢谢!!!我还在录找答案中。。。有什么好的建议也可以说说咯。。。。。。
 
//谢谢关心,问题已解决。<br>//是因为ProduceCost:TQuery,并绑定了ProProcuceCost:TDataSetProvider<br>//这个不能在用了。而要用外创建一个新TQuery来执行就OK啦~~<br><br>&nbsp;&nbsp;ProduceCost.SQL.Clear();<br>&nbsp;&nbsp;ProduceCost.SQL.Add(str1);<br>&nbsp;&nbsp;ProduceCost.ExecSQL;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
594
import
I
后退
顶部