sql里的条件中怎么赋变量?

gxxc2008 2008-07-11 11:18:55
sql.add('');
sql.add(' iif( (2008-year(sj))>60,'老人'.....) as aaa ');
像这个语句中2008如果要以变量的值传入,不知道该怎么写啊?

parameters.ParamByName('y1').Value:=2008;那么sql里怎么写?:y1也不对啊?
...全文
156 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangkunjie 2008-07-18
  • 打赏
  • 举报
回复
已测试,写成如下格式,ok
Adoquery1.close;
Adoquery1.sql.Clear;
Adoquery1.sql.Text := 'SELECT * FROM a WHERE ((:y1)-year(sj))>60' ;
Adoquery1.parameters.ParamByName('y1').Value:=2008;
//或者 Adoquery1.parameters.Item[0].Value:=2008;
Adoquery1.open;



五哥 2008-07-13
  • 打赏
  • 举报
回复
Adoquery1.close;
Adoquery1.sql.Clear;
Adoquery1.sql.Text := ' SELECT * FROM a WHERE (:y1-year(sj))>60 ' ;
Adoquery1.open;
Adoquery1.parameters.ParamByName('y1').Value:=2008;


yangkunjie 2008-07-12
  • 打赏
  • 举报
回复
提示什么?
wywry 2008-07-11
  • 打赏
  • 举报
回复
sql.add('case when (2008-year(sj))>60 then ''老人'' else ''年轻人'' end as aaaa');

在SQL中,可以使用CASE
gxxc2008 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yangkunjie 的回复:]
delphi里

Delphi(Pascal) code
sql.add(' iif( (:y1-year(sj))>60,'老人'.....) as aaa ');
parameters.ParamByName('y1').Value:=2008;


sql里

SQL code
declare @y1 int
select @y1=2008
iif( (@y1-year(sj))>60,'老人'.....) as aaa



[/Quote]




Delphi(Pascal) code
sql.add(' iif( (:y1-year(sj))>60,'老人'.....) as aaa ');
parameters.ParamByName('y1').Value:=2008;
这种方法我试过了,通不过阿,编译通过,但在程序中执行时提示‘y1 not found’
gxxc2008 2008-07-11
  • 打赏
  • 举报
回复
我希望这样写就是希望如果以后edit1.text的赋值发生什么变化, sql语句不怎么变动,只要改动
parameters.ParamByName('y1').Value:=(改这里);就可以了。
不知道可否做到?
gxxc2008 2008-07-11
  • 打赏
  • 举报
回复
我用的是access库支持jet-sql, 似乎不支持t-sql,declare

如果
eidt1.text:=2008;
sql.add(' iif( ('+edit1.text+'-year(sj))>60,'老人'.....) as aaa '),这样也是可以通过的。
我的意思是可否这样
parameters.ParamByName('y1').Value:=strtoint(edit1.text);再把y1这个变量通过某种写法传递到sql语句中去?

yangkunjie 2008-07-11
  • 打赏
  • 举报
回复
delphi里

Delphi(Pascal) code
sql.add(' iif( (:y1-year(sj))>60,'老人'.....) as aaa ');
parameters.ParamByName('y1').Value:=2008;



sql里

SQL code
declare @y1 int
select @y1=2008
iif( (@y1-year(sj))>60,'老人'.....) as aaa


yangkunjie 2008-07-11
  • 打赏
  • 举报
回复
写错了
gxxc2008 2008-07-11
  • 打赏
  • 举报
回复
能通过阿 我用access库阿
yangkunjie 2008-07-11
  • 打赏
  • 举报
回复
delphi里

sql.add(' if( (:y1-year(sj))>60,'老人'.....) as aaa ');
parameters.ParamByName('y1').Value:=2008;

sql里

declare @y1 int
select @y1=2008
if if( (@y1-year(sj))>60,'老人'.....) as aaa


主要是不太明白你究竟想表达什么意思,不知道这样回答是否合适
mygodsos 2008-07-11
  • 打赏
  • 举报
回复
嘿嘿,你用vfp的iif呀,sql能通过不?
gxxc2008 2008-07-11
  • 打赏
  • 举报
回复
close;
sql.Clear;
sql.Add(' SELECT * FROM a WHERE (2008-year(sj))>60 ');
open;

实际上就是这样一个简单的查询阿...
现在想把2008这个以变量的形式传入,比如
parameters.ParamByName('y1').Value:=2008;
如果这样写的话,那么sql里怎么写呢?
sql.Add(' SELECT * FROM a WHERE (:y1-year(sj))>60 ');
parameters.ParamByName('y1').Value:=2008;
这种方式通不过阿
gxxc2008 2008-07-11
  • 打赏
  • 举报
回复
晕了,我要把2008作为变量传到sql里面阿
和iif没关系的阿

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