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) ';
完毕!
                

Delphi SQL语句中 数值型(Integer) 的引号使用---个人笔记

数据库中2个表  TableA  ,  TableB, TableA中字段 TypeID 为数值型(Integer) TableB中字段ID为数值型(Integer),TypeName为字...
  • uhjiok123
  • uhjiok123
  • 2016年08月03日 17:25
  • 587

delphi中多条件SQL语句的增加注意事项

在DELPHI中常常要用到ADOQUERY中的SQL语句增加信息后执行,当要求增加条件(如参数时)中间的间隔很重要,搞不好就要出错:下举例说明我要表达的意思:如:一个表:student 有 ksh,x...
  • happybuttom
  • happybuttom
  • 2009年09月24日 21:31
  • 1798

sql语句中or条件有无括号举例!!

select * from school where class=1 and (sex like 男 or birthday like 1);                       or在括号...
  • lh1424573495
  • lh1424573495
  • 2017年10月12日 13:55
  • 464

INSERT 语句 增加条件,条件成立插入,否则不插入

insert 命令中 增加 条件语句
  • bestcxx
  • bestcxx
  • 2017年06月07日 03:09
  • 3476

sql语句中的条件控制 case ..when.

CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE 子句中使用 CASE。  首先让我们看一下 CASE 的语...
  • hnas_better
  • hnas_better
  • 2007年12月06日 10:42
  • 1607

关于Hibernate在使用原生SQL语句多表查询所遇到的问题

关于Hibernate在使用原生SQL语句多表查询所遇到的问题今天早上想实现商品的分类功能时,使用的是原生SQL语句中的多表查询语法,遇到的问题: 1、写好SQL语句后,调用createQuery(h...
  • z2432356108
  • z2432356108
  • 2016年12月27日 17:57
  • 178

SQL的插入语句insert

插入数据分为以下几种方式: 1. 插入完整的行; 2. 插入行的一部分 3. 插入某些查询的结果 4. 从一个表复制到另一个表 1. 插入完整的行,有两种方式:    ...
  • u010566813
  • u010566813
  • 2016年04月14日 13:55
  • 929

hibernate criteria 添加条件(sql语句混用)

public List findAllChecked(Accident entity) { if(entity==null) entity=new A...
  • benmin1
  • benmin1
  • 2017年08月23日 17:06
  • 431

SQL语句在Delphi中的使用规则

1:' 是 Pascal 的字符串定界符 问:请教 ADOQuery1_adduser.SQL.Text:='insert into person(p_name,pwd,loginleve...
  • zx93d2d10
  • zx93d2d10
  • 2016年07月08日 16:01
  • 148

通用的可带查询条件的SQL语句的分页存储过程(2)

代码二: CREATE PROCEDURE pagination @tblName varchar(255), – 表名 @strGetFields varchar(1000) = ‘...
  • tlammon
  • tlammon
  • 2016年03月25日 10:10
  • 902
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi中使用sql语句加条件引用时值是一个整型变量的问题
举报原因:
原因补充:

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