Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como Mostrar registros de 3 tablas diferentes en una sola grilla? (https://www.clubdelphi.com/foros/showthread.php?t=75589)

negrokau 05-09-2011 01:46:32

como Mostrar registros de 3 tablas diferentes en una sola grilla?
 
hola, como puedo llamar a registros de 3 tablas diferentes en una misma grilla, por ejemplo dela tabla1 nro_factura, de la tabla2 nro_remision y de la tabla3 nro_compra en una misma columna de la grilla,con una sola tabla se hacerlo, pero de varias ya no lo se,podrian ayudarme? muchas gracias por su tiempo y espero que esta vez si este bien mi titulo descriptivo....

CrazySoft 05-09-2011 02:43:06

Mediante una consulta realizas una union
Código SQL [-]
select 'Factura' as tipo, nro_factura AS numero from facturas
union
select 'Remision' as tipo, nro_remision AS numero from remisiones
union
select 'Compras' as tipo, nro_compra AS numero from compras

oscarac 05-09-2011 03:36:06

pues... primero especifica que datos tienen esas tablas, como se relacionan entre si, tu titulo descriptivo si esta muy bien, pero te falto agregar un poco mas de informacion

Casimiro Noteví 05-09-2011 10:34:08

Tal y como dice oscarac, sí, muy bien el título descriptivo, gracias... aunque seguimos sin ser adivinos :D
Escribe la estructura de las tablas y los datos que quieres obtener, ejemplo:

Código SQL [-]
tabla clientes
id
nombre
telefono

tabla ventas
id
numero
total
cliente

tabla cobros
id
factura
importe

negrokau 05-09-2011 13:14:31

Código SQL [-]
//Tabla facturas
id=cod_facturas
nro_facturas
fecha
importe
//Tabla compras
id=cod_compras
nro_compra
fecha
importe
//Tabla remision
id=cod_remision
nro_remision
fecha
importe
Estas son las 3 tablas de donde necesito solamente nro_facturas, nro_compra y nro_remision, y que me muestre en una mismo columna de mi grilla, esta bien la informacion?

negrokau 05-09-2011 13:23:59

Cita:

Empezado por CrazySoft (Mensaje 410847)
Mediante una consulta realizas una union
Código SQL [-]
select 'Factura' as tipo, nro_factura AS numero from facturas
union
select 'Remision' as tipo, nro_remision AS numero from remisiones
union
select 'Compras' as tipo, nro_compra AS numero from compras

donde escribo esta union, en un query?

ecfisa 05-09-2011 13:26:47

Hola negrokau.

Como te han sugerido, cuanto más datos aportes, más fácil de encontrar una respuesta.
Pero a riesgo de interpretar mál la bola de cristal :p:)..., coincido con CrazySoft que una consulta sería una solución adecuada.

Poné un componente TQuery,TADOQuery,TIBQuery,... que voy a llamar query. (no especificás que componentes estás usando), un TDataSource asociado al query y el TDBGrid asocialo al DataSource:
Código Delphi [-]
  with query do
  begin
    Clear;
    SQL.Add('SELECT T1.NOMBRE, T2.DESCRIPCION, T3.MTODEUDA ');
    SQL.Add('FROM CLIENTES T1, ANUNCIOS T2, RECIBOS T3 ');
    //SQl.Add('WHERE ...');    ( SI FUERA NECESARIO )
    //SQL.Add('ORDER BY ...'); ( SI FUERA NECESARIO )
    Open;
  end;
Y tendrías que visualizar los tres campos en él DBGrid sin ningún problema.

Podrían haberte dado un código totalmente funcional si como dicen Casimiro y oscarac, hubieras sido más explícito con tu pregunta.;)

Un saludo.

negrokau 05-09-2011 13:29:52

uso ibquery, datasource y dbgrid

ecfisa 05-09-2011 13:39:20

Cita:

Empezado por negrokau (Mensaje 410882)
uso ibquery, datasource y dbgrid

Perfecto, entonces en el código que te puse, sólo cambia query por el nombre de tu TIBQuery.

Un saludo.

negrokau 05-09-2011 13:51:19

disculpa lo cabeza hueca que soy pero en que parte de mi formulario pongo esa consulta?
sabes, yo por ejemplo lo hice asi:
Código SQL [-]
select nro_facturas, nro_remision, nro_compra from facturas, remision, compras
lo puse en el sql del query, y me funciona perfecto, solo que me muestra en columnas separadas, lo que necesito es que me muestren en una misma columna

ecfisa 05-09-2011 14:10:15

Hola.

Los tres campos en una sola columna... bueno, podrías hacer:
Código Delphi [-]
  with IBQuery1 do
  begin
    SQL.Clear;
    SQL.Add('SELECT CAST(T1.NRO_FACTURA AS CHAR(10)) || '' '' || ');
    SQL.Add('CAST(T2.NRO_REMISION AS CHAR(10)) || '' '' || ');
    SQL.Add('CAST(T3.NRO_COMPRA AS CHAR(10)) AS TRES_CAMPOS_EN_UNA_COLUMNA');
    SQL.Add('FROM TABLA1 T1, TABLA2 T2, TABLA3 T3');
    ...
    Open;
  end;

