即时通讯使用UNIDAC TUniQuery组件,这是我的SQL:

q_ContribSem2.Close;
q_ContribSem2.SQL.Clear;
q_ContribSem2.SQL.Add('SELECT SUMINISTRO.SUMTITIPOPERSONA, SUMINISTRO.SUMCHRAZONSOCIAL, SUMINISTRO.SUMCHAPELLIDOPATERNO,');
q_ContribSem2.SQL.Add('SUMINISTRO.SUMCHAPELLIDOMATERNO, SUMINISTRO.SUMCHNOMBRES, SUMINISTRO.SUMchCodigo, SUMINISTRO.SUMTITIPOCALLE, ');
q_ContribSem2.SQL.Add('SUMINISTRO.SUMCHNOMBRECALLE, SUMINISTRO.SUMCHNUMEROCALLE, SUMINISTRO.OBSERVACIONESMEDIDOR ');
q_ContribSem2.SQL.Add('FROM SUMINISTRO ');
q_ContribSem2.SQL.Add('WHERE ((((SUMINISTRO.OBSERVACIONESMEDIDOR) Like ' + chr(39) + 'NVO*' + chr(39) + ' Or ');
q_ContribSem2.SQL.Add('(SUMINISTRO.OBSERVACIONESMEDIDOR) Like ' + chr(39) + 'NUEVO*' + chr(39) + ') And');
q_ContribSem2.SQL.Add('((SUMINISTRO.OBSERVACIONESMEDIDOR) Like ' + chr(39) + '*JULIO*' + chr(39) + ' Or ');
q_ContribSem2.SQL.Add(' (SUMINISTRO.OBSERVACIONESMEDIDOR) Like ' + chr(39) + '*AGOSTO*' + chr(39) + ' Or ');
q_ContribSem2.SQL.Add(' (SUMINISTRO.OBSERVACIONESMEDIDOR) Like ' + chr(39) + '*SETIEMBRE*' + chr(39) + ' Or ');
q_ContribSem2.SQL.Add(' (SUMINISTRO.OBSERVACIONESMEDIDOR) Like ' + chr(39) + '*OCTUBRE*' + chr(39) + ' Or ');
q_ContribSem2.SQL.Add(' (SUMINISTRO.OBSERVACIONESMEDIDOR) Like ' + chr(39) + '*NOVIEMBRE*' + chr(39) + ' Or ');
q_ContribSem2.SQL.Add(' (SUMINISTRO.OBSERVACIONESMEDIDOR) Like ' + chr(39) + '*DICIEMBRE*' + chr(39) + ') And ');
q_ContribSem2.SQL.Add(' (SUMINISTRO.OBSERVACIONESMEDIDOR) Like ' + chr(39) + '*' + cboAnio.Text + '*' + chr(39) + '));');
q_ContribSem2.Open;




该语句返回ACCESS内部的行,但Delphi内部返回零行。

好主意吗?

谢谢

最佳答案

在常规SQL中,星号字符不是通配符。表示“匹配任何内容”的通配符是百分号%。 Unidac提供了“与服务器无关的SQL”,这可能意味着它采用了您提供的SQL(应在Unidac可以识别的方言中),并将其转换为目标数据库的方言,因此编写的SQL需要对Unidac有效,不一定对您的实际目标数据库有效。 Unidac将负责翻译。如果有的话,Unidac可能会带走您的星号并将其转义,以便目标数据库最终收到对其中包含实际星号的字段的请求。



自行确定此方法的一种方法是首先缩减SQL,直到它确实返回某些内容为止。然后,您可以逐步重新添加所需查询的片段,直到再次开始失败为止,此时您已确定程序遇到了哪个SQL问题。

您可能还希望考虑将日期存储为日期字段,而不是将其存储为西班牙语文本。这将大大简化您的查询。

另外,请注意将cboAnio.Text直接合并到查询中。它可能提供SQL注入漏洞。为了避免这种情况,请使用参数化查询。

关于sql - DELPHI/Access 选择SQL错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14281502/

10-08 22:16
查看更多