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

这只是一个简单例子
请大家指点一下
...全文
63 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了吧

我去试试的说

Direct Oracle Access 组件有两种版本,Direct Oracle Access Standard version 和 Direct Oracle Access Object version Object版允许你通过TOracleObject和TOracleReference 对象使用 Oracle8的对象扩展。 如果您正在使用 Borland 的 Delphi 或 C++Builder 开发 Oracle 应用程序,那么 Direct Oracle Access 组件集将帮助您实现 Borland 开发工具和 Oracle 数据库系统之间的无缝集成。 使用 Direct Oracle Access,应用程序可以充分利用两个产品的优势。 主要特性: 高性能 ——Oracle的性能特性对于在线业务和批处理程序非常有用。通过Direct Oracle Access,能够直接访问Oracle接口,从而使得标准的数据库访问函数实现性能最优。而该组件集还支持Array Fetching, Array DML, PL/SQL Blocks, PL/SQL Tables、本地语句缓存和直接路径装载引擎,进一步优化了您程序的性能关键函数。 程序发布方便 ——Direct Oracle Access程序无需BDE或ODBC等间件,只要求Oracle SQL*Net 或Net8。这样,您在布署应用程序时,无需考虑间件的安装,避免了许多版本依赖性和配置问题。 Oracle Package支持 ——Oracle数据库的多数PL/SQL代码被编程为程序包。Direct Oracle Access提供了一个TOraclePackage组件,您可以方便的调用打包后的程序单元,而无需对这些程序单元和参数做细节说明。 Direct Oracle Access还含有一个Package向导,可以生成类,用以封装程序单元,并记录程序包定义的类型。最终,将您的Oracle程序包变为Object Pascal或C++语言的自然扩展。 TOracleDataSet ——该数据集组件支持Oracle记录锁定、记录刷新、服务器生成值、自动队列值生成、BLOB压缩。如果主表和从表之间存在外来关键字,或主表含有一个或多个列或属性(网表或varray),那么主从复合关系将自动建立。 TOracleDataSet可以在运行时使用Oracle字典内的信息,在客户端检查服务器约束,并在消息表读取约束错误消息。能够从字典获得格式屏蔽、区域值和默认值。这样,您所创建的应用程序将尽可能少的含有编译为可执行文件的数据库知识,还能够动态适应数据库的变化,无需重新编译。 支持Oracle专有特性 ——Direct Oracle Access支持许多Oracle专有特性。除了以上提及的特性之外,还支持Oracle 8和Oracle 8i特性,如LOB定位、对象和参考、XML TYPE、时间戳、滚动查询、密码到期、外部程序开发以及MTS Oracle服务等。 主要功能: 按范例查询模式 ——TOracleDataSet组件含有一个按范例查询模式,无需额外编程,也无需添加其他组件或控件,就能为您的程序提供QBE窗体。由于是在Oracle服务器上执行QBE查询,因此性能最优而且流量最低。用户能够提供简单的查询值,如JONES或100;能够包含字符串值通配符,如JON%;还包含比较操作符,如>, <, NOT, BETWEEN, IN等。 Oracle监控器 ——该组件能够监控您Direct Oracle Access程序的数据库访问行为。可以显示每个行为的SQL、变量、时间戳、逝去时间、网络统计表、数据库统计表和查询执行计划。这对于查找性能瓶颈非常有用,能够调整程序性能,解决程序错误。 警告和管道事件 ——Oracle Server为每个事件处理提供dbms_alert和dbms_pipe包。Direct Oracle Access的TOracleEvent可以作为这些事件的接收器。TOracleEvent工作在您程序的后台线程,可以向类似对象事件传播数据库事件。这些事件的发生可以同步或异步于您程序的主线程。 SQL脚本 ——如果需要执行多条数据定义语言(DDL)语句,例如运行您程序的数据库安装部分,就可以使用TOracleScript组件。该组件含有一个专有编辑器,可以开发脚本和单个命令。可扩展的脚本语言遵循基本的SQL*Plus语法,并支持所有SQL语句。除此,该语言还支持变量置换,从而令您的脚本可定制。 高级队列 ——TOracleQueue组件可以重发利用Oracle8的高级队列选项。该组件封装了DBMS_AQ包的基本功能。它提供了便利操作,能够将消息加入队列或者将其从队列提取出来。消息提取操作是在您程序的后台线程完成的,而线程模式生成的事件可以同步或异步于您程序的主线程。 会话池 ——在服务器程序,需要经常创建会话以处理来自客户端程序的请求,这对于连接池的使用非常有帮助。如果没有池的概念,那么每次请求都将引起数据库登录和离开行为。使用TOracleSessionPool组件后,您可以维护一个数据库会话池,能够被不同请求使用或重复使用。您可以定义池会话的最大和最小数目,定义池idle会话的TimeOut行为,并可以预先设置用户名、密码和数据库。

1,178

社区成员

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

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