怎样知道ExecSQL的执行结果是成功还是失败? 程序中一个ADOQuery,用ExecSQL执行一段SQL语句,怎样知道执行结果是成功还是失败?怎样看执行结果的返回值?有人说成功返回1,失败返回0,怎样看返回值? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 adoquery1.recordcount这个就是返回值 try ADOQuery1.ExecSQL ; except showmessage('ERROR'); end; 判断sql语句是否错误可以按照这个 可以把sql语句放在一个函数里,通过异常处理返回值来判断是否执行成功。function ExceSQLTxt:boolean;begin result:=false; try {执行sql语句} result:=true; {执行语句成功} except result:=false; {执行语句失败} end;end;{OR}function ExceSQLTxt:string;begin result:=''; try {执行sql语句} result:=''; {执行语句成功} except on e:exception result:=e.message; {执行语句失败,返回失败信息} end;end; unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; DataSource1: TDataSource; DBGrid1: TDBGrid; Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure getADOConnectionError(vSql:string;vError: TStrings;vQuery:TADOQuery); procedure execSQL(vSql:string;vQuery:TADOQuery); begin with vQuery do begin Close; SQL.Clear; SQL.Text:=vSql; Open; end; end;var i:Integer;begin with vQuery.Connection do try execSQL(vSql,vQuery); except //取得产生的错误总数 //vError.Add(IntToStr(ConnectionObject.Errors.Count)); vError.Clear; for I:=0 to ConnectionObject.Errors.Count-1 do begin vError.Add('错误码 ='+IntToStr(ConnectionObject.Errors[i].Number)); vError.Add('错误源 ='+ConnectionObject.Errors[i].Source); vError.Add('错误源生码='+IntToStr(ConnectionObject.Errors[i].NativeError)); vError.Add('错误信息='+ConnectionObject.Errors[i].Description); end; Exit; end;end;procedure TForm1.Button1Click(Sender: TObject);begin getADOConnectionError('select * AA BB ',ListBox1.Items,ADOQuery1);end;end. ...... with qry2 do begin close; SQL.Clear; SQL.Add('DECLARE @db_id int, @tbl_id int'); SQL.Add('USE drn'); SQL.Add('SET @db_id = DB_ID('+quotedstr('drn')+')'); SQL.Add('SET @tbl_id = OBJECT_ID('+quotedstr('[drn].[dbo].[lldata_'+tabledate+']')+')'); SQL.Add('DBCC PINTABLE (@db_id, @tbl_id)'); Execsql; end;.....Execsql执行成功,但返回-1是啥意思? ExecSQL执行返回的是受影响的行数,“影响”包括增删改等,比如说ExecSQL执行一个删除3条记录的语句,成功删除了3条件就返回3(只成功删了2条也就返回2),表示受影响的行数是3行,即有3行被删除了。插入、修改也是同理。返回0,则是没有任何一行受影响,那就是没有增删改到任何行,但是不表示ExecSQL失败,ExecSQL只是提交一个sql语句,sql本身没错,操作失败可能是其他原因,比如删除3跳记录,其中有一条记录有约束没能操作成功。 那如果把ExecSQL换为Open并令qry2.ExecuteOptions:=[eoExecuteNoRecords];//查询以不返回记录方式执行,报EOleException类异常消息‘参数类型不正确,或不在可以接受的范围之内,或与其它参数冲突’。返回-1那到底指的是‘参数类型不正确’、‘不在可以接受的范围之内’或‘与其它参数冲突? ExeSQL,此函数是有返回值的,返回值 就是此次执行SQL 所影响的行数。 ExecSQL 返回影响的记录数 寻找 DelForExp For Delphi 2009 请问用delphi画图时能够自动捕捉交点吗? update failed.found o records 是什么问题? 着急死了!为什么无法重新编译controls.pas? 散分兼推广一个小工具 怎么样给已共享的目录分配只读权限给某个用户如Guest speedbutton按纽怎么样设置可以放在EDIT的上方 有关组合框的seltext属性的问题 求文件分割和合并的代码 怎样给delphi程序传递参数 如何判断指定进程是否运行 不论文件名是否改变 在按钮中添加代码 Form.close 报出内存错误
ADOQuery1.ExecSQL ;
except
showmessage('ERROR');
end;
可以把sql语句放在一个函数里,通过异常处理返回值来判断是否执行成功。function ExceSQLTxt:boolean;
begin
result:=false;
try
{执行sql语句}
result:=true; {执行语句成功}
except
result:=false; {执行语句失败}
end;
end;{OR}function ExceSQLTxt:string;
begin
result:='';
try
{执行sql语句}
result:=''; {执行语句成功}
except
on e:exception
result:=e.message; {执行语句失败,返回失败信息}
end;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure getADOConnectionError(vSql:string;vError: TStrings;vQuery:TADOQuery);
procedure execSQL(vSql:string;vQuery:TADOQuery);
begin
with vQuery do
begin
Close;
SQL.Clear;
SQL.Text:=vSql;
Open;
end;
end;
var
i:Integer;
begin
with vQuery.Connection do
try
execSQL(vSql,vQuery);
except
//取得产生的错误总数
//vError.Add(IntToStr(ConnectionObject.Errors.Count));
vError.Clear;
for I:=0 to ConnectionObject.Errors.Count-1 do
begin
vError.Add('错误码 ='+IntToStr(ConnectionObject.Errors[i].Number));
vError.Add('错误源 ='+ConnectionObject.Errors[i].Source);
vError.Add('错误源生码='+IntToStr(ConnectionObject.Errors[i].NativeError));
vError.Add('错误信息='+ConnectionObject.Errors[i].Description);
end;
Exit;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
getADOConnectionError('select * AA BB ',ListBox1.Items,ADOQuery1);
end;end.
with qry2 do begin
close;
SQL.Clear;
SQL.Add('DECLARE @db_id int, @tbl_id int');
SQL.Add('USE drn');
SQL.Add('SET @db_id = DB_ID('+quotedstr('drn')+')');
SQL.Add('SET @tbl_id = OBJECT_ID('+quotedstr('[drn].[dbo].[lldata_'+tabledate+']')+')');
SQL.Add('DBCC PINTABLE (@db_id, @tbl_id)');
Execsql;
end;
.....Execsql执行成功,但返回-1是啥意思?