德尔福&绝对数据库:删除查询

时间:2013-06-18 22:28:50

标签: delphi delphi-xe2 delphi-xe

为什么我的查询不起作用?

Form1.ABSQuery1.Close;
Form1.ABSQuery1.SQL.Clear;
Form1.ABSQuery1.SQL.Text:='DELETE FROM LOG WHERE status = ''YES'' and DATE BETWEEN :d1 and :d2';
Form1.ABSQuery1.Params.ParamByName('d1').Value :=cxDateEdit1.Date;
Form1.ABSQuery1.Params.ParamByName('d2').Value :=cxDateEdit2.Date;
Form1.ABSQuery1.ExecSQL;
Form1.ABSTable1.Refresh;

我收到此错误:

enter image description here

2 个答案:

答案 0 :(得分:1)

您应该在AsDateTime设置代码中使用Params

Form1.ABSQuery1.SQL.Text:='DELETE FROM LOG WHERE status = ''YES'' and DATE BETWEEN :d1 and :d2';
Form1.ABSQuery1.Params.ParamByName('d1').AsDateTime :=cxDateEdit1.Date;
Form1.ABSQuery1.Params.ParamByName('d2').AsDateTime :=cxDateEdit2.Date;
Form1.ABSQuery1.ExecSQL;

使用ValuecxDateEdit1.Date转换为通用字符串格式以进行分配,但这并未将其正确转换为大多数数据库(包括ABS)所期望的YYYY-MM-DD格式。正确使用AsDateTime允许数据库驱动程序/组件转换为DBMS使用的特定日期格式。

此外,您的数据库字段是否真的命名为DATE?在大多数DBMS中,日期通常是保留字或函数名称,如果是,通常需要引用它。

答案 1 :(得分:0)

Form1.ABSQuery1.Params.ParamByName('d1').DataType := ftDateTime;
Form1.ABSQuery1.Params.ParamByName('d1').Value :=cxDateEdit1.Date;

你必须明确指定参数的数据类型才没有这样的问题,然后转换为字符串不需要