多用户操作数据库的问题,(45分)

  • 主题发起人 主题发起人 编程傻子
  • 开始时间 开始时间

编程傻子

Unregistered / Unconfirmed
GUEST, unregistred user!
当编写数据库(SQL Server)软件时,面对多用户操作,请问各位高手是如何处理的?比如:当两个
用户同时修改一条记录或一个用户修改一条记录而另一个用户确删掉了这条记录。

当A用户正在编辑10号记录,而B用户点击删除10号记录,

(提示B用户本记录正处于编辑状态不能被删队‘)这是怎样做的。
 
如果都使用Query,那是没有问题的呀
按顺序来就可以了
 
....听免费课......
 
为了把问题描述得更详细一些, 我做了一个测试,

放一个adoquery (select * from table1); 三个字段.
adoquery-->连接到adoconnection,
datasource连接 adoquery1,

放一个dbgrid,控件,再放一个增加,一个修改 ,一个删除按钮.

dbgrid的datasorce连接到datasource1, 

我在form1的create事件里

with adoquery1 do
begin
active:=false;
sql.clear;
sql.add('select * from table1');
active:=True;
end;

显示正常,

1。点击添加操作;

procedure Tform1.button1click(sender:object); //添加;
begin
Form2:=Tform2.create(application);
Form2.option:=0; //表示添加;
adoquery1.append;
Form2.showmodal;
end;

procedure Tform1.button1click(sender:object); //添加;
begin
Form2:=Tform2.create(application);
Form2.option:=1; //表示修改;
adoquery1.edit;
Form2.showmodal;
end;


进入Form2后,(我在form2放了两个 dbedit用于显示数据.编辑数据);

另外还有一个确定按钮, 一个取消按钮.

Public
option:integer;

Procedure Tform2.button1click(sender:object); 确定
begin
Try
Adoconnection.Beginstran;
ADOQUERY1.POST;
Adoconnection.commit;
except
showmessage('删除不成功'); 1.//这里的数据库错误类型是怎样确定的。
Adoconnection.rollback;
end;
end;

问题:
不知道我上面写的是否合理,请大家指教。 我在单用户环境操作是没有问题的。
但当两个用户(我故意这么测试, A用户点击该模块的Form1增加按钮, B用户也点击该模块的增加按钮, 这样当其中一个用户A先点击Form2“确定”
保存成功,
但是当B用户点击“确定”按钮时, A用户其实已经修改了数据,B用户此时操作将不成功, 事务回滚。
?这个事务回滚的原因是什么。语句怎样写。

大家是怎样控制的。
 
找找以前的贴子,有详细的解说
 
这是个数据库问题,看一看数据库理论有关记录锁和事务的独立级别
 
我昨天看了一整天,头都搞大了。
 
如果A用户所修改的那条记录已被B用户删除了,你可以在保存之前做个查询,如果找的到该
条记录则保存,否则提示那条记录已被删除
 
这是有关数据库的本身的问题
你在建立数据库的时候,没有设立安全机制,
这种情况下很容易导致出错或者是数据库的死锁。
 
后退
顶部