关于在delphi中通过tquery执行带冒号\":\"的sql语句

 作者:大笑 

在Delphi中用Tquery来执行Sql语句时,以冒号开头的字符串如:
Select * from Table where Field1=:Field1
其中的":Field1",会被BDE驱动认为是一个参数,而要求用户为其赋值,
如用户不为它赋值,则在执行时BDE会报:
Query1:Field'Field1' is of an Unknown type.
错误提示.

但在某些情况下,冒号":"本身就是数据库服务器所要求的SQL语句中必不可
少的一部分,如在ORACLE中创建触发器的SQL语句:
CREATE OR REPLACE TRIGGER TEST
BEFORE INSERT
ON TABLE
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
   SELECT SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;
END;
这个SQL语句中的":NEW.ID"指代的是表的新记录,其中冒号是必不可少的,
但是如果把这段SQL语句直接通过TQUERY来执行,问题就出来的,因为BDE会
要求用户为"NEW.ID"赋值,为了使BDE不认为":NEW.ID"是一个参数,就需要
使用转意字符将SQL语句中的冒号":"处理一个,在这里使用两个冒号就可以
了,如下所示:
...
SELECT SEQ.NEXTVAL INTO ::NEW.ID FROM DUAL;
...
这样SQL语句就可以正常的透过BDE被ORACLE处理了.

在Delphi中使用转意字符的地方还有很多,如在字符串中用两个单引号来表
示字符中实际包含一个单引号等.

所以,一般在DELPHI中如果遇到要处理的字符串中包含DELPHI自己默认的特殊
符号,都可以用两个该字符来转意一下试试.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值