关于DBEDIT

pbray 2009-03-24 09:08:36
我在工具栏上做了几个功能按钮
查询 新增 上一条 下一条等
查询: 被点击后,发送一个消息,某个活动的窗体接受到后,就执行 append; 将窗体上的DBEDIT处于编辑状态可以输入查询条件.
新增: 被点击后,也是发一个消息,某个活动的窗体接受到后,也执行 append; 将窗体上DBEDIT里的值清空,等待用户输入新的数据.
其他按钮也是发消息,控制窗体上的DBEDIT显示数据.
我在一个用户维护菜单的 点击 事件里写了这样的代码.当用户点击后,就创建此FORM,并显示,然后在APPEND;
当FORM显示后,我想查询数据,我就点 查询 , 然后我输入条件,然后点FORM上的查询按钮(不是工具栏上的 查询).查询出数据.这时我看到了数据,我又想添加数据,则我点了工具栏上的 新增
数据被清空,我在数据库里一看,查询出的数据竟然被插入到数据库了.而我的意思只是清空,让DBEDIT处于编辑状态,让用户去输入信息.
我试着用事务来控制,但如果用户反复的这样操作,就会开启很多事务,如果这些事务不停的开启而不回滚,那也是要报错的.
结果我在APPEND前开启事务,在APPEND后回滚事务,在每一个用到APPEND地方都这样做.
结果是不会插入到数据库了,但我查找数据却找不到了,好象是QUERY.DATASET关闭了还是怎么了,就是没数据.
还请各位高手帮忙.
因为我觉得使用DBEDIT可以省很多代码,而且 做 上一条 下一条等查询数据功能非常的方便!
...全文
126 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pbray 2009-03-25
  • 打赏
  • 举报
回复
哦!非常感谢!
starluck 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pbray 的回复:]
引用 4 楼 starluck 的回复:
引用 2 楼 pbray 的回复:
楼上的朋友是说用ADOQUERY+EDIT做?
我现在就是搞不清楚APPEND 执行后是不是就把数据插入到数据库了?
按道理是需要POST提交后才进入数据库的,不知道为什么我有没有POST,数据还是被插入进去了!


adodataset 的 locktype 在非 ltBatchOptimistic 下,APPEND时,会先将当前如果处于 Edit 状态的记录先提效,所以你再执行APPEND,实质是一个 adoquery.post; adoq…
[/Quote]3

不會。
pbray 2009-03-25
  • 打赏
  • 举报
回复
把锁定类型改为 ltBatchOptimistic后,我测试了下,数据没被插入到数据库了!
还是感谢各位朋友和starluck 的帮助!
不知道会不会出现其他错误!先给分吧
pbray 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 starluck 的回复:]
引用 2 楼 pbray 的回复:
楼上的朋友是说用ADOQUERY+EDIT做?
我现在就是搞不清楚APPEND 执行后是不是就把数据插入到数据库了?
按道理是需要POST提交后才进入数据库的,不知道为什么我有没有POST,数据还是被插入进去了!


adodataset 的 locktype 在非 ltBatchOptimistic 下,APPEND时,会先将当前如果处于 Edit 状态的记录先提效,所以你再执行APPEND,实质是一个 adoquery.post; adoquery.append; 的二个操作在执…
[/Quote]

ltBatchOptimistic 这个是批量操作锁定类型,也就是说如果我把adodataset的锁定类型改为 ltBatchOptimistic,那么我在APPEND的时候就不会插入到数据库罗.
但这个 ltBatchOptimistic 类型有数据限制吗?如果用户反复的点这2个按钮,进行切换.那是不是也会出问题呢?
starluck 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pbray 的回复:]
楼上的朋友是说用ADOQUERY+EDIT做?
我现在就是搞不清楚APPEND 执行后是不是就把数据插入到数据库了?
按道理是需要POST提交后才进入数据库的,不知道为什么我有没有POST,数据还是被插入进去了!
[/Quote]

adodataset 的 locktype 在非 ltBatchOptimistic 下,APPEND时,会先将当前如果处于 Edit 状态的记录先提效,所以你再执行APPEND,实质是一个 adoquery.post; adoquery.append; 的二个操作在执行。
lhy 2009-03-24
  • 打赏
  • 举报
回复
你是让DBEDIT干了两件事吗?不太好吧。
pbray 2009-03-24
  • 打赏
  • 举报
回复
楼上的朋友是说用ADOQUERY+EDIT做?
我现在就是搞不清楚APPEND 执行后是不是就把数据插入到数据库了?
按道理是需要POST提交后才进入数据库的,不知道为什么我有没有POST,数据还是被插入进去了!
楚人无衣 2009-03-24
  • 打赏
  • 举报
回复
用ADOQuery来做,把LockType设为ltBatchOptimistic;,确认提交时调用它的UpdateBatch()

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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