要在数据库中建立存储过程如下:(存储过程在查询分析中建立没问题)
create proc p1 
as 
begin tran 
update t1 set f1='1'
if @@error<>0 
  goto E
insert into t2(f1) values('2')
if @@error<>0 
  goto E
commit tran
returnE:
rollback tran
return
目的:用Delphi的ADOQuery在数据库中建立上面的存储过程,按钮1代码如下:procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
begin
  s := “放SQL语句”;//取上面的建立存储过程语句
  with ADOQuery1 do
  begin
    if Active then close;
    Sql.Clear;
    SQL.Add(s);
    ExecSQL;
  end;
end;程序执行到 ExecSQL时,报错:“不正常的参数定义。提供了不一致或不完整的信息”如果将要建立的存储过程语句改成
create proc p1 
as 
begin tran 
update t1 set f1='1'
if @@error<>0 
begin
  rollback tran
  return
end;
  
insert into t2(f1) values('2')
if @@error<>0 
begin
  rollback tran
  return  
end
commit tran
return那么,ADOQuery1.ExecSQL就能执行成功。我发现问题出在要执行SQL语句中有标签的原因上。现在我要用ADOQuery向数据库中建立很多存储过程,这些存储过程很多都有标签。怎么办???ADOQuery不能执行带有标签的SQL语句吗?

解决方案 »

  1.   

    高手们,是我的问题没有叙述清楚吗?为什么没人回答?
    建立存储过程也属于SQL语句吧!为什么在有标签的SQL语句中ADOQuery1.ExecSQL不成功?
      

  2.   

    create proc p1 
    as 
    begin
    begin tran 
    update t1 set f1='1'
    if @@error<>0 
      goto E
    insert into t2(f1) values('2')
    if @@error<>0 
      goto E
    commit tran
    return
    E:
    rollback tran
    return
    end
    建存储过程时里面要用begin...end包含住
      

  3.   

    后来发现ADOQuery不会执行有有冒号(:)的SQL语句!如何解决?