代码之家  ›  专栏  ›  技术社区  ›  Thomas Kjørnes

为什么带整数字段的参数化查询失败?

  •  4
  • Thomas Kjørnes  · 技术社区  · 14 年前

    qry.SQL.Text :=
      'INSERT INTO KUNDE ' +
      '(FNAVN, ENAVN, INSTNR) ' +
      'VALUES ' +
      '(:FirstName, :LastName, ' + IntToStr(InstructorNo) + ' )';
    
    qry.ParamByName('FirstName').AsString := FirstName;
    qry.ParamByName('LastName').AsString := LastName;
    

    但是,这个完全参数化的版本失败,出现BDE error'Type mismtach in expression':

    qry.SQL.Text :=
    'INSERT INTO KUNDE ' +
    '(FNAVN, ENAVN, INSTNR) ' +
    'VALUES ' +
    '(:FirstName, :LastName, :InstructorNo)';
    
    qry.ParamByName('FirstName').AsString := FirstName;
    qry.ParamByName('LastName').AsString := LastName;
    qry.ParamByName('InstructorNo').AsInteger := InstructorNo;
    

    我试过各种不同的赋值方法,比如.Value而不是AsInteger,但是它们都会产生相同的错误。

    函数参数InstructorNo的类型是Integer。

    编辑:我已经部分弄明白了

    我可以使用.AsSmallInt而不是.AsInteger来解决某些字段上的此问题,但是在另一个数字字段上,Integer、SmallInt或Word都不起作用。唯一的办法是手动将值插入到SQL语句中。maxwidth=6的dBase数字字段有什么特别之处?

    我不得不使用.AsFloat来存储值。尽管对CustomerID使用float类型字段有点奇怪。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Jeroen Wiert Pluimers    14 年前

    通过.as Integer赋值,参数被标记为4字节整数。
    不适合2字节dBase整数(4位整数是2字节)。

    --杰罗恩

    推荐文章