Cita:
Empezado por marcsc
ese %s que pones que se supone que es?? Con toda seguridad eso es lo que hace que la consulta no te funcione, tanto por el WHERE como en el ORDER BY.
|
Es el %s lo que hace que dé error la SQL, pero no porque esté mal puesto sino porque de seguro que usa la función
Format para formar la SQL; una SQL errónea. El error más típico es comparar un campo de tipo texto con una cadena
sin entrecomillar (de ahí el
type mismatch o error de disparidad de tipos).
Hace una semana, colgué un
hilo en el foro sobre el uso de la técnica de usar
Format para generar SQLs dinámicas. En verdad, cuando la SQL es muy variable (variabilidad en el FROM o en la SELECT o incluso en el GROUP BY) no es posible usar solo parámetros y en este caso es cuando es
muy útil el uso de
Format (combinado con el uso de parámetros en lo posible). Bueno, esto perjudica (minimamente) la eficiencia de la consulta y no será muy transportable por si quieres, por ejemplo, migrar de dBase a Informix. Por no hablar del SQL inyectado ....
Tengo esta rútina para depurar SQLs dinámicas que posiblemente os será útil:
Código Delphi
[-]
uses Clipbrd;
procedure DepuraString(ATxt: String);
begin
Clipboard.Clear;
Clipboard.SetTextBuf(PChar(ATxt));
ShowMessage(ATxt);
end;
Esta rutina saca una ventana con la SQL que se forma y además la pega en el portapapeles por lo que puedes llevartela a tu editor SQL favorito, ejecutar y ver exactamente donde falla. Para usarla debes llamarla justo antes del
Query.Open (cuando ya está formada la SQL):
Código Delphi
[-]
DepuraString(Query.SQL.Text);
Query.Open;
Una vez capturada la SQL, es muy fácil depurarla.
Saludos.