Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como hacer consulta sql en ADOQuery (https://www.clubdelphi.com/foros/showthread.php?t=62556)

Lizette 01-01-2009 01:25:09

Como hacer consulta sql en ADOQuery
 
Hola, tengo un problema con la consulta sql.

El codigo de la consulta es el siguiente:

Código Delphi [-]
procedure TfrmSelectProd.SQLVenta(numero: String);
var
  consulta: string;
begin
consulta:='Select CveProd, Descripcion, CantVta, PrecioV, Sum(CantVta*PrecioV) From producto, venta Where Venta.CveProd=producto.CveProd and venta.NoVenta=';
  consulta:=consulta+(numero)+' Group By CveProd, Descripcion, CantVta, PrecioV';
  with QyVenta do
    begin
    Close;
    SQL.Clear;
    SQL.Add(consulta);
    Open;
    end;

end;

El contenido de la consulta la visualizo en un dbgrid, pero al mandar llamar el procedimiento con el parametro SQLVenta(NoVta); NoVta es una variable string que contiene el numero de venta, me causa error, dice que CveProd es redundante..

Neftali [Germán.Estévez] 02-01-2009 09:38:05

¿De qué tipo es el campo de la consulta?
Tal vez necesite comillas simples. En ese caso utiliza:

Código Delphi [-]
...
consulta:=consulta+QuotedStr(numero)+' ...
...

ContraVeneno 02-01-2009 16:42:38

Dos cosas: Te puedes ahorrar la variable "Consulta" y puedes hacer que el sistema te diga en que línea te equivocaste en caso de algún error en tu consulta SQL.

Con la forma que estas utilizando, si tienes algún error en la instrucción SQL, el sistema te dirá que hay un error "SQL error en la línea 1". Esto es porque pones toda la instrucción en una variable "String" y se la pasas al componente TADOQuery en una sola línea.

Si utilizas la siguiente forma, te ahorras la variable "consulta" y le pasas la instrucción SQL bien organizada en varias líneas, con lo que, si existe algún error, el sistema te dirá en que línea está el error:

Código Delphi [-]
with UnAdoQuery do begin
 If active then close;
 SQL.Clear;
 SQL.Add('Select CveProd, Descripcion, CantVta, PrecioV, ');
 SQL.Add('Sum(CantVta*PrecioV) ');
 SQL.Add('From producto P, venta V');
 SQL.Add('Where V.CveProd = P.CveProd ');
 SQL.Add('and V.NoVenta = :numero');
 SQL.Add('Group By CveProd, Descripcion, CantVta, PrecioV');
 Parameters.ParamByName('Numero').Value := numero;
 Open;
end; //with

Ahora mi duda es ¿por qué utilizas a "numero" como string? se supone que "numero" es un número, ¿no sería mejor manejarlo como "integer" o como "Float"?


La franja horaria es GMT +2. Ahora son las 09:02:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi