一个TQuery + tupdatesql 更新数据库表的问题

碰到一个奇怪的问题,求解
在运行环境中发现一个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 自身的代码, 找不出原因, 各个字段和参数的值没感觉有问题. 请各位达人指导.
[803 byte] By [michaelguy-杨威利] at [2008-1-9]
# 1
上面最后描述错了, 是第二个记录的对应字段也被设置成空了
michaelguy-杨威利 at 2007-10-18 > top of Msdn China Tech,Delphi,数据库相关...