ado编程中遇到一个问题,出错提示“当前提供程序不支持从单一执行返回多个记录集(50分)

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

apan

Unregistered / Unconfirmed
GUEST, unregistred user!
各位说说是什么原因
 
最好把问题讲得详细些呀比如用的什么数据库,什么控件?什么命令?
 
的确有这种情况,这是数据库本身的限制问题
有的不支持多表查询
有的不支持GROUP BY 和ORDER BY同时使用
有的在嵌套SQL语句里面出问题
总的来说,越高级的数据库越好使
 
数据库是access的mdb文件,里面有四个表,
一个Tadoconnection控件wz,连接用jet oledb 4.0,一个Tadoquery qrylian,
一个Tdatasource ds_lian 其dataset属性是qrylian,
界面中用了Tdbgrideh,当进行删除操作时,出错,部分源码如下:
procedure TfrmLiansz.BtnDeleteClick(Sender: TObject);
begin
if Application.MessageBox('您确认要删除此记录吗?',
PChar(application.title),mb_IconInformation+mb_YesNo)=idYes then
begin
ExecQuery(dm.qrylian,'delete from lian where id_lian='
+quotedstr(dm.qrylian.fieldbyname('id_lian').asstring));
RefreshQuery(dm.qrylian);
end;
end;

function ExecQuery(query:TADOQuery;SqlStr:string):boolean;
begin
query.close;
query.sql.clear;
query.sql.add(sqlstr);
try
query.ExecSQL;
except
ShowMessage('执行'+query.name+'出错,sql语句为:'+sqlstr);
result := false;
exit;
end;
result := true;
end;

function RefreshQuery(query:TADOQuery;SetFocus:boolean=false):boolean;
var place : TBookmark;
begin
result := true;
if not setfocus then
begin
query.filter := '';
query.filtered := false;
query.close;
try
query.open;
except
result := false;
end;
exit;
end;

place := nil;
try
if ((query.recordcount>1) and query.BookmarkValid(place)) then
place := query.GetBookmark;
query.close;
query.open;
if query.recordcount>1 then
begin
try
query.GotoBookmark(place);
finally
query.FreeBookmark(place);
end;
end;
except
result := false;
end;
end;

哪里有错?
 
俄觉得是execsql和refresh的毛病.ExecSQL命令是不返回数据集的.你可以直接调用adoquery
的delete方法哦或者是一个locate一个delete,简单明了.
 
其實你將此函數function ExecQuery(query:TADOQuery;SqlStr:string):boolean;
變一下也可:
function ExecQuery(SqlStr:string):boolean;
var query:TADOQuery;
Begin
Try
query:=tadoquery.create(nil);
query.adoconnection:=dm.qrylian.adoconnection;
query.close;
query.sql.text:=sqlstr;
try
query.ExecSQL;
except
ShowMessage('执行'+query.name+'出错,sql语句为:'+sqlstr);
result := false;
exit;
end;
result := true;
Finally
query.free;
query:=nil;
End;
end;

 
try
*.open;
Except
*.ExecSQL;
end
//如果调用open方法,而没有查询结果时,会出错。可调用ExecSQL方法来代替。
 
多人接受答案了。
 
后退
顶部