Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   ayuda consulta en un edit (https://www.clubdelphi.com/foros/showthread.php?t=91161)

jose001 21-11-2016 22:33:51

ayuda consulta en un edit
 
hola buenas tardes planteo mi duda tengo un formulario de caja en el cual esta compuesto por un dbgrid y 2 datetimepicker y un edit. esta aplicacion esta echa en delphi 2010 y componentes query de zeos y uso mysql-5 para la base de datos.
En dicho formulario lo que quiero realizar es lo siguiente buscar por fecha seleccionada en los datetimepicker y segun la fecha quiero traer el ultimo total de esa busqueda y guardarlo en un edit. y los demas datos que mostrarlo en el grid
bien con este codigo en el boton buscar

Código Delphi [-]
qCaja.Close;
qCaja.SQL.Clear;
qCaja.SQL.ADD('select * from caja');
qCaja.SQL.ADD('where fecha BETWEEN :Finicio AND :Fhasta');
qCaja.Params[0].AsDate:= Finicio.Date;
qCaja.Params[1].AsDate:= Fhasta.Date;
la busqueda se realiza a la perfección trayendo los datos de la caja segun la fecha y me los muestra en el dbgrid por esta parte esta bien ahora lo que queria es segun esa fecha traerme el ultimo total para ello plantie el siguiente codigo


Código Delphi [-]
qCaja.Close;
qCaja.SQL.Clear;
qCaja.SQL.ADD('select * from caja');
qCaja.SQL.ADD('where fecha BETWEEN :Finicio AND :Fhasta');
qCaja.SQL.ADD('AND idcaja=(select max(idcaja) from caja')); // linea agregada
qCaja.SQL.ADD('AND monto_total = :total')); // linea agregada
Edit1.Text:= qCaja.ParambyName('total').AsInteger; //linea agregada
qCaja.Params[0].AsDate:= Finicio.Date;
qCaja.Params[1].AsDate:= Fhasta.Date;


bien aca pasa lo siguiente me tira un error de que mysql no me reconoce la consulta. Probé usando un nuevo query para esas 3 lineas agregadas y el resultado es el mismo alguna ayuda ?
aclaro que quiero traer el ultimo total segun esa fecha para mostrarlo en primer lugar y luego lo re utilizare en otra operacion mas adelante
desde ya muchas gracias

aposi 21-11-2016 22:41:48

creo que el error esta en que no cierras el parentesis del select.

valida el SQL
Código Delphi [-]
showmessage (qCaja.SQL.text)

jose001 21-11-2016 22:45:09

Cita:

Empezado por aposi (Mensaje 511084)
creo que el error esta en que no cierras el parentesis del select.

valida el SQL
Código Delphi [-]
showmessage (qCaja.SQL.text)

disculpa el codigo lo transcrebi a mano alsada por eso el error de escritura verifique el codigo y si tengo bien escrito todo en el delphi pero al ahora de ejecutar el boton me tira error

ecfisa 21-11-2016 22:55:46

Hola.

Si deseas traer de la tabla la última fila comprendida entre ambas fechas, en MySQL creo que sería:
Código SQL [-]
SELECT *
FROM CAJA
WHERE FECHA BETWEEN :FINICIO AND :FHASTA
ORDER BY FECHA DESC
LIMIT 1

Saludos :)

jose001 21-11-2016 23:22:33

Cita:

Empezado por ecfisa (Mensaje 511086)
Hola.

Si deseas traer de la tabla la última fila comprendida entre ambas fechas, en MySQL creo que sería:
Código SQL [-]
SELECT *
FROM CAJA
WHERE FECHA BETWEEN :FINICIO AND :FHASTA
ORDER BY FECHA DESC
LIMIT 1

Saludos :)

Hola estem mira el tema es que no quiero traer la ultima fila. Mas bien quiero mostrar todos los datos en el grid entre esa fecha y de todos esos datos seleccionar solo el campo total de la ultima fila y este mostrarlo en el edit por eso intente usarlo con un max(id) no se si queda clara mi duda

ecfisa 22-11-2016 03:57:38

Hola jose001.
Cita:

Empezado por jose001 (Mensaje 511087)
Hola estem mira el tema es que no quiero traer la ultima fila. Mas bien quiero mostrar todos los datos en el grid entre esa fecha y de todos esos datos seleccionar solo el campo total de la ultima fila y este mostrarlo en el edit por eso intente usarlo con un max(id) no se si queda clara mi duda

Yo me refería a lanzar una consulta adicional para obtener el valor de la columna TOTAL.

A ver si con un ejemplo me explico mejor...
Código Delphi [-]
...
// Función que devuelve el ultimo "TOTAL" comprendido entre dos fechas
function TtuForm.GetLastTotal( const d1, d2: TDate ): Currency;
begin
  qyTmp.Close;  
  qyTmp.SQL.Clear;
  qyTmp.SQL.Add( 'SELECT TOTAL FROM CAJA' );
  qyTmp.SQL.Add( 'WHERE FECHA BETWEEN :DESDE AND :HASTA' );
  qyTmp.SQL.Add( 'ORDER BY IDCAJA DESC LIMIT 1' );
  qyTmp.ParamByName( 'DESDE' ).AsDate := d1;
  qyTmp.ParamByName( 'HASTA' ).AsDate := d2;
  qyTmp.Open;
  Result := qyTmp.FieldByName( 'TOTAL' ).AsCurrency;
  qyTmp.Close;
end;

//...
// Lo que se muestra en el DBGrid:
begin
  qCaja.Close;
  qCaja.SQL.Clear;
  qCaja.SQL.Add( 'SELECT * FROM CAJA' );
  qCaja.SQL.Add( 'WHERE FECHA BETWEEN :DESDE AND :HASTA' );
  qCaja.SQL.Add( 'ORDER BY IDCAJA' );
  qCaja.ParamByName( 'DESDE' ).AsDate := Finicio.Date; 
  qCaja.ParamByName( 'HASTA' ).AsDate := Fhasta.Date;
  qCaja.Open;

  // Mostrar en el Edit el último "TOTAL" de la selección
  Edit1.Text := CurrToStr( GetLastTotal( Finicio.Date, Fhasta.Date ) );
end;

...
Claro está que en este caso existe la convención de usar el campo IDCAJA como órden.

Saludos :)

olbeup 22-11-2016 08:26:40

Cita:

Empezado por jose001 (Mensaje 511083)
Código Delphi [-]
qCaja.Close;
qCaja.SQL.Clear;
qCaja.SQL.ADD('select * from caja');
qCaja.SQL.ADD('where fecha BETWEEN :Finicio AND :Fhasta');
qCaja.SQL.ADD('AND idcaja=(select max(idcaja) from caja')); // linea agregada
qCaja.SQL.ADD('AND monto_total = :total')); // linea agregada
Edit1.Text:= qCaja.ParambyName('total').AsInteger; //linea agregada
qCaja.Params[0].AsDate:= Finicio.Date;
qCaja.Params[1].AsDate:= Fhasta.Date;


bien aca pasa lo siguiente me tira un error de que mysql no me reconoce la consulta.

Hola jose001,

Es posible que el error sea de programación, fijate en la línea de "Edit1"
Código Delphi [-]
Edit1.Text:= qCaja.ParambyName('total').AsInteger; //linea agregada
Cambiala por:
Código Delphi [-]
Edit1.Text:= qCaja.ParambyName('total').AsString;

Un saludo.


La franja horaria es GMT +2. Ahora son las 16:04:49.

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