0

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

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;

我收到此错误:

在此处输入图像描述

4

2 回答 2

1

您应该AsDateTimeParams设置代码中使用。

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;

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

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

于 2013-06-18T23:08:53.530 回答
0
Form1.ABSQuery1.Params.ParamByName('d1').DataType := ftDateTime;
Form1.ABSQuery1.Params.ParamByName('d1').Value :=cxDateEdit1.Date;

你必须显式指定参数的数据类型给它就没有这个问题了,然后转换成字符串就不需要了

于 2013-06-19T04:36:10.553 回答