如何实现数据库的事务操作,对记录进行编辑?高分相送。

romanticonline 2002-06-02 06:24:34
我写一数据库程序,打算编写一个对数据库记录进行修改的程序,可以上一条记录和下一条记录的进行修改,最后可以按“保存”实现数据库记录的全部保存,而如果用户选择了“取消”,刚原数据库记录保持不变,我本来打算自己构建一个指针来实现,可是双向指针比较难操作,请高手告诉我,如何具体实现这样的操作好呢,谢谢高手。

...全文
45 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lincanwen 2002-06-04
  • 打赏
  • 举报
回复
对access有效的!
romanticonline 2002-06-04
  • 打赏
  • 举报
回复
tks to all my friend that they was give me help.
romanticonline 2002-06-04
  • 打赏
  • 举报
回复
啊,是吗,可是我试了一下好象不行的,我的主要目的是可以允许用户不停的按“后一条记录”的按钮的,也就是说用户可以重复的通过“后一记录”来增加新记录。只要用户不按保存,记录就不会保存到数据库中,如果一旦选择了取消,数据库中的记录就不会被修改。


再次感激您的回复,我想分是不重要的,关键是我们通过讨论可以增加我的编程的水平。
如果你需要,我可以再增加分。
qiandeng 2002-06-03
  • 打赏
  • 举报
回复
帮你提前
artman 2002-06-03
  • 打赏
  • 举报
回复
可以使用 ADO 的Batchupdate进行成批提交.
将Adoquery1.LockType 设为 ltBatchOptimistic
Adoquery1.Cursortype 设为 ctKeyset 或 ctStatic

...
//对Adoquery1进行操作,可以是程序,也可以是用户通过DataAccess控件操作的
...
AdoConnection1.BeginTrans;
try
Adoquery1.UpdateBatch();
Adoconnection1.CommitTrans;
except
on E:EDatabaseError do
Adoconnection1.Rollbacktrans;
showmessage(E.message);
end;

对Access也可以,我试过.

romanticonline 2002-06-03
  • 打赏
  • 举报
回复
谢谢楼上的哥们。

对ACCESS数据库有效吗?

我的操作环境:

W2K+ACCESS 2000
lincanwen 2002-06-03
  • 打赏
  • 举报
回复
修改按钮和保存按钮是同一个,开始这个按钮caption为“修改”,点这个按钮后,这个按钮的caption为“保存”.另外还有一个取消按钮,则:
修改、保存按钮中:
if button1.caption='修改' then
begin
if not adoconnection1.InTransaction then
adoconnection1.begintrans;
adoconnection1.CommandTimeout:=100;//100秒中内要完成操作。
button1.caption:='保存';
exit;
end if
else
begin
try
adoconnection1.execsql('insert into..');//增,删,改的sql语句
adoconnection1.execsql('update 表 set.')//增,删,改的sql语句
adoconnection1.execsql('update 表 set.')//增,删,改的sql语句
adoconnection1.committrans;
button1.caption:='修改';
except
showmessage('不能修改数据');
adoconnection1.rollbacktrans;
end;
end;
取消按钮中:
if adoconnection1.InTransaction then
adoconnection1.rollbacktrans;
lincanwen 2002-06-03
  • 打赏
  • 举报
回复
修改按钮和保存按钮是同一个,开始这个按钮caption为“修改”,点这个按钮后,这个按钮的caption为“保存”.另外还有一个取消按钮,则:
修改、保存按钮中:
if button1.caption='修改' then
begin
if not adoconnection1.intrans then
adoconnection1.begintrans;
adoconnection1.CommandTimeout:=100;//100秒中内要完成操作。
exit;
end if
else
begin
try
adoconnection1.execsql('insert into..');//增,删,改的sql语句
adoconnection1.execsql('update 表 set.')//增,删,改的sql语句
adoconnection1.execsql('update 表 set.')//增,删,改的sql语句
adoconnection1.committrans;
except
showmessage('不能修改数据');
adoconnection1.rollbacktrans;
end;
end;
取消按钮中:
if adoconnection1.intrans then
adoconnection1.rollbacktrans;
qiandeng 2002-06-02
  • 打赏
  • 举报
回复
帮你提前
romanticonline 2002-06-02
  • 打赏
  • 举报
回复
至 lincanwen(海) :

我觉得你提供的方法很适合我用的,可以再详细说明一下吗,我以前没有接触过事务处理的编程。

表示真诚的感激。
如果分不够,我可以再加。

romanticonline 2002-06-02
  • 打赏
  • 举报
回复
to louislingjjw(懿 颖) :

可以举个实例吗,我以前没有接触过关于SQL的事务处理的,谢谢你。

我原来是想通过一个自己构建的记录,在进行编辑前先把数据库中的所有记录存放到这个记录中,然后用户的修改直接对这个记录进行,如果用户选择了保存,把这个记录中的内容保存取数据库就行。不知这样是否可行,其实我觉得你提供的方法比这个好用多了。

再次表示感谢。

dschebei 2002-06-02
  • 打赏
  • 举报
回复
呵呵!我同意楼上的!这可是最简单的事务处理方法了.
LouisJJW 2002-06-02
  • 打赏
  • 举报
回复
sSql1:='begin tran';
sSql2:='对数据库的编辑';
sSql3:='end tran';
sSql4:='try 提交事务';
sSql5:='except 回滚 end ';
sSql:=sSql1+sSql2+sSql3+sSql4+sSql5;
adoconnection1.execsql(sSql)
lincanwen 2002-06-02
  • 打赏
  • 举报
回复
如果是adoconnect连接数据库,则:
adoconnection1.begintrans;
保存按钮中:
try
adoconnection1.execsql(sql语句1)
adoconnection1.execsql(sql语句2)
adoconnection1.execsql(sql语句3)
adoconnection1.committrans;
except
showmessage('不能修改数据');
adoconnection1.rollbacktrans;
end;
取消按钮中:
adoconnection1.rollbacktrans;
lincanwen 2002-06-02
  • 打赏
  • 举报
回复
如果是adoconnect连接数据库,则:
adoconnection1.begintrans;
保存按钮中:
try
adoconnection1.execsql(sql语句1)
adoconnection1.execsql(sql语句2)
adoconnection1.execsql(sql语句3)
adoconnection1.committrans;
except
showmessage('不能修改数据');
adoconnection1.rollbacktrans;
end;
修改按钮中:
adoconnection1.rollbacktrans;
netlib 2002-06-02
  • 打赏
  • 举报
回复
控件Table和query里都有指针呀,
改变是有goto、next、prior、first、last,很好用呀,
可以很方便的控制。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