关于INTERBASE中SQL的参数问题(50分)

  • 主题发起人 主题发起人 zhshf
  • 开始时间 开始时间
Z

zhshf

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是INTERBASE的数据库,TQUERY控件的SQL是这么写的:
select * from table_name
where substr(field_name,:subpos,:subpos)='1'
其中的:subpos为参数,我试了把它的DataType设为任何类型,
但这个TQuery在Open时总是报错:
'General SQL Error.
Data type Unknown.'
请高手指点,谢谢!
 
substr的参数是(字符串表达式, 开始地址, 长度), 你的subpos要设成integer才行.
 
跟Interbase无关.
substr()这个函数哪儿来的?
你是不是把Delphi当Foxpro用了?
 
to cytown:仍然不行
to rss:我把INTERBASE自带的ID_UDF.SQL中的SUBSTR函数声明给我的数据库,
因此SUBSTR是能用的。
 
substr不通用,最好是这样:
select * from table_name where field_name LIKE '1%'
 
to cAkk:
我要根据参数:subpos来确定第几个字母为'1',LIKE似乎作不到。
 
Sorry,我一直使用FreeUDF,substr()格式不同。
IB_UDF的substr限定80个字符,你的是否超过了?
使用UDFLIB的substr限定是256个字符.
 
没有超过(只有8个字符)
 
这条SQL如果把参数:subpos用具体数值来代替,执行的非常好,
只是加了参数之后才出问题。
 
可以. 看来你还不会用LIKE.

'?1%' 表示第二个字符是1的
'??1%' 表示第三个字符是1的
....


给你抄一段Access的SQL帮助(其他的数据库基本一样,不过可能"*"变成"%"):

种类 样式 符合(返回 True ) 不符合(返回 False)
-------------------------------------------------------
多个字符 a*a aa,aBa,aBBBa aBC
*ab* abc,AABB,Xab aZb,bac
特殊字符 a[*]a a*a aaa
多个字符 ab* abcdefg,abc cab,aab
单一字符 a?a aaa,a3a,aBa aBBBa
单一数字 a#a a0a,a1a,a2a aaa,a10a
字符范围 [a-z] f,p,j 2,&
范围之外 [!a-z] 9,&,% b,a
非数字 [!0-9] A,a,&,~ 0,1,9
组合字 a[!b-m]# An9,az0,a99 abc,aj0
 
建议大家还是用SQL语句来解决问题.
 
to cAkk:
参数:subpos是在变化的,每次可能都不一样,用LIKE似乎不行
 
last_name LIKE ?q%? //Last names containing at least one 搎?
last_name STARTING WITH 'Sm' // Last names beginning with the letters 揝m.?
last_name CONTAINING 'q'// Last name contains at least one 搎,?either uppercase or lowercase.
last_name BETWEEN 'M' AND 'T' //Last name beginning with letters M through S
 
请大家注意,我的SQL只是参数的使用有问题
 
呵呵, sql6.5有charindex函数, 不知道interbase有没有?
 
再次建议不要用数据库自己的函数,否则移植成问题.
 
多人接受答案了。
 
后退
顶部