当前位置:  开发笔记 > 数据库 > 正文

DELPHI/ACCESS SELECT SQL ERROR

如何解决《DELPHI/ACCESSSELECTSQLERROR》经验,为你挑选了1个好方法。

即时通讯使用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中返回零行...

好吗?

谢谢



1> Rob Kennedy..:

在常规SQL中,星号字符不是通配符.表示"匹配任何内容"的通配符是百分号,%.Unidac提供"服务器独立的SQL",这可能意味着它需要你提供的SQL,它应该是Unidac认可的方言,并将转换为你所定位的数据库的方言,所以你写的SQL需要对Unidac有效,不一定对您的实际目标数据库有效.Unidac将处理翻译.如果有的话,Unidac可能会使用你的星号并转义它们,以便目标数据库最终收到对包含实际星号的字段的请求.


一种自己决定这种方法的方法首先是削减你的SQL,直到它确实返回一些东西.然后,您可以逐步重新添加所需查询的片段,直到它再次开始失败,此时您已确定您的程序遇到问题的SQL.

您可能还希望考虑将日期存储为日期字段,而不是将它们存储为西班牙文本.它会大大简化您的查询.

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

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有