delphi中使用sql语句加条件引用时值是一个整型变量的问题

转载 2017年10月13日 16:17:27

SQL为数据库的操作提供了很多方法,结合起delphi,要想按自己的需要得到预想的结果,却要经过SQL测试再到delphi里的语句这样一个过程。

目前我就遇到一个难题:就是在查询语句中使用条件,但条件引用的是一个整型变量(string变量最简单),整型变量却不容易清楚,想到这是遇到的问题,先搞清楚再继续工作。以下是我用的语句(简化了):

var mydata:integer;
……
sql.add(format('select * from stdinfo where grade="%d"',[mydata]));
……

但是不能通过,不知道是哪里来的语句,我是上网看别人的帖子得的。先以为是符号问题,不是这样,我试了几回&和*甚至是^,不对。可能是没有这样的用法,在Q群上,朋友们说是%的引用不对,好像是要sql动态参数传值,而delphi要用:
所以有

sql.add('select * from stdinfo where grade=:p1');
parambyname('p1').asinteger:=mydata;

 利用参数传值,虽然还不太清楚,这个应该试一下吧,但愿一切如意。

经过测试,光是上面的代码也是不对的,应该这样写:

复制代码
 1 var graden:integer;
 2 begin
 3 graden:=4;//测试用的数据
 4 with adoquery1 do
 5 begin
 6 close;
 7 sql.Clear;
 8 sql.Add('select grade,class,name from stdinfo where grade=:p1');
 9 Parameters.ParamByName('p1').Value:=graden;
10 open;
复制代码

注意:值得一提的是,SQL语句中条件引用一个变量值时,要用parameters传值,而网上什么asinteger之类的也要视情况而定,我用的paramByname就没有.asinteger的选项,这点可能是delphi版本所至,有的语句可能是delphi 6.0的或其它,我用7.0。

var
  FmOperator: TFmOperator;
  OperID: string;
  Modified: Boolean;

implementation

{$R *.dfm}
procedure TFmOperator.btnDelClick(Sender: TObject);
begin
  if Modified then
  begin
    if MessageBox(Handle, PChar('确定要删除选定的操作员吗?'), PChar('提示'), MB_ICONQUESTION+MB_okCancel) = IDOK then
    begin
      with DM.qryOperator do
      begin
        Close;
        SQL.Clear;
        sql.Add('Delete  from [Operator] where ID = :P1');
        Parameters.ParamByName('P1').Value:=StrToInt(OperID);
        ExecSQL;
        SQL.Clear;
        SQL.Text := 'select *  from [Operator]';
        Open;
      end;
    end;
  end;
end;

看完博客后自己使用实例并且成功执行,xe2版本。

补充:另外一种解决办法

SQL.Text := 'Delete  from [Operator] where ID ='+ OperID;
直接sql语句在后面加 integer类型  如果是string类型
SQL.Text := 'Delete  from [Operator] where ID ='+quotedstr( OperID) ';
完毕!
                    

SQL语句中聚合函数和Group By一同使用时能取到符合条件的记录中哪些列的信息

SQL语句中聚合函数和Group By一同使用时能取到符合条件的记录中哪些列的信息聚合函数对一组值执行计算并返回单一的值。除了 COUNT 以外,聚合函数忽略空值。聚合函数经常与 SELECT 语句的...
  • jdfk423
  • jdfk423
  • 2017年11月03日 22:07
  • 35

Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!

当我们搞定DataSnap后,我们进入客户端程序开发阶段了,我们建立了客户端模块后,打算按照刚才开发服务器的步骤开发客户端程序,随后加入了DBExpress的TSQLDataSet,设定数据库连接后,...
  • sunylat
  • sunylat
  • 2015年06月11日 10:23
  • 2655

在Delphi中动态地使用SQL查询语句

在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态 特性。下面介绍如何在Delphi中实现这种功能。 在Delphi中,使用SQL查询语句的途径是:在窗体中置入TQuery构件,设...
  • laukicn
  • laukicn
  • 2017年05月26日 15:47
  • 292

delphi TShellListView控件尝试使用及sql语句修改表的结构

今天第一次使用TShellListView控件,用它的目的是为了向资源管理器一样显示一个目录的文件,用TListView的话显示文件图标有困难,也就是这点求完美的性格让我尝试着TShellLis...

sql语句中条件查询like的效率,及使用规范.

引用“ 我在做数据库查询的时候,发现了一个奇怪的问题,在使用like关键字的时候,速度其慢,效率极低。不明白是什么原因,请大家讲解一下,为什么like慢,而其他的两个快。3个查询不同的地方用红色...

SQL语句Where中使用别名作为判断条件

当我们使用某个表达式作为输出的一列时 , 我们无法再 Where 条件中直接使用该列作判断条件 . 例如下面的 SQL 语句 : select id, (c1 + c...

关于mybatis增删改查时条件为一个集合时如何利用foreach书写sql语句

这种情况属于增删改查条件为集合时遇到。例如想要删除10个用户,根据id删除,如果每次只传入一个id,那么需要执行10条delete语句,如果利用foreach后一条语句就搞定,下面列举出一个简单的方法...

LKDBHelper的各种接口使用方式,及各种sql组合条件语句。

在项目的开发过程中,我们大部分时候都需要对数据做一个持久化的操作,最典型的就是 IM 类型的项目,消息都要做保存。 还有就是像个人重要的信息,一般也会存本地,和服务器做一个同步处理。 数据的持久化可以...

oracle sql语句查询时 表名和字段名要加双引号的问题详解,oraclesql

作为oracle的初学者相信大家一定会遇到这个问题,如图:          明明就是navicat可视化创建了表,可是就是不能查到!这个为什么呢?           selec...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi中使用sql语句加条件引用时值是一个整型变量的问题
举报原因:
原因补充:

(最多只允许输入30个字)