服务端采用delphi自带的scktsrvr.exe程序。服务端没问题。
客户端采用 SocketConnection + ClientDataSet 调试没问题。
此时,SocketConnection 是设置的属性。
可以更改数据库,任何操作都无问题。修改代码type
  TDM = class(TDataModule)
    conn: TSocketConnection;

procedure TDM.DataModuleCreate(Sender: TObject);
begin
  if not conn.Connected then
  begin
    try
      ini := TIniFile.Create(ExtractFilePath(Paramstr(0)) + 'config.ini');
      conn.Port := ini.ReadInteger('Server', 'port', 211);
      conn.Host := ini.ReadString('Server', 'IP', '127.0.0.1');
      conn.ServerGUID := ini.ReadString('Server', 'GUID', '{BE997A7C-4DDD-4E91-8E4E-5103E277B9C5}');
      conn.ServerName:=ini.ReadString('Server','sevName','prjServer.RDMServer');
      conn.Open;
      ini.Free;
    except
      MessageBox(0,'请重新配置config.ini文件!','服务器连接失败',MB_ICONHAND+MB_OK );
      Application.Terminate;
    end;
  end;
end;采用ini文件读取服务器配置。
启动程序数据浏览正常,修改数据也能看到,关闭窗口后再打开,数据又恢复了。
在sql中查询后得知,在界面中虽然看到数据已被修改,但未更新到数据库中。
将 SocketConnection 改回属性设置后 程序又正常了.请问这种问题该如何解决?因为需要连接不同的数据库 所以需要在客户端设置服务器地址等信息。

解决方案 »

  1.   

    客户端全部是数据感知控件(DBEdit),修改单一表数据。点击DBEdit后修改内容。
    执行确定按钮(代码如下):
    CDS.Post;
    CDS.ApplyUpdates(0);
    界面看是正常。但数据库中数据并未修改。
    CDS.Refresh;
    而且执行刷新数据集命令时(如下)
    报错:“检测到错误类EDBClient,错误信息: Insufficient memory for this operation”
      

  2.   

    告诉你,三层下不能使用ApplyUpdates(),更新数据。我度过,只有瓣增的数据,可以通过ApplyUpdates更新数据,原有数据,不能更新。如果要更新,请的SQL语句,逐条更新。