碰到一个奇怪的问题,求解
在运行环境中发现一个Oracle数据库表中的某些数字类型的字段经常被置成空值, 而Datetime类型的字段被置成0(用to_char('yyyymmdd',fld)显示为8个'0')查找了一下原因, 发现有是由于程序中使用tquery + Tupdatesql 更新数据库表引起的 情况如下
一个Tquery 通过一个查询连接表 A , 用Tupdatesql 绑定了 更新,插入,删除语句界面上用一个DBGrid关联到Tquery , tquery采用缓存方式 修改数据库记录时,选定一个记录,作了修改后,选定另一个记录(此时引起post), 再做修改, 完毕后 ,保存到数据库
保存到数据库的代码如下
if (Query1.State = dsEdit) or (Query1.State = dsInsert) then
Query1.Post; try
try
Query1.DataBase.StartTransaction;
Query1.ApplyUpdates;
Query1.DataBase.Commit;
except
Query1.DataBase.Rollback;
raise;
end;
except
raise;
end;现在的问题是, 当第一个修改的记录某个字段为空时, 保存结束后,第二个字段的值也被设置成空了. 我跟踪到 Delphi 自身的代码, 找不出原因, 各个字段和参数的值没感觉有问题. 请各位达人指导.
在运行环境中发现一个Oracle数据库表中的某些数字类型的字段经常被置成空值, 而Datetime类型的字段被置成0(用to_char('yyyymmdd',fld)显示为8个'0')查找了一下原因, 发现有是由于程序中使用tquery + Tupdatesql 更新数据库表引起的 情况如下
一个Tquery 通过一个查询连接表 A , 用Tupdatesql 绑定了 更新,插入,删除语句界面上用一个DBGrid关联到Tquery , tquery采用缓存方式 修改数据库记录时,选定一个记录,作了修改后,选定另一个记录(此时引起post), 再做修改, 完毕后 ,保存到数据库
保存到数据库的代码如下
if (Query1.State = dsEdit) or (Query1.State = dsInsert) then
Query1.Post; try
try
Query1.DataBase.StartTransaction;
Query1.ApplyUpdates;
Query1.DataBase.Commit;
except
Query1.DataBase.Rollback;
raise;
end;
except
raise;
end;现在的问题是, 当第一个修改的记录某个字段为空时, 保存结束后,第二个字段的值也被设置成空了. 我跟踪到 Delphi 自身的代码, 找不出原因, 各个字段和参数的值没感觉有问题. 请各位达人指导.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货