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内の行はゼロです...

何か考えはありますか?

ありがとう

4

1 に答える 1

5

通常のSQLでは、アスタリスク文字はワイルドカードではありません。「何にでも一致する」を意味するワイルドカード文字は、パーセント記号です%。Unidacは「サーバーに依存しないSQL」を提供します。これはおそらく、Unidacが認識した方言にあるはずの、指定したSQLを取得し、それをターゲットのデータベースの方言に変換することを意味します。 Unidacに対して有効である必要がありますが、必ずしも実際のターゲットデータベースに対して有効である必要はありません。Unidacが翻訳を処理します。どちらかといえば、Unidacはおそらくアスタリスクを取得してエスケープしているため、ターゲットデータベースは、実際のアスタリスクを含むフィールドの要求を受信することになります。


これを自分で判断する方法は、最初に、何かが返されるまでSQLを削減することです。次に、プログラムが問題を抱えているSQLを特定した時点で、再び失敗し始めるまで、目的のクエリの一部を徐々に再追加できます。

また、スペイン語のテキストとして保存するのではなく、日付フィールドとして日付を保存することを検討することもできます。クエリが大幅に簡素化されます。

cboAnio.Textまた、クエリに直接組み込むことにも注意してください。SQLインジェクションの脆弱性を提供する可能性があります。これを回避するには、パラメーター化されたクエリを使用します。

于 2013-01-11T16:24:06.313 に答える