Delphi中Integer字段参数化查询为何总是失败?原因有哪些?

2026-04-10 18:253阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计335个文字,预计阅读时间需要2分钟。

Delphi中Integer字段参数化查询为何总是失败?原因有哪些?

我有一个TQuery对象,指向dBase数据库,我想知道如何参数化我的INSERT语句。以下INSERT查询将使用qry.ExecSQL一起正常工作:

Delphi中Integer字段参数化查询为何总是失败?原因有哪些?

qry.SQL.Text :='INSERT INTO KUNDE (FNAVN, ENAVN, INSTNR) VALUES (:FirstName)';

我有一个TQuery对象,指向dBase数据库,我想知道如何参数化我的insert语句.

以下INSERT查询将与qry.ExecSQL一起正常工作:

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错误’在表达式中输入mismtach’:

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;

我已尝试过各种各样的InstructorNo赋值,例如.Value而不是AsInteger,但它们都会产生相同的错误.

列’INSTNR’定义为Numeric,maxwidth = 4,decimals = 0.我试图分配的值是999.

函数参数InstructorNo的类型为Integer.

这是BDE中某种已知的错误吗?

编辑:我已经部分地想出了这一个

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

另一个编辑:终于明白了

我不得不使用.AsFloat来获取存储的值.虽然对于CustomerID使用float类型字段有点奇怪.

通过.AsInteger分配值,参数被标记为4字节的整数.
这将不适合2字节dBase整数(4位整数是2字节).
因此错误消息.

–jeroen

标签:

本文共计335个文字,预计阅读时间需要2分钟。

Delphi中Integer字段参数化查询为何总是失败?原因有哪些?

我有一个TQuery对象,指向dBase数据库,我想知道如何参数化我的INSERT语句。以下INSERT查询将使用qry.ExecSQL一起正常工作:

Delphi中Integer字段参数化查询为何总是失败?原因有哪些?

qry.SQL.Text :='INSERT INTO KUNDE (FNAVN, ENAVN, INSTNR) VALUES (:FirstName)';

我有一个TQuery对象,指向dBase数据库,我想知道如何参数化我的insert语句.

以下INSERT查询将与qry.ExecSQL一起正常工作:

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错误’在表达式中输入mismtach’:

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;

我已尝试过各种各样的InstructorNo赋值,例如.Value而不是AsInteger,但它们都会产生相同的错误.

列’INSTNR’定义为Numeric,maxwidth = 4,decimals = 0.我试图分配的值是999.

函数参数InstructorNo的类型为Integer.

这是BDE中某种已知的错误吗?

编辑:我已经部分地想出了这一个

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

另一个编辑:终于明白了

我不得不使用.AsFloat来获取存储的值.虽然对于CustomerID使用float类型字段有点奇怪.

通过.AsInteger分配值,参数被标记为4字节的整数.
这将不适合2字节dBase整数(4位整数是2字节).
因此错误消息.

–jeroen

标签: