PDA

Ver la Versión Completa : SQL en componentes ADO


Parsec
12-04-2013, 22:44:00
Hola,

me ha salido este problema:
Esta instrucción en Tquery, funciona perfectamente:
Buscar.Active := False;
Texto1:='Select Paciente,Tratamiento,Fecha,Importe,Haber,Importefactura,Fracc, observaciones from visitas where UPPER(Paciente) LIKE'''+'%'+UpperCase(Edit1.Text) + '%'''';
Buscar.SQL.Clear;
Buscar.SQL.Add(texto1);
Buscar.Active:=True;


Pero no funciona en TADOQuery, ¿sabéis que es lo que debo de cambiar?.

Saludos

ginkaku
13-04-2013, 00:08:45
Perdona...Que error te sale? cuando lo activas no ejecuta tu sentencia? Que colocaste en sus propiedades del AdoQuery?

ecfisa
13-04-2013, 01:13:51
Hola.

El primer error que te generará esa línea es: Unterminated string, no lo corrijo por que me duele la cabeza de solo pensar en tanta comilla...

Mas simple resulta usar la función QuotedStr:

with ADOQuery1 do
begin
Close;
SQL.Text := 'SELECT Paciente, Tratamiento, Fecha, Importe, Haber, Importefactura,' +
'Fracc, observaciones FROM visitas WHERE UCASE(Paciente) LIKE ' +
QuotedStr('%' + UpperCase(Edit1.Text) + '%');
Open;
end;


Sin embargo es aconsejable que te acostumbres al uso de parámetros:

with ADOQuery1 do
begin
Close;
SLQ.Clear;
SQL.Add('SELECT Paciente, Tratamiento, Fecha, Importe,');
SQL.Add('Haber, Importefactura, Fracc, observaciones');
SQL.Add('FROM visitas WHERE UCASE(Paciente) LIKE :PPACI');
Parameters.ParamByName('PPACI').Value := '%' + UpperCase(Edit1.Text) + '%';
Open;
end;

Por último, cuando ejecutes la consulta, el segundo error lo provocará UPPER que deberás reemplazar por UCASE

Saludos.

Parsec
13-04-2013, 10:20:52
Hola.

El primer error que te generará esa línea es: Unterminated string, no lo corrijo por que me duele la cabeza de solo pensar en tanta comilla...



Jajaja, y a mí!!!.

la primera me ha dado un errorv\||/, pero la segunda opción ha funcionado!!! ^\||/:
with ADOQuery1 do
begin
Close;
SLQ.Clear;
SQL.Add('SELECT Paciente, Tratamiento, Fecha, Importe,');
SQL.Add('Haber, Importefactura, Fracc, observaciones');
SQL.Add('FROM visitas WHERE UCASE(Paciente) LIKE :PPACI');
Parameters.ParamByName('PPACI').Value := '%' + UpperCase(Edit1.Text) + '%';
Open;
end;

, pero poniendo el texto del SQL directamente en la propiedad string del TADOQuery, si no tampoco, me sale un error de argumentos no válidos.:confused:

Solucionado, gracias Ecfisa.:)