Delphi BDE为什么将空串变为NULL转换到SQL数据库中?急急急-200分(200分)

  • 主题发起人 主题发起人 dzhiguo
  • 开始时间 开始时间
D

dzhiguo

Unregistered / Unconfirmed
GUEST, unregistred user!
用TStoredProc控件传递参数到SQL的存储过程中时,为什么空串会变成NULL
例:
Params.CreateParam(ftString, '@name', ptInput);
ParamByName('@name').AsString := '';
Prepare;
Open;

 
空串和NULL应该一样吧,什么都没有.
 
存储过程如下:
if @gddm="" select @gddmlike="_%"
else select @gddmlike=ltrim(@gddm)+"%"
if @scdm="" select @scdmlike="_%"
else select @scdmlike=@scdm+"%"
if @zqdm="" select @zqdmlike="_%"
else select @zqdmlike=ltrim(@zqdm)+"%"

if not exists ( select * from tgk where khh=@khh and scdm like @scdmlike and gddm like rtrim(@gddmlike) and zqdm like rtrim(@zqdmlike) and scdm>@scdmindex and zqdm>@zqdmindex and gddm>@gddmindex )

比如当khh为""时将查询全部内容,但当khh为空时,就什么也查询不到。
只可惜我无法更改此存储过程!!
 
对不起刚才写错了!
存储过程如下:
if @gddm="" select @gddmlike="_%"
else select @gddmlike=ltrim(@gddm)+"%"
if @scdm="" select @scdmlike="_%"
else select @scdmlike=@scdm+"%"
if @zqdm="" select @zqdmlike="_%"
else select @zqdmlike=ltrim(@zqdm)+"%"

if not exists ( select * from tgk where khh=@khh and scdm like @scdmlike and gddm like rtrim(@gddmlike) and zqdm like rtrim(@zqdmlike) and scdm>@scdmindex and zqdm>@zqdmindex and gddm>@gddmindex )

比如当scdm为""时将查询全部内容,但当scdm为NULL时,就什么也查询不到。
只可惜我无法更改此存储过程!!
 
这可能是BUG,我是这样解决这个问题的:
用TQUERY代替tstoreproc,在TQUERY中的SQL语句为
EXEC PROCNAME :PARA1,:PARA2,:PARA3
其中PROCNAME为存储过程名,PARA1,PARA2,PARA3
为存储过程的参数。
然后给QUERY传参数,空格就不会变成NULL了。
 
DELPHI 报了一个错:
Could not find object.
能具体给出一个例子吗?
 
您的后端是SQL SERVER吗,如果是
请先在QUERY ANALYZER中执行一下
您的存诸过程是否有错。
例子不太好给,因为有前端及后端,
但我在我的程序中一直是这样做的。
 
后端是SQL SERVER 6.5
存储过程肯定没问题.我用TstoredProc可以正确执行,只是空串变成了NULL
我在ISQL/W中执行此存储过程也是正确的.
能告诉我"Could not find object"是什么意思吗?
它是在ExecSQL时报这个错误
 
有没有设置TQUERY的DATABASENAME,
用QUERY1.ACTIVE:=TRUE执行这个
存储过程试试。
COULD NOT FIND OBJECT应该是有数据库
对象没有找到。
您也可以写一个最简单的存储过程,试一下
这个方法。
 
DataBaseName已经设置正确且已经和SQL SERVER连接,而且在设计期Query时能够执行
 
DataSet.Fields[n].Clear; -> 将字段置空
DataSet.Fields[n].AsString:=''; -> 设置字段内容为 '#0' 的字符串
 
接受答案了.
 
后退
顶部