¿ Ves cuanta razón tienen Casimiro y oscarac ? :D

Saludos.

negrokau 05-09-2011 14:16:22

gracias, los voy a probar, solo que donde lo hago? en el sql del query? en que parte del mi form? no lo estoy pudiendo descifrar

ecfisa 05-09-2011 14:18:38

Hola.

Podés ponerlo en tiempo de diseño en la propiedad SQL del TIBQuery, o asignarlo por código como te puse arriba, en el evento OnShow del form por ejemplo.

Saludos.

negrokau 05-09-2011 14:35:38

Que significa CAST? lo estoy probando pero no me sale, lo puse en el onshow pero nada no pasa, como lo pongo en el sql del query?

ecfisa 05-09-2011 14:43:47

Cita:

Empezado por negrokau (Mensaje 410890)
Que significa CAST?

En inglés tiene varias acepciones, pero la que más le vá en este caso es: molde .
Cita:

lo puse en el onshow pero nada no pasa, como lo pongo en el sql del query?
Si copias y pegas el código en el evento OnShow, tiene que funcionar (al menos si se dispara... :) ).

Para ponerlo en la propiedad SQL del IBQuery: Estando este seleccionado, Object Inspector -> SQL -> doble click -> escribir la consulta SQL.

Saludos

negrokau 05-09-2011 15:00:23

Lo hago tal cual esta en el ejemplo pero no muestra nada, solo muestra el titulo TRES_CAMPOS_EN_UNA_COLUMNA en la grilla, o no estoy entendiendo bien....

Casimiro Noteví 05-09-2011 15:04:57

¿Y cuándo vas a poner tu código fuente aquí?, es que seguimos sin ser adivinos y la bola de cristal está en el taller ;)

negrokau 05-09-2011 15:07:43

Código Delphi [-]
WITH Q_REPORTE2 DO
BEGIN
SQL.Clear;
SQL.Add('SELECT CAST(FACTURAS.COD_FACT AS CHAR(10)) || '' '' || ');
SQL.Add('CAST(REMISION.COD_REMI AS CHAR(10)) || '' '' || ');
SQL.Add('CAST(COMPRAS.COD_COMPRA AS CHAR(10)) AS TRES_CAMPOS_EN_UNA_COLUMNA');
SQL.Add('FROM FACTURAS, REMISION, COMPRAS');
Open;
END;
Este es mi codigo fuente

ecfisa 05-09-2011 15:17:23

Cita:

Empezado por Casimiro Notevi (Mensaje 410895)
¿Y cuándo vas a poner tu código fuente aquí?, es que seguimos sin ser adivinos y la bola de cristal está en el taller ;)

Q_REPORTE2 ...

Lo afirmo y lo publico: ¡¡¡ Cuanta razón tiene mi amigo Casimiro !!! :D


Saludos. :)

negrokau 05-09-2011 15:20:17

bueno, a que le llaman codigo fuente?

oscarac 05-09-2011 15:41:27

negrokau

codigo fuente es.... por decirlo de alguna manera
las instrucciones que estan coleccionadas en una unidad,
dicho de otra manera....
cuando abres un archivo .pas, las instrucciones que estan contenidas en el, se llaman codigo fuente

estoy empezando a sospechar que quieres aprender pero estas saltandote pasos muy importantes.. para correr hay que caminar y para caminar hay que gatear

negrokau 05-09-2011 15:57:06

