39
3. MANEJO DE RELACIONES ENTRE TABLAS EN UNA BASE DE DATOS Generalmente una base de datos contiene muchas tablas, algunas de las cuales tienen campos en común. Dichas tablas se pueden relacionar por el campo común para manipular la información de los registros de dos o más tablas. Con la relación de tablas también se puede realizar el desplazamiento y la operación de los registros de dichas tablas. En los siguientes ejemplos se seguirá trabajando con SQL Server y la base de datos bdlibrovbnet.mdf, la cual contiene las tablas clientes, pedidos, productos, ventas. Figura 5. Estructuras de las tablas 3.1 Ejemplos de relación de tablas de una base de datos

Manejo de Relaciones

Embed Size (px)

DESCRIPTION

anejo de Relaciones Entre Tablas en Una Base de Datos

Citation preview

3. MANEJO DE RELACIONES ENTRE TABLAS EN UNA BASE DE DATOSGeneralmente una base de datos contiene muchas tablas, algunas de las cuales tienen campos en comn. Dichas tablas se pueden relacionar por el campo comn para manipular la informacin de los registros de dos o ms tablas. Con la relacin de tablas tambin se puede realizar el desplazamiento y la operacin de los registros de dichas tablas. En los siguientes ejemplos se seguir trabajando con SQL Server y la base de datos bdlibrovbnet.mdf, la cual contiene las tablas clientes, pedidos, productos, ventas.

Figura 5. Estructuras de las tablas

3.1 Ejemplos de relacin de tablas de una base de datos

3.1.1 Visualizar registros de tablas relacionadas

Crear un proyecto llamado RelacionarDosTablas, que permita a un usuario visualizar los campos nit, empresa, de la tabla clientes y nropedido, fechaentrega y observacin de la tabla pedidos de la base de datos bdlibrovbnet.mdf en una cuadrcula. Crear la interfaz de usuario Utilizando el cuadro de herramientas haga clic en el control especfico y ubique los siguientes controles en el formulario en la posicin deseada: 1 Label, 1 Button, 1 DataGridView.

Figura 5.1 Interfaz de usuario (RelacionarDosTablas).

Establecer las propiedades de los objetos de la interfaz de usuario Establezca las siguientes modificaciones a los controles:

Tabla 5.1 Propiedades de controles proyecto RelacionarDosTablas

ControlPropiedadValor

Label1TextRelacin de las tablas clientes y pedidos de bdlibrovbnet.mdf.

nametitulo

Font /boldtrue

Button1TextEjecutar

nameboton

DataGridView1Nametabla

Form1Nameformulario

TextRelacin de tablas de una base de datos.

Figura 5.2 Interfaz de usuario modificada (RelacionarDosTablas).

Escribir cdigoa) Antes de la apertura de la clase formulario se debe importar el siguiente espacio de nombres:

Imports System.Data.SqlClientPublic Class formularioEnd Class

b) D doble clic sobre el objeto boton para abrir el editor de cdigo y escriba el siguiente cdigo:

Dim conexion As String conexion = "Data Source=(local)\SQLEXPRESS;Database=bdlibrovbnet; Integrated Security=True" Dim seleccion As String = "SELECT clientes.nit,clientes.empresa,pedidos.nropedido, pedidos.fechaentrega, pedidos.observacon FROM clientes INNER JOIN pedidos ON clientes.nit = pedidos.nit" Dim adaptador As SqlDataAdapter Dim tabladedatos As New DataTable Try adaptador = New SqlDataAdapter(seleccion, conexion) adaptador.Fill(tabladedatos) tabla.DataSource = tabladedatos Catch ex As Exception MsgBox("Error" & ex.Message) End Try

