create or replace trigger trg_yuekao
  before update on kaoshengyuekao
  for each row
begin
declare
begin
  if :old.bk1 = '100' then
  :new.bk1 := '100';
  end if;
end;
end trg_yuekao;代码:
ADOQuery1.Connection:=ADOConnection1;
    ADOQuery1.ParamCheck:=false;
    ADOQuery1.SQL.Add(' create or replace trigger trg_yuekao before update on kaoshengyuekao for each row ');
    ADOQuery1.SQL.Add(' begin ');
    ADOQuery1.SQL.Add(' declare ');
    ADOQuery1.SQL.Add(' begin ');
    ADOQuery1.SQL.Add(' if :old.bk1 = ''100'' then ');
    ADOQuery1.SQL.Add(' :new.bk1 := ''100''; ');
    ADOQuery1.SQL.Add(' end if; ');
    ADOQuery1.SQL.Add(' end; ');
    ADOQuery1.SQL.Add(' end trg_yuekao; ');  
    ADOQuery1.ExecSQL;运行程序后还是不能新建触发器。
请大家帮忙

解决方案 »

  1.   


    别着急答案来了
    var
     s:string;
    begin
    s:='create or replace trigger trg_yuekao '+
    '  before update on kaoshengyuekao '+
    '  for each row '+
    'begin '+
    'declare '+
    'begin '+
    '  if :old.bk1 = ''100''  then '+
    '  :new.bk1 := ''100''; '+
    '  end if; '+
    'end; '+
    'end trg_yuekao;';
    adoconnection.execute(s);//使用adoconnection来执行你的sql,原因出在你sql中存在:符号
    end;
      

  2.   

    你是什么数据库,我的ORACLE数据库,我试了一下你的代码,没有问题
      

  3.   

    这样应该没有问题
    var
     s:string;
    begin
    s:='create or replace trigger trg_yuekao '+
    '  before update on kaoshengyuekao '+
    '  for each row '+
    'begin '+
    '  if :old.bk1 = ''100''  then '+
    '  :new.bk1 := ''100''; '+
    '  end if; '+
    'end trg_yuekao;';
    adoconnection.execute(s);
    end;
      

  4.   

    把sql copy到数据库里面直接运行 是可以的
    但是用程序运行 不提示错误 触发器也没有新建
      

  5.   

    你 adoconnection 的provider  设的是什么
      

  6.   

    Micorsoft Ole DB Provider for oracle
      

  7.   

    ADOConnection1连接设置
    Provider=MSDAORA.1;Password=channel;User ID=channel;Data Source=DBtest;Persist Security Info=True