bcb 中 sql语句问题

ayane 2003-10-21 11:29:25
怎么在SQL中做数值型变量的比较
我用的是ADOQuery

比如说
int ks=5;

……
ADOQuery1->Sql->Add("select * from table where 最大开数>=ks and 最小开数<=ks ")
……

得到的返回值为0

这只是一个简单例子
请大家指点一下
...全文
62 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
heguxun 2003-11-03
  • 打赏
  • 举报
回复
如果你的字段“最大开数" 和 “最小开数”是整形的话,sql应这样写:
ADOQuery1 -> SQL -> Add("select * from table where 最大开数>="+ks+" and 最小开数<="+ks);
ayane 2003-10-31
  • 打赏
  • 举报
回复
我都试过了
可还是不行
是不是用中文字段的问题呀!!
或是还有什么我漏掉了
wt_sanlian 2003-10-22
  • 打赏
  • 举报
回复
用下面的方法赋值更直观.

AnsiString SQL;
int ks = 5;
SQL.sprintf("select * from table where 最大开数>=%d and 最小开数<=%d ",ks,ks);

ADOQuery1 -> SQL -> Clear();
ADOQuery1 -> SQL -> Add(SQL);
ADOQuery1 -> Open();
cfchhx 2003-10-22
  • 打赏
  • 举报
回复
同意 huangjuliang(学习,学习,再学习!)的解释。

中文代码容易出现一些莫名其妙的错,而且中文写代码时累不累啊。
ayane 2003-10-22
  • 打赏
  • 举报
回复
其实我程序里ks也是一个ADOQuery查询后返回值,干脆直接让他返回字符串不一样么

ADOQuery1->Sql->Add("select * from table
where 最大开数>='"+ADOQuery2->FieldByName("开数")->AsString+"'
and 最小开数<='"+ADOQuery2->FieldByName("开数")->AsString+"'");

可我试了不行
先返回整形再用IntToStr转也不行
请大家在分析一下啦
ayane 2003-10-22
  • 打赏
  • 举报
回复
这种方法也行么

我去试试

顶一下
huangjuliang 2003-10-21
  • 打赏
  • 举报
回复
不过上面的最大开数和最小开数为中文

不知这样写还有什么
ADOQuery1->Sql->Add("select * from table where 最大开数>="+IntToStr(ks)+" and 最小开数<="+IntToStr(ks));

最好不要用中文!
huangjuliang 2003-10-21
  • 打赏
  • 举报
回复
ADOQuery1->Sql->Add("select * from table where 最大开数>=ks and 最小开数<=ks ")

这句话有错!

在这里ks就当然字符为处理了!

应当这样写:
ADOQuery1->Sql->Add("select * from table where 最大开数>="+IntToStr(ks)+" and 最小开数<="+IntToStr(ks));
这样应当没有问题

ayane 2003-10-21
  • 打赏
  • 举报
回复
不是啊
能满足条件的

By The Way
ADOCommand和ADOQuery用法一样么
有什么不相同的
我一般都是用来处理SQL的
bittertia 2003-10-21
  • 打赏
  • 举报
回复
我很少用过ADOQuery,大部分用的还是ADOCommand。我觉得如果处理SQL语句比较多的话还是用ADOCommand方便,不需要像ADOTable和ADOQuery一样得经常打开和关闭。

你这里提到的问题,可能是在表中没有满足条件的数据。
bittertia 2003-10-21
  • 打赏
  • 举报
回复
使用ADOCommand比ADOTable和ADOQuery方便是指在的执行过程中不需要相看库的表,只是关心执行是否成功。比如:一个文件中记录的全是SQL语句,并且这些SQL语句是对不同的表进行操作的。这样我就愿意用ADOCommand而不是ADOQuery。
huangjuliang 2003-10-21
  • 打赏
  • 举报
回复
To niuzhenjun(还得学呀)

你的有错,

假如ks=100;
这样就变成条件变为

where 最大开数>='100'

这是不对的!

实际带变量的SQL语句,实际上就是字符串的联结!
chenyubang 2003-10-21
  • 打赏
  • 举报
回复
ADOQuery1->Sql->Add("select * from table where 最大开数>="+IntToStr(ks)+
" and 最小开数<="+IntToStr(ks));


对变量需要用IntToStr()来转换,然后用+连接使用
niuzhenjun 2003-10-21
  • 打赏
  • 举报
回复
错了,少了一个"
ADOQuery1->Sql->Add("select * from table where 最大开数>='" + IntToStr(ks) + "' and 最小开数<='" + IntToStr(ks) "')";
niuzhenjun 2003-10-21
  • 打赏
  • 举报
回复
huangjuliang(学习,学习,再学习!)的正确,并不象楼主所说的变成了字符串比较,原因如下:
1.IntToStr()只是用来构造sql语句,并没有改变数字的类型,sql语句要求是字符串相加,所以必须转换。
2.字符串比较必须在变量两侧加上单引号'。而你这里不需要。
ADOQuery1->Sql->Add("select * from table where 最大开数>='" + IntToStr(ks) + "' and 最小开数<='" + IntToStr(ks) "');
niuzhenjun 2003-10-21
  • 打赏
  • 举报
回复
同意 huangjuliang(学习,学习,再学习!)的解释,完全正确。
ayane 2003-10-21
  • 打赏
  • 举报
回复
请问用中文有不好的地方么
我表里的字段名就都是中文
觉得很容易看
请细说说好么???

而且将KS转换成字符后是不是就变成字符串的比较了
那就5>14了吧

我去试试的说

1,178

社区成员

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

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