Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-03-2007
robertillo robertillo is offline
Miembro
 
Registrado: may 2006
Posts: 13
Poder: 0
robertillo Va por buen camino
Question sacar filas y columnas desde base de datos (Profgrid)

hola.
Me estado rompiendo la cabeza para pintar los datos de una tabla en un profgrid. Basicamente lo que quiero hacer es sacar la información de un autobus (id, placa, fecha) y los montos diarios que recaudan
quedando los datos asi:
id placa1--id placa2--id placa3
Fecha
xxx monto1 monto2 monto3
xxx monto1 monto2 monto3
xxx monto1 monto2 monto3

ya la información me la saca pero solo del ultimo día, asi que ocuparía (creo yo) comparar cada fila con la info del SQL para poder pintar en cada fila la información del dia correspondiente hasta la 30, pero no me da la cabeza en este momento. Alguien me puede ayudar, ah, utilizo: TQUERY y el componente Profgrid.

Este el procedimiento que pongo en el botón:
Código Delphi [-]
 
procedure TfrmPruebaProfGrid.Button1Click(Sender: TObject);
var i,f: integer;
begin
pgDatos.RowCount:= Round(Fecha2.Date-Fecha1.Date)+2;
for f:= 0 to Round(Fecha2.Date-Fecha1.Date) do
begin
Fecha1.Time:= strtoTime('00:00:00');
Query1.ParamByName('FechaInicio').AsDateTime:= Fecha1.DateTime;
Fecha1.Time:= strtoTime('23:59:59');
Query1.ParamByName('FechaFinal').AsDateTime:= Fecha1.DateTime;
Query1.Open;
if not(Query1.IsEmpty) then
begin
if pgDatos.ColCount < Query1.RecordCount+1 then
pgDatos.ColCount:= Query1.RecordCount+1;
pgDatos.Cells[0,f+1].Value:= Query1.FieldByName('fecha').AsString;
for i:= 0 to Query1.RecordCount-1 do
begin
pgDatos.Cells[i+1,0].Value:= Query1.FieldByName('cod_vehiculo').AsString+' '+Query1.FieldByName('placa').AsString;
pgDatos.Cells[i+1,f+1].Value:= Query1.FieldByName('recaudacion').AsString;
Query1.Next;
end;
end
else
ShowMessage('La consulta no devolvio datos!!!! ...');
Query1.Close;
Fecha1.Date:= Fecha1.Date+1;
end;
end;

Última edición por marcoszorrilla fecha: 09-04-2007 a las 22:12:20.
Responder Con Cita
  #2  
Antiguo 01-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Por favor, lee la guía de estilo de los foros, tienes el enlace arriba.

- No dices qué Base de datos usas.
- No indicas la SQL que usas ni lo que quieres obtener.
- ¿Cual es el problema o el error que da?

PD: usa las etiquetas delphi para mostrar el código, así es muy dificil seguirlo y pocos foristas leeran tu código por no estar bien presentado.

[ delphi ]
tu codigo fuente aqui
[ / delphi ]

sin espacios dentro de los corchetes.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 09-04-2007
robertillo robertillo is offline
Miembro
 
Registrado: may 2006
Posts: 13
Poder: 0
robertillo Va por buen camino
Muchas gracias por la respuesta Lepe, tenés toda la razón, indico como lo estoy trabajando con las sugerencias tuyas:

-utilizo INTERBASE como motor de BD
-El error es que me saca solo los datos de la última fecha y no día por día (esto es básicamente lo que quiero sacar)

-La SQL que utilizo es:
Código SQL [-]
 
