一个未见正式文档的ADO技术,欢迎大家讨论
ccat 2002-07-09 12:50:52 我们都知道,在ADO或其他任何数据库控件中,要向数据库发送SQL语句之前,一定要知道它会不会返回结果集。然后用execute或open分别处理。一个偶然的机会,我试验成了以下的代码,可以成功的用一个执行命令来处理所有的SQL语句,在这里,我只写了一个单结果集的例子,但有了这个方法,扩充成多结果集只是举手之劳。只是,我对这段代码的合理性一点把握也没有。无论从Object Pascal语言还是ADO接口的角度,我的知识都不足以解释它。所以,我把它放在这里,请大家一起看一下。如果它有什么潜在的错误,欢迎大家指正,如果它是对的,也欢迎大家和我一起分享。以下是一个ADO查询分析器的一段代码,全部代码和可执行文件在CSDN的软件中心。叫ADOQuery。
//在同一次执行中不加区分地处理有无结果集的SQL。
procedure TFormMain.QueryDataExecute(Sender: TObject);
var
EffRecs : Integer;
ADORecSet : _RecordSet;
begin
try
Screen.Cursor := crHourGlass;
DMADO.ADOCommand.CommandText := REText.Lines.Text;
ADORecSet := DMADO.ADOCommand.Execute(EffRecs, null);
//注意这里的判断
if ADORecSet.State = 0 then
begin
REInfo.Lines.Text := '本次操作影响了 ' + IntToStr(EffRecs) + ' 行。';
DMADO.ADODataSetMain.Close;
Pages.ActivePage := InfoPage;
end
else
begin
if EffRecs = -1 then EffRecs := 0;
REInfo.Lines.Text := '共返回了 ' + IntToStr(ADORecSet.RecordCount)+ ' 行。'
+ '本次操作另外影响了 ' + IntToStr(EffRecs) + ' 行。';
DMADO.ADODataSetMain.Recordset := ADORecSet._xClone;
ADORecSet.Close;
Pages.ActivePage := DataPage;
end;
finally
Screen.Cursor := crDefault;
end;
end;