三层结构,我写了一个简单的测试程序,为什么客户端再次取数据会出错?应用程序服务器端:
ADO连接数据库,放一个ADOConnection,一个ADOQuery,一个DataSetProvider。
属性设置都是默认。客户端:
放一个DCOMConnection,一个ClientDataSet,名字为RS。取数据代码如下:
with DataSet.RS do
begin
with Params.CreateParam(ftString, 'IsActive', ptInput) do
Value := '1'; Open; try
while not Eof do
begin
......
Next;
end;
finally
Close;
end;
end;第一次取数据没有问题,当我第二次执行这段代码的时候,就会报错,
错误如下:
Multiple-step OLE DB operation generated errors.Check each OLE DB status value, if available. NO work was done.请懂的兄弟们帮忙找一个原因。
ADO连接数据库,放一个ADOConnection,一个ADOQuery,一个DataSetProvider。
属性设置都是默认。客户端:
放一个DCOMConnection,一个ClientDataSet,名字为RS。取数据代码如下:
with DataSet.RS do
begin
with Params.CreateParam(ftString, 'IsActive', ptInput) do
Value := '1'; Open; try
while not Eof do
begin
......
Next;
end;
finally
Close;
end;
end;第一次取数据没有问题,当我第二次执行这段代码的时候,就会报错,
错误如下:
Multiple-step OLE DB operation generated errors.Check each OLE DB status value, if available. NO work was done.请懂的兄弟们帮忙找一个原因。
begin
//这里最好加上初始化的内容,例如写sql以及清空参数
with Params.CreateParam(ftString, 'IsActive', ptInput) do
Value := '1'; Open; try
while not Eof do
begin
......
Next;
end;
finally
Close;
end;
end;
begin
Close;
with Params.CreateParam(ftString, 'IsActive', ptInput) do
Value := '1'; Open;
.................是哪里出的问题呢?真是奇怪。
begin
......
Next;
end;
省略部分做的什么工作。是对结果集进行修改嘛?
DataSnap有个缓存机制,就是数据查询出来后如果对查询出来的数据有修改的话(修改的时缓存中的数据),必须所作修结果改提交到数据库或者撤销修改。在没提交之前不允许刷新或者二次查询,因为delphi不知道该将缓存中修改后的数据是提交到数据库还是放弃,必须让用户来做出选择。
with Params.CreateParam(ftString, 'IsActive', ptInput) do
Value := '1';
Open;
try
while not Eof do
begin
......
Next;
end;
finally
Close;
end;
if Modified then /////////
post; ///////// 修改部分
ApplyUndate(0);/////////
end;
如果是楼上说的原因的话,这样就能解决~:D
applyUndate(0)改为ApplyUpDates(0)