Se crea la variable seleccion de tipo String que almacenar una instruccin SQL. En dicha instruccin se relacionan las tablas clientes y pedidos con la clusula INNER JOIN. Primero se seleccionan los campos que se quiere visualizar de las dos tablas (SELECT clientes.nit, clientes.empresa, pedidos.nropedido,..), con INNER JOIN se realiza la relacin de ests (FROM clientes INNER JOIN pedidos) y utilizando la clusula ON se compara el campo comn entre las dos tablas, para el ejemplo el campo comn es nit. Por ltimo se ejecuta la instruccin SQL y se rellena el objeto tabla con los registros que cumplan la condicin de relacin entre las tablas clientes y pedidos.

Ejecutar el proyecto Al ejecutarse el proyecto, se visualizar la figura 5.2. Si se pulsa el botn Ejecutar, se visualizarn todos los registros relacionados de las tablas clientes y pedidos. Solamente se visualizarn los registros cuyo nit de la tabla pedidos exista en la tabla clientes.

Figura 5.3 Formulario con la relacin de las tablas clientes - pedidos.

3.1.2 Relacin de tablas utilizando dos DataGridViewCrear un proyecto llamado RelacionConDataGridView, que permita a un usuario visualizar en un primer objeto DataGridView los campos de la tabla clientes y al seleccionar de dicho objeto un registro, mostrar en un segundo objeto DataGridView todos los registros relacionados con la tabla pedidos de la base de datos bdlibrovbnet.mdf. Crear la interfaz de usuario Utilizando el cuadro de herramientas haga clic en el control especfico y ubique los siguientes controles en el formulario en la posicin deseada: 2 Label, 2 DataGridView.

Figura 5.4 Interfaz de usuario (RelacionConDataGridView).

Establecer las propiedades de los objetos de la interfaz de usuario Establezca las siguientes modificaciones a los controles:

Tabla 5.2 Propiedades de controles proyecto RelacionConDataGridView.

ControlPropiedadValor

Label1TextClientes

nameetiquetaclientes

Label2TextPedidos

nameetiquetapedidos

DataGridView1Nametablaclientes

DataGridView2Nametablapedidos

Form1Nameformulario

TextRelacin de tablas con DataGridView.

Figura 5.5 Interfaz de usuario modificada (RelacionConDataGridView).

Escribir cdigoa) Antes de la apertura de la clase formulario se debe importar el siguiente espacio de nombres:

Imports System.Data.SqlClientPublic Class formularioEnd Class

b) D doble clic sobre el formulario para abrir el editor de cdigo del procedimiento formulario_ Load y escriba el siguiente cdigo:

Dim conexion As String = "Data Source=(local)\SQLEXPRESS;Database=bdlibrovbnet; Integrated Security=True" Dim nvaconexion As New SqlConnection(conexion) Try nvaconexion.Open() Dim conjuntodedatos As New DataSet Dim datosclientes As New SqlDataAdapter("select * from clientes", nvaconexion) Dim datospedidos As New SqlDataAdapter("select * from pedidos", nvaconexion) datosclientes.Fill(conjuntodedatos, "clientes") datospedidos.Fill(conjuntodedatos, "pedidos") nvaconexion.Close() With tablaclientes .DataMember = "clientes" .DataSource = conjuntodedatos .SelectionMode = DataGridViewSelectionMode.FullRowSelect End With With conjuntodedatos .Relations.Add("relacion",.Tables("clientes").Columns("nit"), .Tables("pedidos").Columns("nit")) End With With tablapedidos .DataSource = conjuntodedatos .DataMember = "clientes.relacion" .SelectionMode = DataGridViewSelectionMode.FullRowSelect End With Catch ex As Exception MsgBox(ex.Message.ToString) End Try