denme alguna pista, no entiendo mucho lo que me piden, ayudenme por favor, estoy aprendiendo y me cuesta mucho, no soy auto didacta, por eso es que estoy asi, pero procuro de que me salga bien.... comprendanme...:(

oscarac 05-09-2011 16:01:42

Cita:

Empezado por negrokau (Mensaje 410908)
denme alguna pista, no entiendo mucho lo que me piden, ayudenme por favor, estoy aprendiendo y me cuesta mucho, no soy auto didacta, por eso es que estoy asi, pero procuro de que me salga bien.... comprendanme...:(

querras decir que SI eres autodidatca... yo tambien lo soy.. nadie me ha enseñado Delphi, lo que he aprendido, lo hice con mucho esfuerzo, horas de practica, muchas metidas de pata y tropezones....

te recomiendo lo siguiente....

has como el psicopata descuartizador..... vamos por partes

trata de separar tus prioridades de acuerdo a tus necesidades, y enfocate en ellas, practica mucho, lee mucho y para los autodidactas todo se refleja en prueba y error

cuando hagas preguntas trata de ser lo mas explicito posible y es mejor si colocas estructuras de las tablas y la informacion que tienen, asi como un ejemplo de como quieres que salga
se sabe que la curva de aprendizaje es algo complicada pero no es dificil

saludos y que la fuerza te acompañe

negrokau 05-09-2011 16:30:51

Gracias por las sugerencias, voy a seguir intentandolo y esforzandome,
Código SQL [-]
Tabla Compras
ID=COD_COMPRA
NRO_BOLETA
PROVEEDOR
FECHA
PRODUCTO
CANTIDAD
IMPORTE
TIPO_COMPRA
Tabla Facturas
id=COD_FACT
FECHA
TOTAL
RUC
NOMBRE
Tabla Remision
id=COD_REMI
FECHA
TOTAL
NOMBRE
Este fue mi consulta
Código SQL [-]
WITH Q_REPORTE2 DO
BEGIN
SQL.Clear;
SQL.Add('SELECT CAST(FACTURAS.COD_FACT AS CHAR(10)) || '' '' || ');
SQL.Add('CAST(REMISION.COD_REMI AS CHAR(10)) || '' '' || ');
SQL.Add('CAST(COMPRAS.NRO_BOLETA AS CHAR(10)) AS TRES_CAMPOS_EN_UNA_COLUMNA');
SQL.Add('FROM FACTURAS, REMISION, COMPRAS');
Open;
END;
ya saben que quiero mostrar en una sola columna los registros de cod_fact de la tabla FACTURAS, COD_REMI de la tabla REMISION y NRO_BOLETA de la tabla COMPRAS.
Mi query se llama Q_REPORTE2, uso data source y DBgrid, no se mas que datos necesitan para ayudarme :o ojala haya sido suficiente...

oscarac 05-09-2011 16:32:41

estas tablas se relacionan entre si? o son independientes?

negrokau 05-09-2011 16:34:57

son independientes, no se tienen relacion alguna entre si...

oscarac 05-09-2011 16:36:08

entonces la respuesta esta en el post #2
con eso lo haces

oscarac 05-09-2011 16:40:07

pero en forma particular (quiza tu tengas otros motivos), resulta algo inapropiado tratar de unir 3 tablas en una cuando los datos podrian ser cualquier cosa

debes tener un criterio para la union (digamos que esas tablas tengan miles de registros), entonces el resultado que esperas obtener quiza no sea al deseado), por eso te digo que debe existir un nexo entre ellas, para solo extraer los datos requeridos

oscarac 05-09-2011 16:42:06

Código SQL [-]
 
select 'Factura' as tipo, nro_factura AS numero from facturas where..... condicion
union
select 'Remision' as tipo, nro_remision AS numero from remisiones where..... condicion
union
select 'Compras' as tipo, nro_compra AS numero from compras where..... condicion

negrokau 05-09-2011 16:55:52

el motivo es que es para un reporte diario, donde mi condición es la FECHA, al poner la fecha, me estire todas las facturas(cod_fac), remisiones(cod_remi) y compras(nro_boleta), en una grilla realizadas en ese dia, esa es mi idea, un simple reporte, solo que implica los datos de 3 tablas diferentes... me explico?

ecfisa 05-09-2011 16:59:41

Hola.

Te adjunto un demo que contiene la consulta en la propiedad SQL del IBQuery y también por código en el evento OnShow del form, quizá verlo te sirva de ayuda.

Para la misma uso las tablas customer, employee y vendors de mastsql.gdb, que en Delphi 7 está ubicado en:
Cita:

C:\Program Files\Common Files\Borland Shared\Data\mastsql.gdb
(Dejé el login prompt activado para evitar discrepancias en la contraseña)

Un saludo.

oscarac 05-09-2011 17:06:16

Cita:

Empezado por negrokau (Mensaje 410922)
el motivo es que es para un reporte diario, donde mi condición es la FECHA, al poner la fecha, me estire todas las facturas(cod_fac), remisiones(cod_remi) y compras(nro_boleta), en una grilla realizadas en ese dia, esa es mi idea, un simple reporte, solo que implica los datos de 3 tablas diferentes... me explico?

ves?
ya estas colocando una condicion que no especificaste desde el principio y que en el query que tu hiciste tampoco esta

fijate en el ejemplo de ecfisa y comentas

negrokau 05-09-2011 17:48:38

ya estuve mirando, probe y me funciona, solo que los 3 registro muestra en la misma columna y en la misma fila, lo que quiero es que me muestre en la misma columna que hace eso pero uno bajo otro(por separado), y no en la misma fila...

oscarac 05-09-2011 17:49:52

Cita:

Empezado por negrokau (Mensaje 410935)
ya estuve mirando, probe y me funciona, solo que los 3 registro muestra en la misma columna y en la misma fila, lo que quiero es que me muestre en la misma columna que hace eso pero uno bajo otro(por separado), y no en la misma fila...

como???? disculpa no entendi...
puedes colocar un ejemplo de como te esta saliendo?

negrokau 05-09-2011 18:10:30

algo asi quiero que salga....

oscarac 06-09-2011 15:27:41

asi con repetidos?

entonces usa la consuilta que te puse anteriormente

Código Delphi [-]
 
select 'Factura' as tipo, nro_factura AS numero from facturas where Fecha = :Fecha
union
select 'Remision' as tipo, nro_remision AS numero from remisiones where Fecha = :Fecha
union
select 'Compras' as tipo, nro_compra AS numero from compras where Fecha = :Fecha


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

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