delphi 数据库更新的问题

fine444 2009-02-12 09:59:13
我的界面上有个bsSkinDBComboBox,还有三个安钮,‘申请登记’,‘保存信息’,‘退出’它们的事件是

procedure TForm3.bsSkinButton1Click(Sender: TObject);
begin
dbedit1.Visible:=true;
dbedit2.Visible:=true;
DateTimePicker1.Visible:=true;
dbedit4.Visible:=true;
DateTimePicker1.Visible:=true;
DateTimePicker2.Visible:=true;
bsSkinDBComboBox1.Visible:=true;
dbedit7.Visible:=true;
dbmemo1.Visible:=true;
bsSkinButton2.Visible:=true;
adoquery1.Insert;
dbedit2.SetFocus;
end;

procedure TForm3.bsSkinButton2Click(Sender: TObject);
begin
if DBEdit1.Text='' then
messagebox(self.Handle,'工号不能为空','信息',mb_iconwarning)
else
begin
adoquery1.FieldByName('开始时间').AsDateTime:= DateTimePicker1.Date;
adoquery1.FieldByName('结束时间').AsDateTime:= DateTimePicker2.Date;
adoquery1.post;
bsSkinButton1.Visible:=false;
end;

end;

procedure TForm3.bsSkinButton3Click(Sender: TObject);
begin
bsSkinButton1.Visible:=true;
Form3.DBEdit1.Visible:=false;
Form3.DBEdit2.Visible:=false;
Form3.DateTimePicker1.Visible:=false;
Form3.DBEdit4.Visible:=false;
Form3.DateTimePicker1.Visible:=false;
Form3.DateTimePicker2.Visible:=false;
Form3.bsSkinDBComboBox1.Visible:=false;
Form3.DBEdit7.Visible:=false;
Form3.dbmemo1.Visible:=false;
Form3.bsSkinButton2.Visible:=false;
close;

end;


现在问题来了,我点击第一个安钮也就是申请登记后,我随便在bsSkinDBComboBox中选了个值,但并没有点击保存信息,但bsSkinDBComboBox中的那个值还是写到数据库中了,和我设想的不一样
...全文
170 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
starluck 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fine444 的回复:]
华哥 高人啊 解决了 结帖
[/Quote]

解決就好。俺也是略懂
fine444 2009-02-12
  • 打赏
  • 举报
回复
华哥 高人啊 解决了 结帖
fine444 2009-02-12
  • 打赏
  • 举报
回复
我试试
starluck 2009-02-12
  • 打赏
  • 举报
回复
现在问题来了,我点击第一个安钮也就是申请登记后,我随便在bsSkinDBComboBox中选了个值,但并没有点击保存信息,但bsSkinDBComboBox中的那个值还是写到数据库中了,和我设想的不一样


這個主要是你的數據集的數據處理方式 的問題。換成我上面的方法去處理就行了。
bdmh 2009-02-12
  • 打赏
  • 举报
回复
bsSkinDBComboBox1有change事件吗,或者你是否做了其它操作,导致数据集发生了scroll,next等事件,这些事件都会自动保存数据的,
建议你采用批量更新或者不用db控件,这样就可以随意控制保存事件了,不过多写两行代码,但是稳定,好跟踪错误

数据库编程,往往一开始都喜欢摆一对db控件,当你发现程序这不对,那也有问题的时候,你就知道db控件是多么的让你头疼呀
starluck 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kampan 的回复:]
连接没对应好吧
[/Quote]

卡廟還差多久啊?? 等你放分呢
starluck 2009-02-12
  • 打赏
  • 举报
回复


把數據集的

adoquery1.locktype =ltBatchOptimistic;

這樣就可翠了,修改時改動放在緩存裏面


到你需要的時候再這樣保存:


try
if AdoQuery1.state in [dsinsert,dsEdit] then Adoquery1.post;
ADOQuery1.UpdateBatch();
except
raise;
end;
kampan 2009-02-12
  • 打赏
  • 举报
回复
连接没对应好吧

5,391

社区成员

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

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