我在三层中做了一个数据删除,数据能删除,但每次都会跳出一个提示,然后程序中止。 ( 积分: 50 )

  • 主题发起人 主题发起人 边城过客
  • 开始时间 开始时间

边城过客

Unregistered / Unconfirmed
GUEST, unregistred user!
&nbsp;&nbsp;&nbsp;&nbsp;DELPHI7.0+SQL2000+三层:<br>&nbsp;&nbsp;&nbsp;&nbsp;做了一个数据删除,数据能删除,但每次都会跳出一个错误提示,然后程序中止,错误提示如下:<br>&nbsp;&nbsp;&nbsp;&nbsp;Project&nbsp;RenShi.exe&nbsp;raised&nbsp;exception&nbsp;class&nbsp;EOLeExecption&nbsp;with&nbsp;message&nbsp;<br>'ADOfrmjgglTCDjggl:CommandText&nbsp;does&nbsp;not&nbsp;return&nbsp;a&nbsp;result&nbsp;set'.Process&nbsp;Stopped.<br>Use&nbsp;Step&nbsp;or&nbsp;Run&nbsp;to&nbsp;continue.<br>&nbsp;&nbsp;我的源码如下:<br>&nbsp;&nbsp;TCDjggl.Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCDjggl.CommandText:='delete&nbsp;from&nbsp;rsjggl&nbsp;where&nbsp;dm='+edit1.Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCDjggl.Execute;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCDjggl.Open;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCDjggl.ApplyUpdates(-1);<br>&nbsp;&nbsp;不知道问题出在哪,请高手们指点。
 
TCDjggl.Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCDjggl.CommandText:='delete&nbsp;from&nbsp;rsjggl&nbsp;where&nbsp;dm='+edit1.Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCDjggl.Execute;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//TCDjggl.Open;---&gt;此行删掉<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCDjggl.ApplyUpdates(-1);
 
//TCDjggl.Open;---&gt;此行删掉<br>也一样报这个错误。
 
TCDjggl.ApplyUpdates(-1);也去掉
 
//TCDjggl.Open;---&gt;此行删掉<br>TCDjggl.ApplyUpdates(-1);也去掉后,数据能删除,但每次也都会跳出一个错误提示,然后程序中止,错误提示如下:<br>&nbsp;&nbsp;Project&nbsp;RenShi.exe&nbsp;raised&nbsp;exception&nbsp;class&nbsp;EAcessViolation&nbsp;with&nbsp;message&nbsp;'<br>Acessriolation&nbsp;at&nbsp;address&nbsp;004FFAA9&nbsp;in&nbsp;module&nbsp;'&nbsp;RenShi.exe&nbsp;.Read&nbsp;of&nbsp;address&nbsp;00000000',Process&nbsp;stopped,Use&nbsp;Step&nbsp;or&nbsp;Run&nbsp;to&nbsp;continue.
 
这跟这几行代码没有关系,访问空地址引起的
 
为什么会出现这种情况,怎么会有空地址,我又要如何解决?
 
是不是你的ADOCommand里的commandtype不是设置成cmdtext
 
我晕,怎么这样的问题也没人答对?<br>所有的QUERY及其子类打开的方式有两种<br>一种是Query.execSQL;<br>另一种是Query.Open;<br>区别在于&nbsp;如果你的query是类似select&nbsp;语句,或者是能返回游标或者是能返回数据集的存储过程(只适用于SQL&nbsp;SERVER&nbsp;,ORACLE&nbsp;不适用),就使用open方法<br>如果你想实现一个insert&nbsp;delete&nbsp;update&nbsp;或者其他修改数据的语句,也就是没有返回数据集,则使用execSQL方法<br>你的错误提示信息已经很清楚了,你是一个无返回值的语句&nbsp;应该使用ExecSql方法而不是Open;<br>后面的错误是&nbsp;你没有打开数据集&nbsp;使用数据那肯定出错阿
 
先其他的地方找找原因,再看這個地方
 
to&nbsp;wyb_506:<br>按你说的改,如果是数据库的错误,是不会给出那样的错误信息的。
 
我现在改成了如下代码:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.CommandText:='delete&nbsp;from&nbsp;rsygmx&nbsp;where&nbsp;xm='+''''+edit2.Text+'''';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage(ClientDataSet1.CommandText);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.Execute;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.ApplyUpdates(-1);<br>错误提示:<br>&nbsp;&nbsp;&nbsp;&nbsp;Project&nbsp;RenShi.exe&nbsp;raised&nbsp;exception&nbsp;class&nbsp;EDatabaseError&nbsp;with&nbsp;message&nbsp;'<br>ClientDataSet1:cannot&nbsp;perform&nbsp;this&nbsp;operation&nbsp;on&nbsp;a&nbsp;closed&nbsp;dataset'.Process&nbsp;stopped,Use&nbsp;Step&nbsp;or&nbsp;Run&nbsp;to&nbsp;continue.<br>&nbsp;&nbsp;&nbsp;我都不知道该怎么办了?<br>&nbsp;&nbsp;&nbsp;&nbsp;大家帮帮我!
 
