在delphi中建trigger(100分)

  • 主题发起人 主题发起人 catherine
  • 开始时间 开始时间
C

catherine

Unregistered / Unconfirmed
GUEST, unregistred user!
有一段oracle的trigger创建语句,可以在sql explore中运行;
但是在delphi里通过tquery来创建报错。
有什么办法可以在delphi编写的程序中动态生成trigger吗?
 
你是怎么写的?能拿出来看看吗?
可能是写法有错误!
 
有些复杂,有劳了
CREATE OR REPLACE TRIGGER ticc
AFTER INSERT ON t_user_kind
FOR EACH ROW
DECLARE
VID NUMBER(3,0);
VNAME VARCHAR2(20);
VFOUND NUMBER(1,0);
BEGIN
VFOUND:=-1; 从这句开始报错
SELECT COUNT(*) INTO VFOUND FROM T_USER_KIND1 WHERE T_USER_KIND1.NAME_USERKIND =:NEW.NAME_USERKIND;
IF VFOUND>0 THEN
SELECT id_userkind,NAME_userkind INTO VID,VNAME FROM T_USER_KIND1
WHERE T_USER_KIND1.NAME_USERKIND =:NEW.NAME_USERKIND;
INSERT INTO T_USER_KIND2 VALUES(VID, VNAME,:NEW.id_userkind, :NEW.name_userkind);
DELETE FROM t_user_kind WHERE t_user_kind.id_userkind=:NEW.id_userkind;
END IF;

END;
 
但是在delphi里通过tquery来创建报错。
---那个报错的具体信息?
 
用TDatabase的Execute试试
 
笑傲江湖大侠:
报错是不认识-1什么的。

k爵士:
--用TDatabase的Execute试试
how? 给个成功的例子成不成?

 
有些用TQuery的ExecSql执行不了的SQL语句
可以用TDatabase的Execute执行,例如informix
的select ... into temp语句,所以我想让你
试试,不行再另想办法。

语句可以是以下这样,不过我没有Oracle,没法
替你试一下

{ activate the TDatabase component }
Database1.Connected := True;

{ assign the SQL statement to the String variable }
SQLstmt := 'CREATE TRIGGER ticc .....' ;

{ call the Execute method }
Database1.Execute(SQLstmt);
 
sorry 我用的D4,似乎database没有execute方法
 
TQUERY不支持这种操作,尽管可执行创建VIEW和TABLE等语句.

看看TQUERY的源码就知道了.

TDATABASE的确可以.

你有兴趣可以看看TQUERY.EXECUTE和TDATABASE.EXECUTE的源码.

D4的没有EXECUTE方法吗

不行就升到D5

或者用DOA.
 
笑傲江湖的方法可以实现
 
我认为,在Tquery中,肌肤可以作所有的操作。

估计你应该将你最后的end;的;去掉.
 
我现在知道了,TQuery.ParamCheck:=False;

TQuery肌肤可以作所有的SQLPlus操作!!!
 
谢谢大家,我也希望如此.
但是现在没法测试.oracle服务器出问题了.
待我试过后,一定答谢各位!
 
多人接受答案了。
 
后退
顶部