Se crea la variable nvaconexion de tipo SqlConecction que almacenar la cadena de conexin a la base de datos bdlibrovbnet.mdf de SQL Server. En un bloque Try se abre la conexin utilizando la funcin Open del objeto nvaconexion, adems se crean los objetos conjuntodedatos al cual se le asigna espacio de memoria de tipo DataSet; datosclientes al cual se le asigna espacio de memoria de tipo SqlDataAdapter y recibe como parmetros la seleccin de todos los registros de la tabla clientes y el objeto nvaconexion; datospedidos al cual se le asigna espacio de memoria de tipo SqlDataAdapter y recibe como parmetros la seleccin de todos los registros de la tabla pedidos y el objeto nvaconexion. Por otro lado, se rellenan los objetos datosclientes y datospedidos con el conjunto de datos y su respectiva tabla. Al objeto tablaclientes en su propiedad DataMember se le asigna el nombre de la tabla clientes, a la propiedad DataSource el conjunto de datos y a la propiedad SelectionMode se le asigna la operacin de seleccin completa de la fila (DataGridViewSelectionMode.FullRowSelect). Utilizando la propiedad Relations y la funcin Add del objeto conjuntodedatos se crea un alias llamado relacion para definir la relacin entre las tablas clientes y pedidos por el campo comn (nit). Al objeto tablapedidos en su propiedad DataMember se le asigna la relacin de las tablas (clientes.relacion), en la propiedad DataSource el conjunto de datos y en la propiedad SelectionMode se le asigna la operacin de seleccin completa de la fila (DataGridViewSelectionMode.FullRowSelect). Ejecutar el proyecto Al ejecutarse el proyecto, se visualizar al menos los registros de la tabla clientes. Si selecciona un registro de la primera cuadrcula se mostrarn en la segunda cuadrcula los registros relacionados entre las tablas clientes - pedidos.

Figura 5.6 Relacin de las tablas clientes pedidos con DataGridView.

3.1.3 Relacin de tablas utilizando ComboBoxRealizar un proyecto llamado RelacionConComboBox, que permita a un usuario seleccionar desde una lista desplegable el nombre de una empresa y visualizar en una cuadrcula los pedidos que ha realizado dicha empresa. Crear la interfaz de usuario Utilizando el cuadro de herramientas haga clic en el control especfico y ubique los siguientes controles en el formulario en la posicin deseada: 1 Label, 1 ComboBox, 1 Button, 1 DataGridView.

Figura 5.7 Interfaz de usuario (RelacionConComboBox).

Establecer las propiedades de los objetos de la interfaz de usuario Establezca las siguientes modificaciones a los controles:

Tabla 5.3 Propiedades de controles proyecto RelacionConComboBox.

ControlPropiedadValor

Label1TextSeleccione empresa:

nameetiquetaclientes

Button1TextVer Pedidos

nameboton

DataGridView1Nametablapedidos

ComboBox1Namelista

Form1Nameformulario

TextRelacin de tablas con un ComboBox.

Figura 5.8 Interfaz de usuario modificada (RelacionConComboBox).

Establecer la conexin

Desde la ficha Datos del cuadro de herramienta arrastre hacia el formulario el adaptador de datos SqlDataAdapter (Si no aparece el control, d clic derecho sobre la ficha Datos y ejecute la orden Elegir elementos, busque el control, seleccinelo en el cuadro de verificacin y pulse el botn Aceptar.). Se visualizar la siguiente figura:

Figura 5.9. Ventana Elegir la conexin de datos

D clic en el botn Nueva Conexin. En la ventana que se visualiza elija como origen de datos Microsoft SQL Server y la base de datos bdlibrovbnet. Figura 5.10 Ventana Agregar conexin.

Pulse el botn Aceptar, para visualizar nuevamente la ventana de Elegir la conexin de datos. All pulse Siguiente> para visualizar el siguiente mensaje:

Figura 5.11 Ventana Microsoft Visual Studio.

Pulse el botn S para copiar el archivo de datos en la carpeta en donde guard el proyecto. Se visualizar la ventana de eleccin de tipo de comando:

Figura 5.12 Ventana eleccin tipo de comando.

Por omisin est seleccionada la opcin Usar instrucciones SQL. Pulse Siguiente> para visualizar la ventana de generacin de instrucciones SQL.

Figura 5.13 Ventana Generar las instrucciones SQL.

Aqu se puede realizar la seleccin de los datos que debera cargar el adaptador de datos. Una forma es escribir en la ventana instrucciones SQL y la otra es pulsar el botn Generador de consultas. Para el ejemplo se pulsar el botn y se visualiza la siguiente figura:

