Principales respuestas
crear vista de datos a partir de dataset con varias tablas??

Pregunta
-
Respuestas
-
"RIAB" preguntó:
> Como creo una vista de datos en un dataset tipado con varias tablas??
Hola:Puedes rellenar un objeto DataTable como resultado de ejecutar una consulta SQL de combinación (INNER JOIN), que agrupe varias tablas de una misma base de datos.
Por ejemplo, imagina que tienes tres tablas con campos relacionados entre ellas, Municipios, Provincias y Autonomias, y deseas mostrar el Identificador del Municipio (IdMunicipio), el nombre del Municipio (Nombre), así como los nombres de la Provincia y de la Comunidad Autónoma a la que pertenece el Municipio. Pues bien, para ello ejecutarías la siguiente consulta SQL de combinación:
Using cnn As New OleDbConnection( _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\Mis documentos\Municipios.mdb;")Dim sql As String = _
"SELECT m.IdMunicipio, m.Nombre As [Nombre Municipio], " & _
"p.Nombre As [Nombre Provincia], a.Nombre As [Nombre Comunidad] " & _
"FROM (Autonomias a INNER JOIN Provincias p ON a.IdComunidad = p.IdComunidad) " & _
"INNER JOIN Municipios m ON p.IdProvincia = m.IdProvincia " & _
"WHERE p.IdProvincia = 23 " & _
"ORDER BY m.Nombre"Dim da As New OleDbDataAdapter(sql, cnn)
Dim dt As New DataTable("Municipios")
da.Fill(dt)
DataGridView1.DataSource = dt
End Using
Ni que decir tiene que te olvides de actualizar posteriormente la base de datos con los datos existentes en el objeto DataTable, porque no vas a poder hacerlo mediante el método Update del adaptador de datos utilizado.
Un saludo
Enrique Martínez [MS MVP - VB]- Propuesto como respuesta Enrique M. MontejoModerator domingo, 8 de noviembre de 2009 8:58
- Marcado como respuesta RIAB domingo, 8 de noviembre de 2009 14:45
-
Si aparte de no poder vincular las tablas existentes en las dos bases de Access, tampoco conoces el lenguaje SQL, todas las soluciones que te demos aquí te van a ser difíciles de entender y de llevarlas a cabo.
Si no puedes vincular las tablas de Access, créate dos servidores vinculados desde el propio Administrador de SQL Server: uno para la tabla de la base A, y otro para la tabla de la base B. Una vez que tengas los servidores vinculados, puedes crearte una vista en la base de SQL Server para consultar los datos combinados de las dos tablas. O también puedes ejecutar una consulta de creación de tabla (SELECT * INTO) para crear una nueva tabla en la base de datos de SQL Server con la información combinada de las dos tablas de la bases de Access.
Pero si todo esto lo desconoces, o te suena a chino, tendrás que comenzar por buscar información en los Libros en Pantalla de SQL Server sobre cómo se crea un servidor vinculado a una base de Access, y cómo se ejecutan consultas SQL de combinación (INNER JOIN) entre dos tablas que tengan campos relacionados.
Como ésta conversación ya se encuentra cerrada por el usuario que la inició, RIAB, yo te aconsejaría que iniciaras una nueva pregunta, si así lo crees conveniente, y que EXPUSIERAS CLARAMENTE lo que deseas que haga tu aplicación de Visual Basic .net.
Enrique Martínez [MS MVP - VB]- Marcado como respuesta Enrique M. MontejoModerator martes, 11 de julio de 2017 15:15
Todas las respuestas
-
hola- los datos tendras la misma estructura de informacion, o sea los mismos campos ?lo pregunto porque en un datagridview no podrás representar tres tablas con distintos camposPara crear cada tabla en un dataset tipado simplemente ve al diseñador del dataset, y arrastre desde el Server Explorer (por supuesto conectado a tu db) las tablas que queires representarIgual como te comento, por ahi lo que ten conviene hacer es definir una estructura de campos, cargar tres instancias distintas y realizar un Merge entre ellas con el método Mergecon el merge obtendrás uno unico datatable con la información conjunta de los tres conjuntos de datos, pero aclaro tiene que tenes los mismos campossaludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
-
holame refiero a que caga conjunto de dato, en cada una de als consultas deben tener los mismo campossi las consultas son a tres tipos de base de datos distintas y queires consultar por ejemplos contactos, y defines que los campos sera, por ejemplo"id", "nombre", "mail", bueno las tres consultas deben llenar esos tres campos, y ahi si luego ahcer el merge entre estos par aunificarlo y cargarlo al datagridviewsi una de las consulta te trae datos dintintos por ejemplo "idcontacto", "alias", "calle", en ese caso no podras hacer el merge, salvo que desde tu query puedas usar alias para los campos y adaptar la informacionbueno espero quede mas claro, sino vemos de amplicarlosaludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
-
holaahh ok queda mas claro, bien pero esas tablas tienen los mismo campos ?puedes unir esa información en un único grupo para ser cargada en una grillao sea en datagridview no se puede representar de forma variable la informacion, o sea simpre carga de a un datatable, si necesitas mostrar información distinta, deberas usar mas de una grillaveras que el datagridview tiene una propiedad que se llama DataGridView.DataMemberesta es la que le indica al datagriview que datatable debe utilizar si es que el dataset tiene mas de una tabla definidapor eso te decía que solo una podrás cargar aunque tengas tres en el mismo dataset, para mostrar las tres juntas debes unificarla en un solo datatablesaludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
-
"RIAB" preguntó:
> Como creo una vista de datos en un dataset tipado con varias tablas??
Hola:Puedes rellenar un objeto DataTable como resultado de ejecutar una consulta SQL de combinación (INNER JOIN), que agrupe varias tablas de una misma base de datos.
Por ejemplo, imagina que tienes tres tablas con campos relacionados entre ellas, Municipios, Provincias y Autonomias, y deseas mostrar el Identificador del Municipio (IdMunicipio), el nombre del Municipio (Nombre), así como los nombres de la Provincia y de la Comunidad Autónoma a la que pertenece el Municipio. Pues bien, para ello ejecutarías la siguiente consulta SQL de combinación:
Using cnn As New OleDbConnection( _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\Mis documentos\Municipios.mdb;")Dim sql As String = _
"SELECT m.IdMunicipio, m.Nombre As [Nombre Municipio], " & _
"p.Nombre As [Nombre Provincia], a.Nombre As [Nombre Comunidad] " & _
"FROM (Autonomias a INNER JOIN Provincias p ON a.IdComunidad = p.IdComunidad) " & _
"INNER JOIN Municipios m ON p.IdProvincia = m.IdProvincia " & _
"WHERE p.IdProvincia = 23 " & _
"ORDER BY m.Nombre"Dim da As New OleDbDataAdapter(sql, cnn)
Dim dt As New DataTable("Municipios")
da.Fill(dt)
DataGridView1.DataSource = dt
End Using
Ni que decir tiene que te olvides de actualizar posteriormente la base de datos con los datos existentes en el objeto DataTable, porque no vas a poder hacerlo mediante el método Update del adaptador de datos utilizado.
Un saludo
Enrique Martínez [MS MVP - VB]- Propuesto como respuesta Enrique M. MontejoModerator domingo, 8 de noviembre de 2009 8:58
- Marcado como respuesta RIAB domingo, 8 de noviembre de 2009 14:45
-
Buenas tardes,
Referente a este tema aprovecho para realizar una consulta que espero que puedan responderme.
Tengo 2 tablas en 2 ficheros Access distintos. En la tabla A, tengo los campos: "Código" "Fecha" "Cajas" y en la tabla B tengo los campos: "Código" "Kg_x_caja".
Quiero crear una vista en sql que me muestre "Código", "Fecha" y un tercer campo que sería la multiplicación de "Cajas" X "Kg_x_caja" y deseo guardar el resultado de la vista en una tabla del sql.
He añadido al visual studio las bases de datos Access y el sql, pero no encuentro la manera de crear una vista con la combinación de las 2 tablas Access insisto en que son ficheros distintos. ¿Qué solución me pueden recomendar?
Muchas gracias de antemano y disculpen mi ignorancia sobre el tema.
PD: Uso Visual Studio 2005 y sql Server Express Edition 2005 -
hola
bueno al usar VS2005 el uso de linq esta descartado
en ese caso una vista no creo que sea posible ya que son archivos de Access sepadados, por ahi podrias hacerlo de forma manual, recorriendo una de las tablas y consultando en la otra, y en este proceso ir cargando una datatable adicional con el resultado del merge
con linq esto lo haria automatico, pero al no poder usarlo necesitas hacerlo manualmente
- una consulta la idea es que al final esto se pase a sql server?
si es asi podrias hacer la dos consulta y el procesamientod e este directamente insertarlo en la tabla de sql server
pasos
- consulta la tabla1 de Access "Código" "Fecha" "Cajas", obtienes un datatable1
- consulta la tabla2 de Acces "Código" "Kg_x_caja", obtienes un datatable2
- recorrer el datatable1, y en cada iteracion con el valor del campo Codigo, consulta el datatable2
- cuando tienes todos los resultados armas la consulta insert, que ejecutaras contra la tabla de sql server
es una operacion algo manual, pero asi seguro podras procesar la info
Leandro Tuttini
Blog
Buenos Aires
Argentina -
> Tengo 2 tablas en 2 ficheros Access distintos. En la tabla A,
> tengo los campos: "Código" "Fecha" "Cajas" y en la tabla B
> tengo los campos: "Código" "Kg_x_caja".
Por si lo desconoces, te comentaré que puedes VINCULAR la tabla B a la base de datos que contiene la tabla A, o viceversa, de ésta manera trabajarías con la tabla B como si estuviera en la misma base que la tabla A.
> Quiero crear una vista en sql que me muestre "Código", "Fecha"
> y un tercer campo que sería la multiplicación de
> "Cajas" X "Kg_x_caja" y deseo guardar
> el resultado de la vista en una tabla del sql.
En tu servidor de SQL Server, puedes crearte un Servidor Vinculado que apunte a la base de datos de Access (aquella que tiene la tabla A y como vinculada la tabla B). Posteriormente podrás ejecutar una consulta SELECT * INTO para crear una nueva tabla en la base de datos de SQL Server con los datos de la consulta SQL de selección.
> He añadido al visual studio las bases de datos Access y el sql,
> pero no encuentro la manera de crear una vista con la
> combinación de las 2 tablas Access insisto en que
> son ficheros distintos. ¿Qué solución me pueden recomendar?
Por lo que observo, poco tiene que lo que deseas hacer con Visual Basic .net, salvo que te desees complicar la vida innecesariamente, más aún, sabiendo que hay otros caminos para hacerlo de una manera más fácil.
Como a mí no me gusta complicarme la vida haciendo estos menesteres con una aplicación de Visual Basic .NET, mi recomendación es que lo hagas todo a través de la propia interfaz de usuario de Microsoft Acces (para vincular las tablas de las dos bases de datos de Access) y del Administrador de SQL Server Express 2005 (para crear el servidor vinculado y ejecutar la consulta SELECT * INTO).
Una vez que tengas creada tu nueva tabla en la base de SQL Server, entonces ya estarás en condiciones de recuperar los datos en un objeto DataTable de tu aplicación de Visual Basic .net.
Enrique Martínez [MS MVP - VB] -
Buenas tardes y gracias por las respuestas,
Sigo sin encontrar solución,
No puedo tocar NADA de las tablas access puesto que tienen otro fin y son usadas por otra aplicación, yo solo las utilizo para extraer cierta información que me interesa y que se va actualizando, no puedo ni realizar vínculos entre ellas, ni crear consultas dentro.
Así pues, si las vistas no funcionan, pienso que lo mejor sería (corríjanme si me equivoco), importar y posteriormente actualizar las tablas Access en otras tablas de mi sql en cada ejecución de mi programa y a partir de aquí generar mi propia vista. No sé si lo de los Datatable que comenta Leandro iría por ahí.
Es que debo realizar algunas operaciones antes de mostrar los datos (realmente mis tablas tienen más campos que los del ejemplo) y no veo otra manera de introducir fórmulas antes de mostrar el resultado.
He de decir que como no conozco sql, estoy utilizando los wizard para encontrar la solución y quizá ahí está el problema.
Les agradecería enormemente si me pudieran orientar un poco e ilustrarme con algún pequeño ejemplo.
Muchísimas gracias.
-
Si aparte de no poder vincular las tablas existentes en las dos bases de Access, tampoco conoces el lenguaje SQL, todas las soluciones que te demos aquí te van a ser difíciles de entender y de llevarlas a cabo.
Si no puedes vincular las tablas de Access, créate dos servidores vinculados desde el propio Administrador de SQL Server: uno para la tabla de la base A, y otro para la tabla de la base B. Una vez que tengas los servidores vinculados, puedes crearte una vista en la base de SQL Server para consultar los datos combinados de las dos tablas. O también puedes ejecutar una consulta de creación de tabla (SELECT * INTO) para crear una nueva tabla en la base de datos de SQL Server con la información combinada de las dos tablas de la bases de Access.
Pero si todo esto lo desconoces, o te suena a chino, tendrás que comenzar por buscar información en los Libros en Pantalla de SQL Server sobre cómo se crea un servidor vinculado a una base de Access, y cómo se ejecutan consultas SQL de combinación (INNER JOIN) entre dos tablas que tengan campos relacionados.
Como ésta conversación ya se encuentra cerrada por el usuario que la inició, RIAB, yo te aconsejaría que iniciaras una nueva pregunta, si así lo crees conveniente, y que EXPUSIERAS CLARAMENTE lo que deseas que haga tu aplicación de Visual Basic .net.
Enrique Martínez [MS MVP - VB]- Marcado como respuesta Enrique M. MontejoModerator martes, 11 de julio de 2017 15:15
-