我用ParamByName的形式传参数值到SQL语句里,如果某个参数值为空值,怎么传进去构造SQL?
下面示例是从一个表里select出和另一个表完全相同的数据。
同事告诉我用ParamByName这种形式传空值是不可能的,要逐个字段构造SQL语句。可是我字段很多。再说,真的不能把Null当做空值传进去吗?在线等。 with ADOQuery1 do
begin
Close;
str1 := 'select * from table1 where id=:id and Name=:Name and ...' //字段很多,放在FList_Flds里。
SQL.Text := str1;
for j:=0 to FList_Flds.Count-1 do
if Query1.FieldByName(FList_Flds[j]).IsNull then //判断字段值是否为空
Parameters.ParamByName(FList_Flds[j]).Value := 'Null' //??
else
Parameters.ParamByName(FList_Flds[j]).Value := ADOQuery2.FieldValues[FList_Flds[j]];
Open;
end;
下面示例是从一个表里select出和另一个表完全相同的数据。
同事告诉我用ParamByName这种形式传空值是不可能的,要逐个字段构造SQL语句。可是我字段很多。再说,真的不能把Null当做空值传进去吗?在线等。 with ADOQuery1 do
begin
Close;
str1 := 'select * from table1 where id=:id and Name=:Name and ...' //字段很多,放在FList_Flds里。
SQL.Text := str1;
for j:=0 to FList_Flds.Count-1 do
if Query1.FieldByName(FList_Flds[j]).IsNull then //判断字段值是否为空
Parameters.ParamByName(FList_Flds[j]).Value := 'Null' //??
else
Parameters.ParamByName(FList_Flds[j]).Value := ADOQuery2.FieldValues[FList_Flds[j]];
Open;
end;
解决方案 »
- 很有意思的问题,怎么隐藏其它程序的进程~100分
- 请问哪有SPCOMM.DCU和Tcomm组件下载啊? 谢谢各位了!
- 请问哪个大哥有声明好的SPI的单元?
- 怎么读取多个已通过文件流添加到头文件的文件?(相当于解压那个过程)。
- 请教高手:Delphi 中的 Ord() 命令是干什么的,对于的VC的命令是什么?
- 如何用访问已经用EXCEL打开的DBF
- 简单的窗体登陆问题!
- 有关socket问题,请高手指教
- 请教filesetdate(handle:integer;age:integer):integer函数的用法,紧急
- UDP连续发送丢包的问题请教!!
- 高手救命啊!在线等,急啊!!!!!
- 各位高手:access如何转变成.dbf文件!!!!加急!!!!!!!!!!!!!!
Parameters.ParamByName(FList_Flds[j]).Value := NULL
这样编译不会通过
“不正常的定义参数对象,提供了不一致或不完整的信息”
该怎么办?
Unassigned
都试试看,身边没有环境,不能帮你调试^_^
1.你那赋空值的字段是什么类型?
2.那字段设为可以为空了吗?
msn:[email protected]
这句str1 := 'select * from table1 where id=:id and Name=:Name and ...'
如果:Name参数为空,赋null值到Oracle好像是不能识别,在Oracle里null值表达为is null
所以select * from table1 where id=:id and Name=null' 或Name='null'执行会报错。
试试用字符串变量组合SQL语句,遇到Query1.FieldByName(FList_Flds[j]).IsNull 就连接字符串为:'select * from table1 where id=:id and Name '+' is null '+'...'