Figura 5.14 Ventana Generador de consultas.

Seleccione la tabla clientes, pulse el botn Agregar y luego el botn Cerrar, se visualizar la siguiente figura:Figura 5.15 Generador de consultas con la tabla clientes.

En esta nueva ventana seleccione la opcin * (todas las columnas) o los campos que desea visualizar (si desea visualizar la consulta seleccionada pulse el botn Ejecutar consulta). Se obtendr la siguiente figura:

Figura 5.16 Generador de consultas con los campos seleccionados (tabla clientes).

Pulse el botn Aceptar, y se visualizar la siguiente figura:

Figura 5.17 Generador de consultas con la instruccin SQL.

Al pulsar el botn Finalizar, se crearn los objetos: SqlDataAdapter1 y SqlConnection1. Cambie el nombre de dichos objetos por datosclientes y conexioncliente respectivamente. Ahora seleccione nuevamente el control SqlDataAdapter de la ficha Datos y realice los mismos pasos que se dieron anteriormente, pero esta vez seleccione la tabla pedidos y cambie los nombres de los objetos SqlDataAdapter1 y sqlConnection1 por datospedidos y conexionpedidos. Se visualizar la siguiente figura:

Figura 5.18 Formulario con los objetos SqlDataAdapter y sqlConnection.

Seleccione la opcin Generar Conjunto de Datos del men Datos y se mostrar el siguiente cuadro de dilogo:

Figura 5.19 Ventana Generar conjunto de datos.

Elija la opcin Nuevo y cambie el nombre DataSet1 por conjuntodedatos, deshabilite el cuadro de verificacin pedidos (datospedidos) y pulse el botn Aceptar para agregar el conjunto de datos a la aplicacin, como muestra la figura:

Figura 5.20 Formulario con el objeto conjuntodedatos.

Escribir cdigoa) Antes de la apertura de la clase formulario se debe importar el siguiente espacio de nombres:

Imports System.Data.SqlClientPublic Class formularioEnd Class

b) Despus de la apertura de la clase formulario y antes de los procedimientos sub, inicialice las siguientes variables u objetos globales: Public class formulario Dim vistapedidos As DataView :::::::::End class Se inicializa un objeto global llamado vistapedidos de tipo DataView para obtener una vista de los datos.

c) D doble clic sobre el formulario para abrir el editor de cdigo del procedimiento formulario_ Load y escriba el siguiente cdigo:

datosclientes.Fill(conjuntodedatos, "clientes") datospedidos.Fill(conjuntodedatos, "pedidos") lista.DataSource = conjuntodedatos.Tables("clientes") lista.DisplayMember = conjuntodedatos.Tables("clientes").Columns(1).ToString lista.ValueMember = conjuntodedatos.Tables("clientes").Columns(0).ToString vistapedidos = conjuntodedatos.Tables("pedidos").DefaultView

Se rellenan los objetos datosclientes y datospedidos con el conjunto de datos y su respectiva tabla. Al objeto lista en su propiedad DataSource se le asigna la tabla clientes del conjunto de datos, a la propiedad DisplayMember se le asigna el valor del segundo campo de la tabla clientes (columna uno (1) empresa) y a la propiedad ValueMember se le asigna el valor del primer campo de la tabla clientes (columna cero (0) - nit). Por ltimo al objeto vistapedidos se le asigna la tabla pedidos del conjunto de datos y utilizando la propiedad DefaultView se personaliza la vista de los datos.

d) D doble clic sobre el objeto boton para abrir el editor de cdigo y escriba el siguiente cdigo:

Dim datoempresa As String = lista.SelectedValue vistapedidos.RowFilter = "nit = '" & datoempresa & "'" tablapedidos.DataSource = vistapedidos