select extract(month from CURRENT_DATE) as mes, hr.fecha,r.cod_ruta, v.placa, v.cod_vehiculo, sum(hr.monto) as recaudacion
from ruta r, vehiculo v, historico_recaudacion hr
where
(hr.id_ruta = r.id_ruta) and
(hr.id_vehiculo = v.id_vehiculo) and
(r.cod_ruta) = 'A- SANTA ROSA' and
(hr.fecha_hora_inicio >= :FechaInicio) and
(hr.fecha_hora_fin <= :FechaFinal)
group by v.cod_vehiculo,hr.fecha,r.cod_ruta, v.placa
order by v.cod_vehiculo,hr.fecha,r.cod_ruta, v.placa
-el còdigo que pongo en el botón es:
Código Delphi [-]
procedure TfrmPruebaProfGrid.Button1Click(Sender: TObject);
var i,f: integer;
begin
pgDatos.RowCount:= Round(Fecha2.Date-Fecha1.Date)+2;
for f:= 0 to Round(Fecha2.Date-Fecha1.Date) do
begin
Fecha1.Time:= strtoTime('00:00:00');
Query1.ParamByName('FechaInicio').AsDateTime:= Fecha1.DateTime;
Fecha1.Time:= strtoTime('23:59:59');
Query1.ParamByName('FechaFinal').AsDateTime:= Fecha1.DateTime;
Query1.Open;
if not(Query1.IsEmpty) then
begin
if pgDatos.ColCount < Query1.RecordCount+1 then
pgDatos.ColCount:= Query1.RecordCount+1;
pgDatos.Cells[0,f+1].Value:= Query1.FieldByName('fecha').AsString;
for i:= 0 to Query1.RecordCount-1 do
begin
pgDatos.Cells[i+1,0].Value:= Query1.FieldByName('cod_vehiculo').AsString+' '+Query1.FieldByName('placa').AsString;
pgDatos.Cells[i+1,f+1].Value:= Query1.FieldByName('recaudacion').AsString;
Query1.Next;
end;
end
else
ShowMessage('La consulta no devolvio datos!!!! ...');
Query1.Close;
Fecha1.Date:= Fecha1.Date+1;
end;
end;

Última edición por marcoszorrilla fecha: 09-04-2007 a las 22:13:22.
Responder Con Cita
  #4  
Antiguo 09-04-2007
robertillo robertillo is offline
Miembro
 
Registrado: may 2006
Posts: 13
Poder: 0
robertillo Va por buen camino
Question sacar filas y columnas desde base de datos (Profgrid)

Hola, a consideración de Lepe pongo de nuevo este hilo para ver quièn me puede ayudar.

-utilizo INTERBASE como motor de BD
-utilizo un componente profGrid
-El error es que me saca solo los datos de la última fecha y no día por día (esto es básicamente lo que quiero sacar), si me presenta los dias del 1 al 30 pero con los datos del ultimo día.

-La SQL que utilizo es:
Código SQL [-]
select extract(month from CURRENT_DATE) as mes, hr.fecha,r.cod_ruta, v.placa, v.cod_vehiculo, sum(hr.monto) as recaudacion
from ruta r, vehiculo v, historico_recaudacion hr
where
(hr.id_ruta = r.id_ruta) and
(hr.id_vehiculo = v.id_vehiculo) and
(r.cod_ruta) = 'A- SANTA ROSA' and
(hr.fecha_hora_inicio >= :FechaInicio) and
(hr.fecha_hora_fin <= :FechaFinal)
group by v.cod_vehiculo,hr.fecha,r.cod_ruta, v.placa
order by v.cod_vehiculo,hr.fecha,r.cod_ruta, v.placa


-el código que pongo en el botón es:
Código Delphi [-]
procedure TfrmPruebaProfGrid.Button1Click(Sender: TObject);
var i,f: integer;
begin
pgDatos.RowCount:= Round(Fecha2.Date-Fecha1.Date)+2;
for f:= 0 to Round(Fecha2.Date-Fecha1.Date) do
begin
Fecha1.Time:= strtoTime('00:00:00');
Query1.ParamByName('FechaInicio').AsDateTime:= Fecha1.DateTime;
Fecha1.Time:= strtoTime('23:59:59');
Query1.ParamByName('FechaFinal').AsDateTime:= Fecha1.DateTime;
Query1.Open;
if not(Query1.IsEmpty) then
begin
if pgDatos.ColCount < Query1.RecordCount+1 then
pgDatos.ColCount:= Query1.RecordCount+1;
pgDatos.Cells[0,f+1].Value:= Query1.FieldByName('fecha').AsString;
for i:= 0 to Query1.RecordCount-1 do
begin
pgDatos.Cells[i+1,0].Value:= Query1.FieldByName('cod_vehiculo').AsString+' '+Query1.FieldByName('placa').AsString;
pgDatos.Cells[i+1,f+1].Value:= Query1.FieldByName('recaudacion').AsString;
Query1.Next;
end;
end
else
ShowMessage('La consulta no devolvio datos!!!! ...');
Query1.Close;
Fecha1.Date:= Fecha1.Date+1;
end;
end;

