我是Delphi和Query的新手,在我发布这个问题之前,我搜索了与我的问题有关的所有地方,但似乎我无法找到任何可以帮助我解决问题的东西。
我发现此错误消息,该操作符不适用于此操作数类型:
SQL.Text:='SELECT COUNT(Nik) FROM Absent WHERE Nik LIKE'
+QuotedStr('%'+cxButtonEdit1.Text+'%') 'AND MONTH(Tgl)'=
+QuotedStr(FormatDateTime('yyyy-mm-dd',dtp1.Date)')+ 'AND YEAR(Tgl)'=
+QuotedStr(FormatDateTime('yyyy-mm-dd',dtp1.Date));
如何解决此错误?
答案 0 :(得分:4)
您的代码有几个缺陷:
LIKE
句后FormatDateTime
函数时没有有效格式来获取日期的月份或年份。 尝试此示例(您必须替换真实查询组件名称的ADOQuery1
)
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT COUNT(Nik) FROM Absent WHERE Nik LIKE :Nik');
ADOQuery1.SQL.Add('AND MONTH(Tgl) = :MonthTgl');
ADOQuery1.SQL.Add('AND YEAR(Tgl) = :YearTgl');
ADOQuery1.Parameters.ParamByName('Nik').Value := '%'+cxButtonEdit1.Text+'%';
ADOQuery1.Parameters.ParamByName('MonthTgl').Value := MonthOf(dtp1.Date);
ADOQuery1.Parameters.ParamByName('YearTgl').Value := YearOf(dtp1.Date);
ADOQuery1.Open;
答案 1 :(得分:0)
您错过了+
运算符,并且混淆了一些引号。而不是:
SQL.Text:='SELECT COUNT(Nik) FROM Absent WHERE Nik LIKE'
+QuotedStr('%'+cxButtonEdit1.Text+'%') 'AND MONTH(Tgl)'=
+QuotedStr(FormatDateTime('yyyy-mm-dd',dtp1.Date)')+ 'AND YEAR(Tgl)'=
+QuotedStr(FormatDateTime('yyyy-mm-dd',dtp1.Date));
我认为你的意思是
SQL.Text:='SELECT COUNT(Nik) FROM Absent WHERE Nik LIKE'
+QuotedStr('%'+cxButtonEdit1.Text+'%') +' AND MONTH(Tgl)='
+QuotedStr(FormatDateTime('yyyy-mm-dd',dtp1.Date))+ ' AND YEAR(Tgl)='
+QuotedStr(FormatDateTime('yyyy-mm-dd',dtp1.Date));
另请注意,您必须以这种方式停止构建查询。你打开自己SQL injection attacks。改为使用参数化查询。