Se inicializa una variable llamada datoempresa de tipo String que almacenar lo seleccionado en el objeto lista por intermedio de la propiedad SelectedValue. Se utiliza la propiedad RowFilter del objeto vistapedidos para filtrar los registros por el campo nit de acuerdo con el valor de la variable datoempresa. Por ltimo se asigna a la propiedad DataSource del objeto tablapedidos el contenido del objeto vistapedidos.

e) D doble clic sobre el objeto lista para abrir el editor de cdigo del procedimiento lista_SelectedIndexChanged y escriba el siguiente cdigo:

tablapedidos.DataSource = Nothing

Utilizando la palabra clave nothing se libera en memoria el contenido que tenga la propiedad DataSource del objeto tablapedidos.

Ejecutar el proyecto Al ejecutarse el proyecto se visualizar la figura 5.8, mostrndose en el objeto lista el primer nombre de empresa de la tabla clientes (si se desea ver los nombres de empresas ordenados alfabticamente, cambie el valor de la propiedad sorted del objeto lista por true). Si selecciona un nombre de empresa y se pulsa el botn Ver Pedidos, se visualizar en la cuadrcula todos los registros que estn relacionados con la tabla pedidos.

Figura 5.21 Relacin de las tablas clientes pedidos con DataGridView.

3.1.4 Reporte con tablas relacionadasRealizar un proyecto llamado ReporteTablasRelacionadas, que permita a un usuario visualizar en un formulario un reporte de todos los registros relacionados de las tablas clientes pedidos de la base de datos bdlibrovbnet.mdf. Crear la interfaz de usuario Utilizando el cuadro de herramientas haga clic en el control especfico y ubique los siguientes controles en el formulario en la posicin deseada: 1 MicrosoftReportViewer.Figura 5.22 Interfaz de usuario (ReporteTablasRelacionadas).

Establecer las propiedades de los objetos de la interfaz de usuario Establezca las siguientes modificaciones a los controles:

Tabla 5.4 Propiedades de controles proyecto ReporteTablasRelacionadas.

ControlPropiedadValor

MicrosoftReportViewer1Namereporte

Form1Nameformulario

TextReporte con tablas relacionadas.

Figura 5.23 Interfaz de usuario modificada (ReporteTablasRelacionadas).

Del men Ver seleccione la opcin Explorador de servidores, para visualizar la siguiente figura:

Figura 5.24 Ventana Explorador de servidores.

Al pulsar el icono conectar con bases de datos, se visualizar l ventana de Agregar conexin como muestra la figura:

Figura 5.25 Ventana Agregar conexin.

En la ventana que se visualiza elija como origen de datos Microsoft SQL Server y la base de datos bdlibrovbnet. Se visualizar la siguiente figura:

Figura 5.26 Ventana con la base de datos seleccionada.

Pulse el boton Aceptar, para observar la siguiente figura:

Figura 5.27 Base de datos seleccionada en el Explorador de servidores.

D clic en el signo (+) al lado del nombre de la base de datos para visualizar la estructura definida en la base de datos. Seleccione la carpeta vistas y d clic derecho para ver en el men contextual la opcin Agregar nueva vista, seleccinela para visualizar la ventana Agregar tabla.

Figura 5.28 Ventana Agregar tabla.

Agregue las tablas clientes, pedidos y pulse el botn Cerrar. Por otro lado, de la tabla clientes seleccione los campos nit, empresa, representante y de la tabla pedidos nropedido, fechaentrega, fechavence, observacon. Se obtendr la siguiente figura:

Figura 5.29 Vista con las tablas clientes pedidos.

Cierre la ventana de la vista (parte superior derecha), para ver la ventana de guardar el cambio de la vista.

Figura 5.30 Ventana guardar cambio de la vista.

D clic sobre el botn S, para elegir el nombre de la vista.

Figura 5.31 Ventana elegir nombre vista.

Escriba como nombre de la vista tablasrelacionadas y pulse el botn Aceptar, para guardar la vista en la base de datos.

Figura 5.32 Base de Datos con la vista tablasrelacionadas.

Elija la ficha de diseo del formulario y d clic sobre la flecha del objeto reporte y seleccione la opcin Disear nuevo informe.

