当前位置:主页>仓库管理软件> 列表

请问怎么删除记录,为什么这段代码只能执行一次 找速达财务软件操作

记账软件版1楼: 为什么这段代码只能执行一次

procedure TForm11.Button4Click(Sender: TObject);
begin
adoquery3.Active:=true;
adotable2.locate(''用户名'',''edit1.text'',[]);
adoquery3.Edit;
ADOQuery3.close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.add(''delete from usertb where 用户名=''''''+edit1.Text+'''''''');
ADOQuery3.ExecSQL;
ADOTable2.Close;
ADOTable2.Open;
Application.MessageBox(''成功删除账户!'',''提示信息'',mb_ok);
edit1.Text:='''';
end;


请问应该怎么改
另外commandtext does not return a result set是什么原因造成的
我是新手,急阿

2楼: 你想执行几次呢?代码虽然不规范,但应该可以删除啊 如记账软件哪个好

3楼: 需要每次点击都能删除
就是调试时第一次能删除,第二次开始就说
commandtext does not return a result set

4楼: 已经删除了
怎么还能删呢

5楼: 每次删除表中用户名为edit1的值

6楼: adoquery3.Active:=true;
adoquery3.Active:=true;都删除掉

记账软件版7楼: 1.adotable2相关的代码与ADOQuery3没关系应该分开写。


2.ADOQuery3刷新最好用相应的刷新语句,如果效果不行就直接给它close再open。
3.错误可能是由 adotable2.locate(''用户名'',''edit1.text'',[]);引起的。
4.ADOQuery3.SQL.add(''delete from usertb where 用户名=''''''+edit1.Text+'''''''');写成ADOQuery3.SQL.add(''delete from usertb where 用户名=quotedstr(edit1.Text)'');比较直观。

8楼: delete from usertb 改成 delete usertb where ....

9楼: adoquery3.Edit;這一句有錯,因為並沒有結果集,所以出錯了.

10楼: 代碼有點亂,adoquery3.Edit;這句去掉應該就可以了.
在ms sql server中:delete from usertb where ...=delete usertb where ...

11楼: to SiWeiLiuLang,
adoquery3.Active:=true;都删除掉调试时第二次删除显示cannot perform this operation on a closed dateset


to newsmile,
quotedstr调试时没法识别
query3 adotable2 指向同一张表

12楼: 调试不能通过你就保持原样算了,指向同一张表你不必先locate,delete带了条件它会自己去找到符合条件的记录的。 如速达财务软件操作

13楼: to newsmile
把locate删了后,结果仍然不能删第二次,仍然显示
cannot perform this operation on a closed dateset
请问这是什么原因造成的

记账软件版14楼: to eastweast
去掉adoquery3.Edit后,第二次修改仍然不行

15楼: 把最后的修改结果帖出来,我说的那两句去了没

16楼: 复制的时候出问题了,怎么两句写得一样

17楼: 你的usertb在什么地方?
procedure TForm11.Button4Click(Sender: TObject);
begin
//adoquery3.Active:=true;//在form中设置比较好,如果不在form中设置这行是必须的
ADOQuery3.open;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.add(''delete from usertb where 用户名=''''''+edit1.Text+'''''''');
ADOQuery3.ExecSQL;
ADOQuery3.close;
Application.MessageBox(''成功删除账户!'',''提示信息'',mb_ok);
edit1.Text:='''';
end;

18楼: 问题解决了谢谢,把
adoquery3.Active:=true
adoquery3.Edit
都去掉就行了,

to SiWeiLiuLang,
请问为什么adoquery3.Active:=true要去掉

19楼: procedure TForm11.Button4Click(Sender: TObject);
begin
adoquery3.Active:=true;//这里删除
adotable2.locate(''用户名'',''edit1.text'',[]);//删除
with adoquery3 do
begin
close;
SQL.Clear;
SQL.add(''delete from usertb where 用户名=''''''+edit1.Text+'''''''');
ExecSQL;
end;
//你的提示是说不能对已经关闭的数据集进行操作。你用下面的看看
with adotable2 do
begin
if active then
active := false ;
open;
ADOTable2.Close; //删除
ADOTable2.Open; //删除
end;
Application.MessageBox(''成功删除账户!'',''提示信息'',mb_ok);
edit1.Text:='''';
end;
open 和close是对ACTIVE进行的操作。open 和close是TDATASET里的两个操作。
OPEN就是将ACTIVE := TRUE

20楼: 那条语句相当于Open
你该知道原因了吧

记账软件版21楼: 多人接受答案了。