BDE 访问 SQL SERVER 时数据库锁住问题(100分)

  • 主题发起人 主题发起人 heonline
  • 开始时间 开始时间
H

heonline

Unregistered / Unconfirmed
GUEST, unregistred user!
当我执行 Update Tablename set FieldName = 5.0/3.0 where FieldId = xxxx 时
当一条记录的字段设定一个不能整除的值时,这条记录即被锁住,
提示BDE错误(Couldn't perform the edit because another user changed the record.),
BDE Error: 10259
此条记录其它用户在使用,不能修改,但用ODBC访问数据库时,可以修改此条记录。
 
Select * From 表 With (HOLDLOCK)
 
来自:htw, 时间:2001-1-18 10:20:00, ID:441489
wanfangme:

给你4条建议:
1)SQL Server 7 及2000具有行级锁定功能,建议使用它;
2)查询时,建议使用DirtyRead;
3)插入记录或修改记录时,建议使用TTable和TQuery的CacheUpdate属性设置
为true,并在TQuery或TTable的AfterPost事件中使用如下代码:
procedure TDataModuleNew.QueryDepartmentCodeAfterPost(DataSet: TDataSet);
var
SavePlace: TBookmark;
begin
with QueryDepartmentCode do
begin
Database1.StartTransaction;
try
ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
CommitUpdates;
end;

SavePlace:=DataModuleNew.QueryDepartmentCode.GetBookmark;
DataModuleNew.QueryDepartmentCode.Close;
DataModuleNew.QueryDepartmentCode.Open;
DataModuleNew.QueryDepartmentCode.GotoBookmark(SavePlace);
DataModuleNew.QueryDepartmentCode.FreeBookmark(SavePlace);
end;

4)多表操作时,请看如下代码:
with DataModuleNew do
begin
QueryInsert.Close;
QueryInsert.SQL.Clear;
strSQL := '某条SQL语句';
QueryInsert.SQL.Add(strSQL);

QueryPublic.Close;
QueryPublic.SQL.Clear;
sPublicSQL :='另一条SQL语句';
QueryPublic.SQL.Add(sPublicSQL);

Database1.StartTransaction;
try
{try to write the updates to the database};
QueryInsert.ExecSQL;
QueryPublic.ExecSQL;
for i:= 1 to nTotalDetailRow do
begin
QueryDetail.Close;
QueryDetail.SQL.Clear;
QueryDetail.SQL.Add(sDetailSQL);
QueryDetail.ExecSQL;
end;
Database1.Commit; {on success, commit the changes};
except
ShowMessage('您录入的数据有错! ');
Database1.Rollback; {on failure, undo the changes};
exit;
end;
ShowMessage('数据提交成功!');
QueryInsert.Close;
end;
//以前收藏的例子,对你有用的.


 
将cachedupdate 设为True,试试!
 
我以前也初夏过这种情况,好像是MEMO 字段滩多了,
还有,Tigger 里面有修改重复了
 
后退
顶部