Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-11-2008
dinover7 dinover7 is offline
Registrado
 
Registrado: may 2007
Posts: 4
Poder: 0
dinover7 Va por buen camino
Subconsulta dentro de un QuickReport.. Utilizo tablas Paradox..Ayudaaaa Please...

Tengo un problemon...

tengo 2 tablas paradox.. Empleados y Inasistencias...


cuando tiro un reporte quickreport.. muestro los datos de los empleados, y tengo que revisar en la base de datos de inasistencias, cuantas veces falto esee empleado , en un periodo de tiempo entre 2 fechas...

esa subconsulta.. la hago en el evento.. OnStartPage, del quick report.. aveces funciona bien..otras veces.. se tilda.. se me cierra la aplicacion porque dice que tengo demasiadas tablas abiertas...

CUAL ES LA FORMA CORRECTA DE HACERLO...

PEGO EL CODIGO:


este es el codigo de cuando se carga el quickreport:


DBSearch.DatabaseName := 'dbs\';
DBSearch.SQL.Clear;
DBSearch.SQL.Add('SELECT * FROM EMPLEADO.DB WHERE COOPERATIVA LIKE '+quotedstr('%'+wndmain.cbCooperativa.text+'%')+ ' AND TRABAJO_ASIGNADO LIKE '+quotedstr('%'+wndmain.cbPuestoTrabajo.Text+'%')+ ' AND HABILITADO LIKE '+quotedstr('%SI%'));
DBSearch.SQL.Add(' ORDER BY APELLIDO') ;
DBSearch.ExecSQL ;

quickrep1.DataSet := dbSearch;

dbsearch.Active := true;



Este es el codigo que tengo en el evento OnStarPage: del quickrepott:



Monto_Inasistencia := 0;

dbInasistencias.DatabaseName := 'dbs\';
dbinasistencias.Active:=false;
dbInasistencias.SQL.Clear;
dbInasistencias.SQL.Add('SELECT * FROM '+ 'INA2008.db' + ' WHERE DNI= NI AND FECHA >= :fecha1 AND FECHA<= :fecha2' );


dbInasistencias.Params.ParamByName('DNI').AsInteger := dbsearch.FieldValues['DNI'];
dbInasistencias.Params.ParamByName('fecha1').AsDate:= wndmain.pImpresionFrom;
dbInasistencias.Params.ParamByName('fecha2').AsDate:= wndmain.pImpresionTo;

dbInasistencias.ExecSQL;
dbInasistencias.Open;


while not dbInasistencias.Eof do
begin

// repita y almacena el monto de descuento
monto_Inasistencia := monto_Inasistencia + dbInasistencias.FieldValues ['MONTO'];


dbInasistencias.Next;

end;


dbInasistencias.Active:=true;



BUENO, AGRADECERE MUCHISIMO SI ALGUIEN ME DA UNA MANO...


ya no se que tocar...

gracias.

si alguno tiene un email para el msn, mejor.. mil gracias !!!
leandro
Responder Con Cita
  #2  
Antiguo 21-11-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No se lo que haces, pero hay varias contradicciones.
Creo que esta mejor asi:
Código Delphi [-]
DBSearch.DatabaseName := 'dbs\';
DBSearch.SQL.Clear;
DBSearch.SQL.Add('SELECT * FROM EMPLEADO.DB WHERE COOPERATIVA LIKE '+quotedstr('%'+wndmain.cbCooperativa.text+'%')+ ' AND TRABAJO_ASIGNADO LIKE '+quotedstr('%'+wndmain.cbPuestoTrabajo.Text+'%')+ ' AND HABILITADO LIKE '+quotedstr('%SI%'));
DBSearch.SQL.Add(' ORDER BY APELLIDO') ;
quickrep1.DataSet := DBSearch;
dbsearch.Active := true;

Código Delphi [-]
Monto_Inasistencia := 0;
dbInasistencias.DatabaseName := 'dbs\';
dbInasistencias.SQL.Clear;
dbInasistencias.SQL.Add('SELECT * FROM '+ 'INA2008.db' + ' WHERE DNI= NI AND FECHA >= :fecha1 AND FECHA<= :fecha2' );
dbInasistencias.Params.ParamByName('DNI').AsInteger := dbsearch.FieldValues['DNI'];
dbInasistencias.Params.ParamByName('fecha1').AsDate:= wndmain.pImpresionFrom;
dbInasistencias.Params.ParamByName('fecha2').AsDate:= wndmain.pImpresionTo;

while not dbInasistencias.Eof do
begin
// repita y almacena el monto de descuento
monto_Inasistencia := monto_Inasistencia + dbInasistencias.FieldValues ['MONTO'];
dbInasistencias.Next;
end;
dbInasistencias.Active:=true;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 21-11-2008
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 17
Galahad Va por buen camino
subconsulta dentro de un quickreport

a ver si te puedo ayudar...
la sentencia sql secundaria la deberias de poner junto a la otra, con la carga inicial del quickreport, con un cámbio que implique la consulta que necesitas


en lugar de
dbInasistencias.SQL.Add('SELECT * FROM '+ 'INA2008.db' + ' WHERE DNI= NI AND FECHA >= :fecha1 AND FECHA<= :fecha2' );
podrías poner
dbInasistencias.SQL.Add('SELECT DNI,SUM( MONTO) AS NTOTAL FROM '+ 'INA2008.db' + ' WHERE FECHA >= :fecha1 AND FECHA<= :fecha2' );

después, podrías crear una relación 'master-detail' entre las dos consultas con la propiedas 'mastersource', relacionandolas por la columna DNI.
Por último, ya podrías en el quickreport hacer referencia a los datos de esas faltas utilizando un componente TQREXPR, en el evento Onprint puedes poner : 'value := dbinasistencias.fieldbyname('ntotal').value

Espero te sirva...
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como utilizo el QuickReport de Delphi7 Elite237 Impresión 7 29-07-2007 00:27:37
Ayudaaaa aoiTo C++ Builder 4 12-01-2006 18:09:25
Tablas y QuickReport coleleon Impresión 0 01-12-2005 11:39:23
Paradox - Fecha actual dentro de un select fjolivares Tablas planas 2 20-05-2005 17:12:56
QuickReport con 2 tablas olybola Impresión 1 29-05-2003 08:56:47


La franja horaria es GMT +2. Ahora son las 02:16:31.


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
Copyright 1996-2007 Club Delphi