gpt4 book ai didi

sql - 如何处理有结果的 ADO 查询与无结果的查询?

转载 作者:行者123 更新时间:2023-12-03 18:08:21 26 4
gpt4 key购买 nike

我使用 MSSQL 和 ADO 运行各种 SQL 语句。

代码序列如下所示:

aADOQuery.Active := False;
aADOQuery.SQL.Text := ' MY SQL STATEMENT ';
aADOQuery.ExecSQL;
aADOQuery.Active := True;

如果SQL返回结果为空,则最后一条语句失败。如何检查这种情况以避免运行时错误?

注意:SQL 语句来自用户键入 SQL 的备忘录。

最佳答案

如果您的查询返回一个记录集(SELECT 语句),您应该使用ExecSQL,而应该简单地使用aADOQuery.OpenActive := True

对于不返回记录集的查询,例如INSERT/UPDATE/DELETE,使用ExecSQL。在大多数情况下,您将通过查询返回 aADOQuery.RowsAffected

您应该使用 ExecSQL 的其他 SQL 语句是 CREATE/ALTER/DROP/EXEC 等...(在这种情况下没有 RowsAffected 返回)

如果查询没有将游标返回到数据(例如INSERT 语句),尝试Open 或将这样的TDataSet 设置为Active 将失败。


您可以使用 ADOConnection.Execute 而不是 TADOQuery 来执行命令文本,然后检查是否有有效的 Recordset 返回来自 ADOConnection。在 ADOConnection.OnExecuteComplete 中,您可以执行如下操作:

procedure TForm1.ADOConnection1ExecuteComplete(Connection: TADOConnection;
RecordsAffected: Integer; const Error: Error;
var EventStatus: TEventStatus; const Command: _Command;
const Recordset: _Recordset);
begin
// check for errors
if Assigned(Error) then
begin
Memo1.Lines.Add('Error: ' + Error.Description);
end;
// check for a valid recordset
if Assigned(Recordset) then
begin
MyDataSet.Recordset := Recordset; // MyDataSet is TADODataSet
end;
// check for affected rows
if RecordsAffected >= 0 then
Memo1.Lines.Add('Records affected: ' + IntToStr(RecordsAffected))
else
Memo1.Lines.Add('Record count: ' + IntToStr(MyDataSet.RecordCount));
end;

关于sql - 如何处理有结果的 ADO 查询与无结果的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15730967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com