A ver si se entiende...
Responder Con Cita
  #5  
Antiguo 09-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
RecordCount que yo sepa, solo funciona en Bases como paradox, en Interbase no devuelve el valor correcto (por temas de eficiencias).

el bucle:
Código Delphi [-]
for i:= 0 to Query1.RecordCount-1 do

Puede ser sustituido perfectamente por:
Código Delphi [-]
 
query1.Open;
while not query1.eof do
....

end;

Creo que por ahí viene el error, si no es eso, tendrías que añadir en la cláusula "group by mes"... (de esto último no estoy seguro, solo lo intuyo, prueba antes lo del bucle).

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 09-04-2007
robertillo robertillo is offline
Miembro
 
Registrado: may 2006
Posts: 13
Poder: 0
robertillo Va por buen camino
gracias Lepe por tu respuesta y perdona tanta idiotez que hice con tanto mensaje duplicado...perdón

ya probe con el bucle pero me da un error de "gridindex out of range" o algo asi.

Asumo que hay que hacer puros IF para validar cada fila de acuerdo a los datos que se van sacanndo de la base de datos (comparar filas contra info de BD), pero no se como hacerlo, o sea, serían 30 (días del mes) clausulas IF o me estaré volviendo loco?

Saludos.
Responder Con Cita
  #7  
Antiguo 09-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Pues no sé bien.

Creo que quieres hacer esto:
Código:
      id placa1		id placa2	id placa3
Fecha1 monto1 		monto2 		 monto3
Fecha2 monto1 		monto2 		 monto3
Fecha3 monto1 		monto2 		 monto3
No hace falta "if" de ninguna clase.

Primero, no te guíes de lo que hay en la base de datos para pintar las fechas, Haz una rutina que modifique el Grid y añada tantas filas como días tenga el mes en curso (que puede ser 28 o 29 para febrero, y 30 y 31 para el resto de meses).

para situar un registro en la fila que le corresponde, usa la función DayOf(date:TDatetime) para saber el día, que lo usarás como fila (ya que la fila cero será la fila de los títulos del Grid).

Pide la consulta ordenada por "placa" que supongo será la matrícula del autobús, y entonces puedes guiarte para rellenar toda la columna de datos.

Saludos y espero que sea lo que necesitas.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 09-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por robertillo
ya probe con el bucle pero me da un error de "gridindex out of range" o algo asi.
Eso significa que el grid tiene 4 columnas (o filas) y tú intentas escribir en la 5
Usa ColCount y/o RowCount para que no ocurra.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 10-04-2007
robertillo robertillo is offline
Miembro
 
Registrado: may 2006
Posts: 13
Poder: 0
robertillo Va por buen camino
Gracias Lepe, te agradezco mucho, me sirvio de mucho tu ayuda, ya me carga el grid bien y los datos de cada dia estan bien.

Ahora nada mas presento eso con un boton que genera un reporte y listo.

GRACIAS.
Responder Con Cita
Respuesta



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
Añadir datos desde una base de datos a un TListBox proyecto Conexión con bases de datos 1 21-11-2006 07:01:19
Filas a columnas nightynvid MS SQL Server 0 31-05-2006 16:22:44
total de filas y columnas bataola Servers 2 01-06-2005 21:13:22
de donde sacar Base de datos de provincias poblaciones y CP? Halfo Varios 1 23-07-2004 15:49:15


La franja horaria es GMT +2. Ahora son las 22:06:56.


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