客户端通过TSocketConnect组件与服务端通讯,可以连通.但是此处代码有问题:
    1 : CDS1.Data := SocketConn.AppServer.Query(1,str);
    2 : CDS2.Data := SocketConn.AppServer.Query(1,str);
    3 : CDS3.Data := SocketConn.AppServer.Query(1,str);
    4 : CDS4.Data := SocketConn.AppServer.Query(1,str);
执行到第一条语句就出错.服务端query代码如下:
function TConnectDB.Query(Flag: integer;
  const SQL: WideString): OleVariant;
begin
  if Flag = 1 then begin
    MainQuery.Close
    MainQuery.SQL.Clear;
    MainQuery.SQL.Add(SQL);
    MainQuery.Open;
    Result := MainDataSetProvider.Data;
         
    //MessageBox(0,'This should be on top.', 'Look', 1);
    //VariantCopy(Result,temp);
    MainQuery.Close;
    end
  else begin
    BackupQuery.SQL.Clear;
    BackupQuery.SQL.Add(SQL);
    BackupQuery.Open;
    Result := BackupDataSetProvider.Data;
    BackupQuery.Close;
    end;
end;
执行红色部分代码,请高手帮忙,十万火急.成功解决,另有分相送.

解决方案 »

  1.   

    将 MainDataSetProvider 指定一个CLEINTDATASET控件。
    然后返回cleintdataset.data实例代码:    SQLQuery:=GetNewAdoQuery;  //动态生成QUERY
        SQLClientData:=GetNewClientdataset; //动态生成CLIENTDATASET
        SQLProvider:=GetNewDatasetProVider;  //动态生成DATASETPROVIDER
        SQLProvider.DataSet:=SQLQuery;   //设定QUERY 与DATASETPROVIDER
        SQLClientData.SetProvider(SQLProvider); //设定 DATASETPROVIDER与CLIENTDATASET
        SQLQuery.Close;
        SQLClientData.Active:=False;
        SQLQuery.SQL.Clear;
        ComStr:='select  * from '+TableName+' where '+SqlStr;
        SQLQuery.SQL.Add(ComStr);
        if CheckConntion then
          begin
            SQLClientData.Active:=True;
            ReSult:=SQLClientData.Data; //返回CLIENTDATASET的DATA值
          end;释放动态控件的代码就不写了!
      

  2.   

    无效的数据包,网络问题~~
    ping一下数据库服务器,看有没有丢包现象~~
      

  3.   

    1、 MainDataSetProvider的DataSet是不是指向了MainQuery2、在服务器端放ADOQuery,DataSetProvider,ClientDataSet并关连。然后在ClientDataSet中执行你的SQL。返回ClientDataSet.Data试试。