//ClientDataSet1.Close;//====&gt;<br>&nbsp;ClientDataSet1.active:=false;<br>&nbsp;ClientDataSet1.active:=true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.CommandText:='delete&nbsp;from&nbsp;rsygmx&nbsp;where&nbsp;xm='+''''+edit2.Text+'''';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage(ClientDataSet1.CommandText);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.Execute;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.ApplyUpdates(-1);<br><br>不知道这样行不行?我觉得应该这样做,你开始都把close了,所以提示是关闭的,不能操作。
 
cjsam,按你说的改了,还是那错误提示:<br>Project&nbsp;RenShi.exe&nbsp;raised&nbsp;exception&nbsp;class&nbsp;EDatabaseError&nbsp;with&nbsp;message&nbsp;'<br>ClientDataSet1:cannot&nbsp;perform&nbsp;this&nbsp;operation&nbsp;on&nbsp;a&nbsp;closed&nbsp;dataset'.Process&nbsp;stopped,Use&nbsp;Step&nbsp;or&nbsp;Run&nbsp;to&nbsp;continue.<br>谁能上QQ帮我看一下,万分感谢!<br>我的QQ号码是:55887606
 
没见过这样写三层的<br>我一般用<br>adoquery.close;<br>adoquery.sql.text='';<br>adoquery.Execsql/Open(如上面所讲你这里是delete,应该用ExecSQL)<br>而且在三层里,你用SQL语句操作了数据之后,不需要像两层那样apply或者refesh<br>我的习惯一般是adoquery进行(insert,&nbsp;del,update)操作,adodataset返回数据集<br>一开始也出现过你这样的问题
 
从DELPHI的帮助中找了这么一段:<br>TADOCommand&nbsp;is&nbsp;most&nbsp;often&nbsp;used&nbsp;for&nbsp;executing&nbsp;data&nbsp;definition&nbsp;language&nbsp;(DDL)&nbsp;SQL&nbsp;commands&nbsp;or&nbsp;to&nbsp;execute&nbsp;a&nbsp;stored&nbsp;procedure&nbsp;that&nbsp;does&nbsp;not&nbsp;return&nbsp;a&nbsp;result&nbsp;set.&nbsp;For&nbsp;SQL&nbsp;statements&nbsp;that&nbsp;return&nbsp;a&nbsp;result&nbsp;set,&nbsp;TADODataSet,&nbsp;TADOQuery,&nbsp;or&nbsp;TADOStoredProc&nbsp;is&nbsp;better&nbsp;suited.&nbsp;The&nbsp;Execute&nbsp;method&nbsp;of&nbsp;TADOCommand&nbsp;is,&nbsp;however,&nbsp;capable&nbsp;of&nbsp;returning&nbsp;a&nbsp;recordset.&nbsp;To&nbsp;use&nbsp;that&nbsp;recordset,&nbsp;however,&nbsp;you&nbsp;will&nbsp;need&nbsp;a&nbsp;separate&nbsp;ADO&nbsp;dataset&nbsp;component.<br>adocommand最好用于DDL&nbsp;(比如create&nbsp;table)SQL语句或者去执行一个没有返回集的存储过程。<br>如果需要返回数据集,最好用adodataset,adoquery或adostoredproc。<br>然而,adocommand的execute也可以返回一个数据集。<br>不过,想要使用那个数据集你还需要一个单独的ado&nbsp;dataset组件(这里也许就是你出错的地方)
 
到现在问题都还没解决,谁能上QQ帮我看一下,万分感谢!<br>我的QQ号码是:55887606
 
ClientDataSet1.active:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.active:=true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.CommandText:='delete&nbsp;from&nbsp;rsygmx&nbsp;where&nbsp;xm='+''''+edit2.Text+'''';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.Execute;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.CommandText:='Select&nbsp;*&nbsp;&nbsp;from&nbsp;rsygmx';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.Open;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientDataSet1.ApplyUpdates(-1);
 
我估计是你的CommandTest中没重新添加SQL语句引起的。
 
还是不行,谁有兴趣加我QQ(55887606),我把源码给他,帮我看看问题出在哪?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
866
import
I
S
回复
0
查看
937
SUNSTONE的Delphi笔记
S
后退
顶部