数据保存 的奇怪事 ( 积分: 20 )

  • 主题发起人 主题发起人 admin2008
  • 开始时间 开始时间
A

admin2008

Unregistered / Unconfirmed
GUEST, unregistred user!
当击checkbox为true时数据保存了,我在查询分析器中查看有我刚保存的数据,在同一窗口下可是当我用鼠标点击dbgrideh中每行时&nbsp;发现刚保存的数据又没有了,<br>代码是这样的<br>procedure&nbsp;Typ_select.updateyaoid(i:integer);<br>case&nbsp;i&nbsp;of<br>&nbsp;&nbsp;&nbsp;&nbsp;1:if&nbsp;checkbox1.Checked=true&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;adosave&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql.Clear&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql.Text:='update&nbsp;yaoid&nbsp;set&nbsp;z0=:z0,z1=:z1,j0=:j0,j1=:j1&nbsp;where&nbsp;yaoid='''+ls_yaoid+'''';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('z0').Value:=1;&nbsp;//&nbsp;此药是中药饮片(中药材)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('z1').Value:=trim(edit2.Text);&nbsp;//&nbsp;定量规格<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('j0').Value:=0;&nbsp;//&nbsp;&nbsp;此药是进口药<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('j1').Value:='';&nbsp;//&nbsp;&nbsp;检验报告书编号<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end<br>else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;adosave&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql.Clear&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql.Text:='update&nbsp;yaoid&nbsp;set&nbsp;z0=:z0,z1=:z1,j0=:j0,j1=:j1&nbsp;where&nbsp;yaoid='''+ls_yaoid+'''';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('z0').Value:=0;&nbsp;//&nbsp;此药是中药饮片(中药材)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('z1').Value:=''//&nbsp;定量规格<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('j0').Value:=0;&nbsp;//&nbsp;&nbsp;此药是进口药<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('j1').Value:='';&nbsp;//&nbsp;&nbsp;检验报告书编号<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end&nbsp;;<br>最后在checkbox&nbsp;调用这个过程&nbsp;<br>另外这是数据集的&nbsp;afterscroll的代码<br>&nbsp;ls_yaoid:=adoquery1.fieldByName('yaoid').AsString&nbsp;;<br>&nbsp;&nbsp;checkbox1.Checked:=adoquery1.fieldByName('z0').AsBoolean&nbsp;;<br>&nbsp;&nbsp;checkbox3.Checked:=adoquery1.fieldByName('j0').AsBoolean&nbsp;;<br>&nbsp;&nbsp;edit2.Text:=adoquery1.fieldByName('z1').AsString&nbsp;;<br>&nbsp;&nbsp;edit12.Text:=adoquery1.fieldByName('j1').AsString&nbsp;;<br>最扣我这个事件的代码屏蔽掉&nbsp;发现就行了,但是这是用来显示当前选择数据信息的<br>我必须要呀
 
checkbox1.Checked:=adoquery1.fieldByName('z0').AsBoolean&nbsp;;<br>&nbsp;&nbsp;checkbox3.Checked:=adoquery1.fieldByName('j0').AsBoolean&nbsp;;<br>由于你讲的上述事件是在CHECKBOX调用的,但上述语句又会重复触发事件,造成保存异常。<br>解决方法:<br>1、把调用上述事件的CHECKBOX的赋值语句去掉,因为理论上两者的值应该保持同步的。<br>2、一定要赋值的话,在赋值前把事件屏蔽掉<br>&nbsp;&nbsp;如&nbsp;checkbox1.onclick&nbsp;:=&nbsp;nil;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkbox1.Checked:=adoquery1.fieldByName('z0').AsBoolean&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkbox1.onclick&nbsp;:=&nbsp;重新指向事件入口(即原指向的过程名);
 
恩&nbsp;我试了&nbsp;是行的通的&nbsp;&nbsp;不过还有一个缺点就是&nbsp;当我保存了数据后&nbsp;调用afterscroll事件<br>也就是点击dbgrideh中的行时&nbsp;下面的控件就不显示刚保存的数据了&nbsp;只有当窗口退出来,再打开才可以
 
你的代碼是不是少了&nbsp;<br>Sql.ExecSQL&nbsp;這句.
 
没有了&nbsp;我没有贴出来太多了
 
修改后,仅点击保存是不触发afterscroll事件的,只有在记录发生移动后才会触发。因此下面的控件不显示也正常。<br><br>改进的方法:一种是可以使用&nbsp;DBCHECKBOX,另一种是控件显示的代码放到&nbsp;<br>adoquery1.fieldByName('z0').OnChange事件中。
 
帮顶一下,接个分
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
940
SUNSTONE的Delphi笔记
S
后退
顶部