平时不常做什么数据库项目,一旦做了,发现了许多问题与麻烦,特别是多人共享记录操作:
一条记录,字段很多,几人要维护它的数据,才发现问题的严重!
一>别人修改后的脏数据问题:
实际出现脏数据,不应该影响我什么,但delphi 不允许Post,如何解决?
为了简单,我喜欢用DBEdit之类的操作界面,用户点Post时,才发现是"脏数据",没法提交,
录的数据白输了;
我希望是:脏数据也允许 Post, 希望大家出出主意!!! 脏数据: 就是别人同时修改记录后,我的缓冲区的记录与实际记录已出现不符, delphi不允行更新修改的,
除非,刷新成一致的;
总是出现:"无法为更新定位行,一些值已在最一次读取后已更改"
一条记录,字段很多,几人要维护它的数据,才发现问题的严重!
一>别人修改后的脏数据问题:
实际出现脏数据,不应该影响我什么,但delphi 不允许Post,如何解决?
为了简单,我喜欢用DBEdit之类的操作界面,用户点Post时,才发现是"脏数据",没法提交,
录的数据白输了;
我希望是:脏数据也允许 Post, 希望大家出出主意!!! 脏数据: 就是别人同时修改记录后,我的缓冲区的记录与实际记录已出现不符, delphi不允行更新修改的,
除非,刷新成一致的;
总是出现:"无法为更新定位行,一些值已在最一次读取后已更改"
function G_BuildDS(const DataSet: TADODataSet; strSql: string): integer;
begin
try
G_CloseDS(DataSet);
DataSet.CommandType := cmdText;
DataSet.CommandText := strSQL;
DataSet.Open;
DataSet.Recordset.Properties['Update Criteria'].Value := AdCriteriaKey; //主要是这个属性
Result := DataSet.RecordCount;
except
Result := -1;
end;
end;
经试验: ADO的这个问题不是Borland的事,是微软的问题;
我用一个ADOConnection1,两个ADODataSet: ADODataSet1,ADODataSet2都提向同
一个表做试验;用两个DBGrid观察; ADOConnection1.CursorLocation:=clUseServer;
ADODataSet1.CursorLocation:=clUseServer; // 不要忘了!
ADODataSet1.CursorType:=ctKeyset; // 不要忘了!
ADODataSet2.CursorLocation:=clUseServer;
ADODataSet2.CursorType:=ctKeyset;
//--------------------------------------------------------
一切OK!不会冲突,N个用户谁改了某一字段,就改了字段!
成功! 成功!