三层结构,我写了一个简单的测试程序,为什么客户端再次取数据会出错?应用程序服务器端:
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.请懂的兄弟们帮忙找一个原因。

解决方案 »

  1.   

    with DataSet.RS do
      begin
        //这里最好加上初始化的内容,例如写sql以及清空参数
        with Params.CreateParam(ftString, 'IsActive', ptInput) do
          Value := '1';    Open;    try
          while not Eof do
          begin
            ......
            Next;
          end;
        finally
          Close;
        end;
      end;
      

  2.   

    兄弟,我加了,也不行。  with DataSet.RS do
      begin
        Close;
        
        with Params.CreateParam(ftString, 'IsActive', ptInput) do
          Value := '1';    Open;
        .................是哪里出的问题呢?真是奇怪。
      

  3.   

    while not Eof do
       begin
         ......
       Next;
    end;
    省略部分做的什么工作。是对结果集进行修改嘛?
    DataSnap有个缓存机制,就是数据查询出来后如果对查询出来的数据有修改的话(修改的时缓存中的数据),必须所作修结果改提交到数据库或者撤销修改。在没提交之前不允许刷新或者二次查询,因为delphi不知道该将缓存中修改后的数据是提交到数据库还是放弃,必须让用户来做出选择。
      

  4.   

    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;
       if Modified then /////////
         post;          ///////// 修改部分   
         ApplyUndate(0);/////////
      end;
    如果是楼上说的原因的话,这样就能解决~:D
      

  5.   

    sorry.敲错个字母还少敲了个s;
    applyUndate(0)改为ApplyUpDates(0)