三层架构下无法更新数据的问题。

独醒子 2013-04-25 10:23:32
服务端采用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 改回属性设置后 程序又正常了.

请问这种问题该如何解决?因为需要连接不同的数据库 所以需要在客户端设置服务器地址等信息。
...全文
186 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
独醒子 2013-05-06
  • 打赏
  • 举报
回复
客户端全部是数据感知控件(DBEdit),修改单一表数据。 点击DBEdit后修改内容。 执行确定按钮(代码如下): CDS.Post; CDS.ApplyUpdates(0); 界面看是正常。 但数据库中数据并未修改。 CDS.Refresh; 而且执行刷新数据集命令时(如下) 报错:“检测到错误类EDBClient,错误信息: Insufficient memory for this operation”
lyhoo163 2013-05-06
  • 打赏
  • 举报
回复
告诉你,三层下不能使用ApplyUpdates(),更新数据。我度过,只有瓣增的数据,可以通过ApplyUpdates更新数据,原有数据,不能更新。如果要更新,请的SQL语句,逐条更新。
虎子8 2013-04-26
  • 打赏
  • 举报
回复
跟踪一下通过读配置文件得到的参数是否 与 直接设置属性是一样的 按理说如果完全一样,不应该出现这种情况
火龙岛主 2013-04-26
  • 打赏
  • 举报
回复
你服务端的代码是怎么写的,单纯从这个配置文件,看不出什么问题。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