如果以DBGRID作输入界面,有两个按钮,一个是"新增",一个是"提交",我想使用ADOQUERY来作,如何写这两个代码?要考虑网络上有其它用户也在使用此软件.后台用SQL SERVER.我不想让用户一打开DBGRID就占用后台此数据库.
解决方案 »
- 谁能给个mail.sogou.com邮箱的快速登陆代码,像www.hao123这样的快速登陆,500分相送
- TListView 如何实现排序时在标题栏显示一个正三角形或倒三角形?
- 上联是“日日日日本人”,诚征下联
- 加分哦!!!!!!
- 200分解决获取打印机支持的全部纸张类型,在Win2k下出现的"stack overflow"的错误!!
- 如何使程序为当前窗口
- 请教查询显示的问题!
- Deiphi 7环境调试程序运行错误异常信息
- 令人头痛的程序呀,我快疯了。
- 怎样才可以让DBGrid的某一个栏位只可以选择下拉框的值,而不能用键盘输入
- EMAIL了很多简历出去,都没有回复,真不知道是怎么回事,这样找工作不知道要找到什么时候
- 请问这个错误提示要怎么解决?谢谢~~
将adoquery1和adoquery2连接到adoconnection.在提交的时候
try
adoconnection.beginstran
adoquery1.append;
adoquery1.fieldbyname('fieldbyname').asstring:=edit1.text;
adoquery1.post;
adoconnection.commit
except
adoconnection.rollback;
end;
我的意思是用DBGRID作输入界面,且要在网络上运行,考虑多用户。
“新增”和“提交”两个按钮。
Insert ; //Append ;提交 :Post ;
请详细些,不然不给分。我的分不多了。
用dbgrid来做输入界面,
我上面写的代码只要放在提交的时候运行,为什么这样做。是为了减少当前用户锁定的时间,几乎可以不计,并发冲突最少,如果换成
新增按钮代码
adoconnection.beginstran
adoquery1.append;提交按钮
adoquery1.fieldbyname('fieldbyname').asstring:=edit1.text;
adoquery1.post;
adoconnection.commit
取消按钮
adoconnection.rollback;这样做当用户点击新增按钮时,就一直锁定。直到用户按提交或者是取消。建议少用数据感知控件。 换成edit,
无非多写了几行代码。
但用DBGRID控件,如何在用户按“新增”时,只是向表单中添加数据,面不是已经打开后台数据库!同时又能使DBGRID的COLUMN得到输入焦点。如果这一点做到了,则“提交”时再执行真正的向数据库写数据和提交数据。
不知大侠们是否明白我的意思?如果用存储过程,也必须经过“新增”的按钮,让COLUMN得到输入焦点,同时还有一个问题,在提交时要给存储过程赋参数,如何取得DBGRID的值。另外,如果用户修改了其它行,如何提醒用户“保存”呢?
是的,首先感谢。
我以前写程序时,都是用EDIT控件,但是有没有想过,EDIT作输入界面时,需要进行版面的安排,耽误时间。如能找到一个以DBGRID作输入界面且不要太长时间锁定后台数据库存的话,将使开发时间大缩短。如PB的数据窗口听说不错。另外DELPHI肯定可以解决。如珠海天心软件公司开发的FAS200大多是以GRID控件来开发的。但不知是不是DBGRID。
假设你ADOQUERY Component的所有其它属性都设置正确,并且你的ADOConnection 为Connection1
"新增"按钮:
........
try
if Connection1.InTransaction then
Connection1.RollbackTrans;
Connection1.BeginTrans;
with ADOQUERY do
begin
Active := False;
Connection := Connection1
SQL.Add('Select XX from XX where XX');
Active := True;
append;
end;
except
Connection1.RollbackTrans;
......
end;
"提交"按钮:
......
ADOQUERY.post;
if Connection1.InTransaction then
Connection1.CommitTrans;
.......
end;
try
if Connection1.InTransaction then
Connection1.RollbackTrans;
Connection1.BeginTrans;
with ADOQUERY do
begin
Active := False;
Connection := Connection1
SQL.Add('Select XX from XX where XX');
Active := True;
append;//此时是在DBGRID中写数据吧?//这段代码中:上面不已经是锁住后台数据库了吗?????????????? end;
except
Connection1.RollbackTrans;
......
end;
但如果你怕锁住后台数据库, 你大可不用BeginTrans 方法。当你是使用网络数据库时,一个用户修改记录时没有锁住这条记录,而另一个用户又在修改或删除这条记录,你觉得这种做法合理吗?
这样说来,DBGRID作输入界面还是没法达到EDIT控件那样控制后台数据库存。用EDIT作输入界面。“新增”时根本不与后台打交道。只有在“提交”时才与后台打交道。请大侠们讨论。
dbgrid1.FieldCount是行
dbgrid1.SelectedIndex是列