Figura 5.33 Seleccionar opcin Disear nuevo informe del objeto reporte.

Al seleccionar dicha opcin se visualizar la ventana del asistente de informes.

Figura 5.34 Asistente para informes.

D clic en Siguiente, para ver la ventana de configuracin de orgenes de datos.

Figura 5.35 Asistente para la configuracin de orgenes de datos.

D clic en el botn Nueva Conexin. En la ventana que se visualiza elija como origen de datos Microsoft SQL Server y la base de datos bdlibrovbnet.

Figura 5.36 Ventana con la base de datos seleccionada.

Pulse Siguiente> para visualizar el siguiente mensaje:

Figura 5.37 Ventana Microsoft Visual Studio.

Pulse el botn S para copiar el archivo de datos en la carpeta en donde guard el proyecto y visualizar la ventana de guardar cadena de conexin:

Figura 5.38 Ventana Guardar cadena de conexin.

Cambie el nombre de la conexin que all aparece por conexion y pulse el botn Siguiente>, se visualizar la siguiente figura:

Figura 5.39 Ventana de eleccin de objetos de la base de datos.

Pulse el signo (+) al lado de Vistas para desplegar las vistas actuales de la base de datos, seleccione la vista tablasrelacionadas. Por otro lado, cambie el nombre del DataSet que all aparece por conjuntodedatos y pulse el botn Finalizar, para visualizar la figura 5.40:

Figura 5.40 Asistente para informes seleccionar el origen de datos.

Pulse los signos (+) para desplegar la vista. D clic en Siguiente> para visualizar la ventana de seleccin de tipo de informe.

Figura 5.41 Asistente para informes seleccionar el tipo de informe.

Seleccione la opcin Tabular o Matriz y de clic en Siguiente> para visualizar la ventana de diseo de tabla.

Figura 5.42 Asistente para informes disear la tabla.

Seleccione los campos nit, empresa, representante y sitelos en la casilla Grupo>, el resto de campos en la casilla Detalles>. Se observar la siguiente figura:

Figura 5.43 Diseo de la tabla con los campos seleccionados.

D clic en Siguiente> para visualizar la ventana de eleccin de diseo de la tabla.

Figura 5.44 Asistente para informes elegir el diseo de la tabla.

Seleccione la opcin Escalonado o Bloquear y si desea incluir subtotales o no. D clic en Siguiente> para visualizar la ventana de estilo de la tabla.

Figura 5.45 Asistente para informes elegir el estilo de tabla.

Seleccione la opcin con el estilo que desee y d clic en Siguiente> para visualizar la ventana de finalizacin del asistente de informes.

Figura 5.46 Ventana de finalizacin del asistente de informes.

Donde aparece el nombre del informe cmbielo por Informe Clientes - Pedidos y d clic en Finalizar> para visualizar el diseo final del informe.

Figura 5.47 Diseo final del informe.

En este momento se podrn modificar los textos de las etiquetas de los campos, como tambin la longitud de los campos. Adems en el explorador de soluciones se visualizar el informe agregado al proyecto.

Elija la ficha de diseo del formulario y d clic sobre la flecha del objeto reporte y seleccione la opcin Elegir informe.

Figura 5.48 Seleccionar opcin Elegir informe.

All escoja ReporteTablasRelacionadas.Informe Clientes-Pedidos.rdlc, para visualizar el formulario con los objetos conjuntodedatos, tablasrelacionadasBindingSource y tablasrelacionadasTableAdapter.

Figura 5.49 Formulario con los objetos de manejo de datos.

Ejecutar el proyecto Al ejecutarse el proyecto, se visualizar la figura 5.50. Por medio de la barra de herramientas se podr desplazar hacia las diferentes hojas del reporte, as como imprimir el reporte, modificar el diseo del informe, configurar la pgina, cambiar el tamao de visualizacin del informe y buscar texto dentro del informe.

Figura 5.50 Formulario con el reporte de la relacion clientes- pedidos.