異常:
http://wufanglu.diy.myrice.com/tmp/Q02.gif
如圖所示,參數為:
FetchOnDemand=False
PacketRecords=5啟動時顯示的是5條記錄,這是正常的,
但點擊按鈕執行 GetNextPacket 後得到的是重復的記錄,而不是後面的五條。用了這麼久,還是頭一次“見鬼”,在客戶端建了n個test,結果都是正常的,說明AppServer那邊沒問題。環境:Delphi7+MSSQL, 三層,AppServer中的是 AdoDataSet。

解决方案 »

  1.   

    因为你的服务器是无状态的
    要实现无状态取得下一个包可以使用下面的代码
    procedure TPooledRDM.DataSetProvider1BeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    begin
      try
        Query1.Close;
        Query1.SQL.Text := OwnerData[0];
        if not VarIsNull(OwnerData[1]) and not VarIsEmpty(OwnerData[1]) then
        begin
          Query1.Open;
          if not Query1.Locate(Query1.Fields[0].FieldName, OwnerData[1], []) then
            raise Exception.Create('Record not found');
          Query1.Next;
        end;
      finally
        OwnerData := NULL;
      end;
    end;或把服务器设为状态服务器
      

  2.   

    如果說我那是服務器的問題,但我試了用測試的程序可以正常的操作。
    所以我想問題可能是客戶端的問題,或者是AppServer與Client之間搭配的問題。其中,
    AppServer 無非就是:
    一個 TAdoConnection, 
    兩個 TAdoDataSet(主從表),
    一個 TDataSource 主從表的橋梁,
    一個 TDataSetProvider
    Client就是:
    一個 TDcomConnection,
    兩個 TMyClientDataSet(主從表)(注意:TMy...,考濾到以後的靈性,做了個組件直接繼承TClientDataSet,其屬性、方法、事件都沒改), 
    兩個 TDataSource就這幾個組件裡面還存在什麼玄機?屬性都是一樣的設置,測試工程能用、正式工程有異常。
      

  3.   

    測試工程比較簡單,窗體沒用到繼承,正式工程從TForm到最後窗體繼承了 五六次。TMyClientDataSet是放在最後那個窗體,也就是說沒在窗體中繼承。