|
Página 1 de 1
|
Mostrar Datos De Diferentes Tablas En Un Tableview
Autor |
Mensaje |
pittusa
Técnico Programador
Registrado: Marzo 2010
Mensajes: 157
Edad: 53 Ubicación: Barcelona
|
Mostrar Datos De Diferentes Tablas En Un Tableview
Hola.
Tengo que mostrar diferentes tablas en un tableview para luego imprimirlos.
Lo estoy haciendo con el evento data con algo como esto:
esto me muestra los datos de la tabla que hay en la consulta result, pero tengo que cambiar de tabla con
un for next y seguir imprimiendo en el mismo table los datos de la siguiente tabla.
La consulta a la tabla se realiza mediante un combobox que contiene las tablas de la base.
Recorro el combo con un for nex regogiendo los datos con su index y pasandoselos a la consulta.
Result.hcon.Exec("Select " & ql2 & " from " & combobox.text & "") ' sql contiene los campos a imprimir que los selecionas de una lista
el problema es que al cambiar la consulta y rellenar el tableview me machaca los datos de la anterior tabla.
Voi incrementando el numero de rows a medida que realizo las consultas.
TableView1.Rows.Count = TableView1.Rows.Count +result.Count + 1 ' pongo +1 por que quiero una separación entre los datos de las tablas
que debo poner en el evento data para que me siga escribiendo despues del ultimo row?
poniendo result.movenext en el evento data me dibuja los rows pero sin datos
El código entero:
Public Sub MostrarDatos_Click()
Dim i As Integer
Dim ql2 As String
Dim campo As Integer
Dim c As Integer
TableView1.clear
TableView1.Header = 1
TableView1.Columns.Count = Lista2.count
TableView1.Rows.Count = 0
For i = 0 To lista2.Count - 1
Lista2.index = i
If i > 0 Then
ql2 = ql2 & ", " & Lista2.Text
Else
ql2 = ql2 & Lista2.Text
End If
TableView1.columns[i].Title = lista2.text
TableView1.Columns[i].width = Campos(campo) ' esto coje de una funcion los valores de la anchura de los campos
Next ' i
For c = 1 To combotabla.count
combotabla.Index = c
ini.v = ini.hcon.Exec("Select " & ql2 & " from " & combotabla.text & "")
TableView1.Rows.Count = TableView1.Rows.Count + ini.v.Count + 1
Next ' c
frame1.enabled = True
TableView1.show
End
gracias.
|
#1 Sabado, 14 May 2011, 19:06 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Mostrar Datos De Diferentes Tablas En Un Tableview
no entiendo bien ¿quieres mostrar datos de dos tablas en un tableview? ¿Cual es el problema? Tu ya sabes hacer una consulta y rellenar con ella el tableview ¿Por qué no haces una consulta que saque datos de dos tablas y rellenas con ella un tableview?
SELECT A.nombre, A.cif, B.factura, B.fecha, B.Importe, B.Iva, B.Total
FROM clientes A INNER JOIN facturas B
ON A.cif=B.codigocliente
ORDER BY A.nombre
Esto coge la tabla clientes y la tabla facturas. Aquellos clientes que no tengan factura se deshechan. Los que tengan factura se muestra un registro donde aparecen datos del cliente y datos de su factura. Para saber que factura corresponde a cada cliente se le dice que el cif en la tabla clientes corresponde al código de cliente en la tabla de facturas.
Solo hay que llenar el tableview con ese código.
Hay muchas mas opciones para hacer consultas que cogen datos de varias tablas. Por ejemplo quizá quisieras que salieran todos los clientes aunque no tengan facturas o que salieran todas las facturas aunque no tengan clientes, ..., etc ese es un pequeño mundo. Hubo un tiempo en que yo trabajaba en datawarehouse y había querys que tenían miles de lineas mezclando tablas de nombres imposibles con centenares de campos y había que encontrar un puto error en alguna parte. Una pesadilla vamos. Generalmente se acababa antes sacando la estructura y buscando un error lógico o haciéndola de nuevo que recorriendo campo a campo. Un coñazo donde los haya.
|
#2 Sabado, 14 May 2011, 20:09 |
|
|
pittusa
Técnico Programador
Registrado: Marzo 2010
Mensajes: 157
Edad: 53 Ubicación: Barcelona
|
Re: Mostrar Datos De Diferentes Tablas En Un Tableview
Hola Soplo.
Que bien! que fácil.
Haber.. tengo una base de datos con 120 tablas de Articulos. Cada Articulo es una tabla y todas
tienen exactamente los mismos campos, (Detalle, Ref, Precio_venta, Precio_Compra, Stock y Proveedor)
Lo que quiero es un listado de todos los productos y sus campos completo.(Mostrar todo)
Lo vamos a poner mas fácil.. Como harías tu, la consulta en gambas con sqlite de solo tres Artículos?
Por ejemplo: Slect Detalle, Ref, Preci_venta, Precio_Compra, Stock, Proveedor from Disolventes, Lacas, Resinas
Como lo hago? por que ya estoy harto de probar con inner join y no hay manera.
La base de datos ya estaba echa en sqlite, el problema es que cuando quieren imprimir los artículos,
tienen que ir imprimiendo tabla por tabla.
Gracias por todo.
última edición por pittusa el Domingo, 15 May 2011, 00:06; editado 1 vez
|
#3 Domingo, 15 May 2011, 00:02 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Mostrar Datos De Diferentes Tablas En Un Tableview
Hola Soplo.
tengo una base de datos con 120 tablas de Articulos. Cada Articulo es una tabla y todas
tienen exactamente los mismos campos, (Detalle, Ref, Precio_venta, Precio_Compra, Stock y Proveedor)
Eso es lo que se llama un mal diseño de la base de datos. Para mí eso está mal.
Lo normal sería tener una tabla de artículos (con los campos ID, Artículo) y otra de Propiedades (ID, Detalle, Ref, Precio_venta, Precio_Compra, Stock y Proveedor) y relacionarlas entre sí por el ID del artículo. Entonces lo que dice soplo te funcionará perfectamente.
Incluso se podría hacer en una sola tabla... no sé, depende de tus necesidades, pero nunca una tabla por cada artículo ¡es de locos!
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#4 Domingo, 15 May 2011, 00:38 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Mostrar Datos De Diferentes Tablas En Un Tableview
Escucha lo que te dice Jguardon que como de constumbre tiene mucha razón.
Cuando diseñas una base de datos tienes que pensar bien como organizarla para que el acceso a la información sea eficiente. El diseño de bases de datos es una cuestión de analistas pero en tu caso podemos prescindir de todos esos conceptos genericos e ir al grano.
Por cada cosa (entidad) tienes que tener una tabla y solo una. Cada registro de esa tabla con una clave única que permita identificar ese registro de forma inequívoca.
Eso significa que si tu quieres hacer una gestión de compras y ventas para empezar necesitas clientes, proveedores, facturas de compra y facturas de venta. Ahora deberías analizar si puedes meter a los clientes y proveedores en la misma tabla y poner un campo que identifique si es cliente o proveedor. Puedes hacer lo mismo con las facturas, quizá necesites una tabla de facturas de ventas y otra de factura de compras o quizá te puedas apañar con la misma poniendo un campo que identifique compras y ventas. Mi consejo en ese caso sería tener clientes y proveedores en tablas diferentes y facturas de compra y venta en tablas diferentes también.
Ahora piensas que campos necesitas guardar de un cliente. Esos campos te definen al cliente, pero necesitas un campo que será un código de cliente y no será repetido. Lo mismo para los proveedores.
Ahora piensas las facturas de ventas. En una factura hay unos datos generales (datos de cliente, fecha, numero de factura, importes totales, impuestos) Eso es lo que va en la tabla de facturas y su código único que identifica cada factura. Los datos de clientes no los repites, solo metes el código del cliente. Con ese código ya puedes identificar cualquier dato de cliente que necesites haciendo una consulta como te mostré antes.
Pero en las facturas hay otra cosa mas. Hay unas líneas de detalle. Esas líneas son otra entidad. No son la factura, son una característica de la factura (igual que lo es el cliente). como es una entidad diferente necesitas una tabla de lineas de factura. Cada ergistro con concepto, precio unitario, cantidad, importe y el código de la factura a la que corresponde. Como siempre en cada entidad creas un campo de código único para cada línea de detalle.
De esa manera cuando quieres sacar por ejemplo un listado de facturas haces
SELECT C.*, F.* FROM clientes C INNER JOIN facturas F
ON C.codigo=F.codigocliente
WHERE ...
ORDER BY ...
Y con eso tienes toda la información general de la factura excepto las lineas de detalle. Si quieres también las lineas de detalle haces
SELECT C.*, F.*, L.* FROM clientes C INNER JOIN facturas F
ON C.codigo=F.codigocliente
LEFT JOIN LineasFactura L
ON F.codigo=L.CodigoFactura
WHERE ...
ORDER BY ...
Es decir ahora conectas tres tablas y tienes una única consulta que tiene toda la información que necesitas.
Nota, el * significa que "todos los campos"
|
#5 Domingo, 15 May 2011, 02:56 |
|
|
codificador
Analista Programador
Registrado: Junio 2010
Mensajes: 420
Edad: 114 Ubicación:
|
Re: Mostrar Datos De Diferentes Tablas En Un Tableview
creo que entendí
el problema no parece ser de sql o de diseño de la base
Result.hcon.Exec("Select " & ql2 & " from " & combobox.text & "") ' sql contiene los campos a imprimir que los selecionas de una lista
tiene 3 tablas iguales y quiere hacer varias consultas y que estas se añadan al mismo tableview
por el diseño de su database el inner join no sirve
y no a probado quitar el
o moverla a otro boton de modo que cada vez que presione el boton no limpie la tableview cada vez que presiona MostrarDatos
de todos modos el boton MostrarDatos tiene mucho codigo de inicializacion del table que resetea el tableview cada vez que presiona MostrarDatos
creo que debera reescibirlo para que funcione correctamente
|
#6 Domingo, 15 May 2011, 07:55 |
|
|
pittusa
Técnico Programador
Registrado: Marzo 2010
Mensajes: 157
Edad: 53 Ubicación: Barcelona
|
Re: Mostrar Datos De Diferentes Tablas En Un Tableview
Me lo imaginaba.
Cualquiera hace otra base de datos con todos los artículos.
Intentare arreglarlo como pueda.
Gracias por todo.
|
#7 Domingo, 15 May 2011, 10:23 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Mostrar Datos De Diferentes Tablas En Un Tableview
Me lo imaginaba.
Cualquiera hace otra base de datos con todos los artículos.
Intentare arreglarlo como pueda.
Gracias por todo.
Te conviene mucho rediseñar la base de datos. Sólo son 120 artículos, según explicaste, así que en un rato lo tienes.
Por cierto, si no lo conocéis, yo estoy usando para sqlite un plugin de Firefox que se llama SQLite Manager y va muy bien, se integra perfectamente y sólo son 230Kb:
https://addons.mozilla.org/es-ES/firefox/addon/sqlite-manager/
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#8 Domingo, 15 May 2011, 11:30 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Mostrar Datos De Diferentes Tablas En Un Tableview
Yo lo que haría es crear una tabla nueva copia de las otras.
Luego haces un pequeño programita que abra las 120 tablas una a una lea todo y lo copie a la tabla nueva. No le llevará ni un segundo. Para tí son un for next dentro de otro.
Cuando veas la tabla nueva con todos los datos metidos modificas el programita anterior para que en vez de leer las tablas viejas las borre.
Luego tendrás que modificar tu programa pero bueno ... será para que las cosas sean mas fáciles no menos. Si tienes dudas pregunta pero mi consejo es que no intentes atajos. Copiar todos los datos a una tabla, borrar las tablas viejas y poner tu programa a punto.
Si hubieras preguntado antes te habrías ahorrado ese trabajo. Cuando no sepas como plantear algo pregunta hombre que contarlo no cuesta nada pero corregir errores si que cuesta.
|
#9 Domingo, 15 May 2011, 13:40 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Mostrar Datos De Diferentes Tablas En Un Tableview
Jesús, gracias por el link a la extensión del FireFox. No la conocía y es cojonuda... perdón, maravillosa.
=================== No podemos regresar
|
#10 Lunes, 16 May 2011, 08:12 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|