bases de datos y visual basic

76
I Unidad – Introducción a los sistemas de gestión de bases de datos Pág. Nº 1 1.Introducción a las Bases de Datos. 1.1 Las Bases de Datos en ACCESS. 1.1.1 Concepto de Bases de Datos. 1.2 Introducción a los principales conceptos de Bases de Datos. 1.2.1 Tablas. 1.2.2 Integridad referencial. 1.2.3 Tipos de relaciones. 2.Objetos de Acceso a Datos (DAO). 2.1 El Control Data. 2.2 Propiedades y Métodos más utilizados del Control Data. 2.2.1Propiedades 2.2.1.1 Name 2.2.1.2 Align 2.2.1.3 Connect 2.2.1.4 DatabaseName 2.2.1.5 RecordsetType 2.2.1.6 RecordSource 2.2.1.7 BOF 2.2.1.8 EOF 2.2.1.9 Recordset 2.2.1.10 RecordCount 2.2.2 Métodos 2.2.2.1 AddNew 2.2.2.2 Edit 2.2.2.3 Delete 2.2.2.4 Update 2.2.2.5 Move MoveFirst y MoveLast 2.2.2.6 Refresh 2.2.2.7 UpdateControls Bases de Datos : Una base de datos es un conjunto de información relacionada con un asunto o con una finalidad, tal como el seguimiento de los pedidos de clientes o una colección de música. Una base de datos se compone al menos de una tabla y, por lo general, de varias tablas. Tablas: Qué son y cómo funcionan Es un conjunto de uno o más campossobre un tema específico (tales como Estudiantes, Empleados, Productos, Proveedores, etc. ) donde cada uno describe los datos que deben guardarse, especificando el tipo, el tamaño y otros atributos del dato. Si usa una tabla independiente para cada tema evita la duplicación de información, lo que hace que su base de datos sea eficiente. Las tablas organizan los datos en columnas (denominadas campos) y filas (denominadas registros). ¿Qué es la integridad referencial? Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Upload: elgap

Post on 26-Jun-2015

216 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Pág. Nº 1

1. Introducción a las Bases de Datos. 1.1 Las Bases de Datos en ACCESS.

1.1.1 Concepto de Bases de Datos. 1.2 Introducción a los principales conceptos de Bases de Datos.

1.2.1 Tablas. 1.2.2 Integridad referencial. 1.2.3 Tipos de relaciones.

2. Objetos de Acceso a Datos (DAO).

2.1 El Control Data. 2.2 Propiedades y Métodos más utilizados del Control Data. 2.2.1 Propiedades

2.2.1.1 Name 2.2.1.2 Align 2.2.1.3 Connect 2.2.1.4 DatabaseName 2.2.1.5 RecordsetType 2.2.1.6 RecordSource 2.2.1.7 BOF 2.2.1.8 EOF 2.2.1.9 Recordset 2.2.1.10 RecordCount

2.2.2 Métodos 2.2.2.1 AddNew 2.2.2.2 Edit 2.2.2.3 Delete 2.2.2.4 Update 2.2.2.5 Move MoveFirst y MoveLast 2.2.2.6 Refresh 2.2.2.7 UpdateControls

Bases de Datos: Una base de datos es un conjunto de información relacionada con un asunto o con una finalidad, tal como el seguimiento de los pedidos de clientes o una colección de música. Una base de datos se compone al menos de una tabla y, por lo general, de varias tablas. Tablas: Qué son y cómo funcionan Es un conjunto de uno o más campos sobre un tema específico (tales como Estudiantes, Empleados, Productos, Proveedores, etc. ) donde cada uno describe los datos que deben guardarse, especificando el tipo, el tamaño y otros atributos del dato. Si usa una tabla independiente para cada tema evita la duplicación de información, lo que hace que su base de datos sea eficiente. Las tablas organizan los datos en columnas (denominadas campos) y filas (denominadas registros). ¿Qué es la integridad referencial?

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 2: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Pág. Nº 2

La integridad referencial es un sistema de reglas que utiliza Microsoft Access para garantizar que las relaciones entre los registros de tablas relacionadas son válidas y que no se eliminan ni modifican accidentalmente datos relacionados. Puede establecer la integridad referencial cuando se cumplen todas las condiciones siguientes: • El campo coincidente de la tabla principal es una clave principal o tiene un índice único. • Los campos relacionados tienen el mismo tipo de datos. Existen dos excepciones: un campo Autonumérico puede estar relacionado con un campo Numérico con la propiedad Tamaño del campo establecida a Entero largo, y un campo Autonumérico con la propiedad Tamaño del campo establecida a Id. de réplica puede estar relacionado con un campo Numérico con la propiedad Tamaño del campo establecida a Id. de réplica.

• Ambas tablas pertenecen a la misma base de datos de Microsoft Access. Si las tablas son tablas vinculadas, deben ser tablas en el formato de Microsoft Access y debe abrir la base de datos en la que están almacenadas para poder establecer la integridad referencial. La integridad referencial no puede exigirse para tablas vinculadas procedentes de bases de datos en otros formatos.

Cuando se exige la integridad referencial, deben observarse las reglas siguientes: 1. No puede introducir un valor en el campo de clave externa de la tabla relacionada que no

exista en la clave principal de la tabla principal. No obstante, puede introducir un valor Nulo en la clave externa, especificando que los registros no están relacionados. Por ejemplo, no puede tener un pedido asignado a un cliente que no existe, pero puede tener un pedido asignado a nadie mediante la introducción de un valor Nulo en el campo Id. de cliente.

2. No puede eliminar un registro de una tabla principal si existen registros coincidentes en una

tabla relacionada. Por ejemplo, no puede eliminar un registro de empleados de la tabla Empleados si existen pedidos asignados al Empleado en la tabla Pedidos.

3. No puede cambiar un valor de clave principal en la tabla principal si ese registro tiene registros

relacionados. Por ejemplo, no puede cambiar el Id. de un empleado en la tabla Empleados si existen pedidos asignados a ese empleado en la tabla Pedidos.

Si desea que Microsoft Access exija esas reglas para una relación, seleccione la casilla de verificación Exigir integridad referencial al crear la relación. Si se exige la integridad referencial e infringe una de las reglas con las tablas relacionadas, Microsoft Access muestra un mensaje y no permite el cambio. Puede anular las restricciones sobre la eliminación o la modificación de registros relacionados y aún así conservar la integridad referencial mediante la activación de las casillas de verificación Actualizar en cascada los campos relacionados y Eliminar en cascada los registros relacionados. Cuando la casilla de verificación Actualizar en cascada los campos relacionados está activada, el cambio de un valor de clave principal en la tabla principal actualiza automáticamente el valor coincidente en todos los registros relacionados.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 3: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Pág. Nº 3

Cuando la casilla de verificación Eliminar en cascada los registros relacionados está activada, la eliminación de un registro en la tabla principal elimina todos los registros relacionados en la tabla relacionada. Relaciones Relación: Una asociación establecida entre campos comunes (columnas) de dos tablas. Una relación puede ser de tipo uno a uno, de tipo uno a varios o de tipo varios a varios. ¿Cómo funcionan las relaciones? Una relación hace coincidir los datos de los campos clave (normalmente un campo con el mismo nombre en ambas tablas). En la mayoría de los casos, estos campos coincidentes son la clave principal de una tabla, que proporciona un identificador único para cada registro, y una clave externa de la otra tabla. Por ejemplo, los empleados pueden asociarse a los pedidos de los que son responsables mediante la creación de una relación entre la tabla Empleados y la tabla Pedidos a través de los campos Id. de empleado.

Tipos de relaciones

Relación uno a varios: La relación uno a varios es el tipo de relación más común. En este tipo de relación, un registro de la Tabla A puede tener muchos registros coincidentes en la Tabla B, pero un registro de la Tabla B sólo tiene un registro coincidente en la Tabla A. Relación varios a varios: En una relación varios a varios, un registro de la Tabla A puede tener muchos registros coincidentes en la Tabla B y viceversa. Este tipo de relación sólo es posible si se define una tercera tabla (denominada tabla de unión) cuya clave principal consta de al menos dos campos: las claves externas de las Tablas A y B. Por ejemplo, las tablas Pedidos y Productos tienen una relación varios a varios definida mediante la creación de dos relaciones uno a varios con la tabla Detalles de pedidos. Relación uno a uno: En una relación uno a uno, cada registro de la Tabla A sólo puede tener un registro coincidente en la Tabla B y viceversa. Este tipo de relación no es habitual, debido a que la mayoría de la información relacionada de esta forma estaría en una sola tabla. Puede utilizar la relación uno a uno para dividir una tabla con muchos campos, para aislar parte de una tabla por razones de seguridad o para almacenar información que sólo se aplica a un subconjunto de la tabla principal. Por ejemplo, puede crear una tabla que registre los empleados participantes en un partido de fútbol benéfico. Definir relaciones: Para definir una relación, es necesario agregar a la ventana Relaciones las tablas que se desea relacionar y, a continuación, arrastrar el campo clave de una tabla y colocarlo en el campo clave de la otra tabla.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 4: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Pág. Nº 4

v Actividades de la Clase Nº 8 Ejemplo del uso de Control Data en un formulario. Objetivo: Crear un formulario que sirva de interfaz con la Tabla Proveedores de la base de datos EMPRESA. Tome como sugerencia el diseño del FORM, que se le presentara. El Control Data solo funciona con Microsoft Acces 97, por lo que para utilizar este Control Data debemos crear la Base de datos mediante los complementos Administrativos de Visual Basic, de la siguiente forma : 1. Cree en su diskette (drive A) l directorio Base de Datos. 2. Seleccione del Menú Commplementos\Administrador Visual de Datos\ 3. Luego se le presentara otra pantalla en la cual seleccionara del Menú Archivo\Nuevo\Microsoft Acces\MDB de la Versión 7.0 4. Debera asignarle un nombre a la Base de datos que esta creando y guardarla, para ello

seleccione la unidad A:\Base de datos, el nombre sera el EMPRESA, Tipo MDB y selecciona Guardar.

5. En la ventana de Base de Datos seleccione Propiedades con el boton derecho del Mouse y

escoja Nueva Tabla. 6. Le aparecera la siguiente pantalla :

7. El Nombre de la Tabla sera Proveedores

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 5: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Pág. Nº 5

8. Seleccione Agregar Campo y le aparecera esta pantalla ahora debera digitar el Nombre del Campo, Tipo, longitud del campo y luego selecciona Aceptar 9. Debera repetir este procedimiento hasta que ingrese todos los campos de su tabla y selecciona Cerrar. 10. Los Campos a ingresar son :

NOMBRE TIPO TAMAÑO IdProveedor Interer 4 NombreCompañía Texto 40 NombreContacto Texto 30 CargoContacto Texto 30 Dirección Texto 60 Ciudad Texto 15 Región Texto 15 CódPostal Texto 10 País Texto 15 Teléfono Texto 24 Fax Texto 24 PáginaPrincipal Texto 40 11. Seleccione Agregar Indice, en la pantalla que se le preenta seleccione de los campos disponible

IdProveedor y en nombre Identificación del Proveedor. 12. Seleccione Aceptar y lugo Cerrar. 13. Una vez que halla terminado, seleccione Generar Tabla 14. Sobre la Tabla Proveedores con el boton derecho del 15. mouse, seleccione Abrir, le aparecera la siguiente pantalla 16. Proceda a ingresar los registros y selecione Actualizar cuando termine de completar cada registro. 17. Los registros que ingresaran, seran los siguientes.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 6: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Pág. Nº 6

18. Cerrar cuando halla terminado 19. Finalmete cierre la ventana del Administrador Visual de datos y regrese al FORM, donde creara el siguiente formulario.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 7: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 7 Ing. Jacqueline Montes López

Tabla de objetos y sus propiedades para el ejemplo.

Objeto Propiedad Valor Form Name frmProveedores BorderStyle 2-Sizable Caption Cálculo de Estadísticos MaxButton False MDIChild True Label Name lblCodProveedor Caption Código Proveedor Label Name lblNombreCompañía Caption NombreCompañía Label Name lblNombreContacto Caption NombreContacto Label Name lblCargo Caption Cargo Label Name LblDirección Caption Dirección Label Name LblCiudad Caption Cidad Label Name LblRegión Caption Región Label Name lblCódigoPostal Caption CódigoPostal Label Name LblPaís Caption País Label Name LblTeléfono Caption Teléfono Label Name LblFax Caption Fax Label Name lblPáginaPrincipal Caption PáginaPrincipal TextBox Name txtCodProveedor Text DataField IdProveedor DataSource dtaProveedores TextBox Name txtNombreCompañía Text DataField NombreCompañía DataSource dtaProveedores TextBox Name txtNombreContacto Text DataField NombreContacto DataSource dtaProveedores

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 8: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 8 Ing. Jacqueline Montes López

TextBox Name TxtCargo Text DataField CargoContacto DataSource dtaProveedores TextBox Name txtDirección Text DataField Dirección DataSource dtaProveedores TextBox Name txtCiudad Text DataField Ciudad DataSource dtaProveedores TextBox Name txtRegión Text DataField Región DataSource dtaProveedores TextBox Name txtCódigoPostal Text DataField CódPostal DataSource dtaProveedores TextBox Name TxtPaís Text DataField País DataSource dtaProveedores TextBox Name txtTeléfono Text DataField Teléfono DataSource dtaProveedores TextBox Name TxtFax Text DataField Fax DataSource dtaProveedores TextBox Name txtPáginaPrincipal Text DataField PáginaPrincipal DataSource dtaProveedores Data Name dtaProveedores DatabaseName A:\Base de Datos\EMPRESA.MDB RecordsetType 1-Dynaset Recordsource Proveedores Label Name LblRegistro Caption Registro Label Name lblTotalregistros Caption CommandButton Name cmdAgregar

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 9: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 9 Ing. Jacqueline Montes López

Caption &Agregar CommandButton Name cmdActualizar Caption Ac&tualizar CommandButton Name cmdSalvar Caption &Salvar CommandButton Name cmdBorrar Caption &Borrar CommandButton Name cmdCancelar Caption &Cancelar CommandButton Name cmdCerrar Caption Ce&rrar 'Sección de Declaraciones del Formulario Public wsWS As Workspace 'Requerimos un área de trabajo... Public DBEmpresa As Database 'Necesitamos una variable Database... Public iLastAction As Integer Private sLastRecord As String Dim rsProveedores As dao.Recordset Sub Main() On Error GoTo ErrorHandler 'Abrimos el área de trabajo... Set wsWS = DBEngine.Workspaces(0) '*******Abrimos la base de datos ************ 'REVISE MEDIANTE EL EXPLORADOR DE WINDOWS, LA RUTA DONDE ESTA UBICADA SU BASE DE DATOS Set DBEmpresa = wsWS.OpenDatabase("A:\Base de

Datos\Empresa.mdb") Exit Sub ErrorHandler: ManejadorDeErrores: If (Err = 3167) Then For Each errBucle In DBEngine.Errors MsgBox "Número de Error: " & errBucle.Number & vbCr & errBucle.Description Next errBucle ElseIf Err = 3112 Then For Each errBucle In DBEngine.Errors MsgBox "Número de Error: " & errBucle.Number & vbCr & errBucle.Description Next errBucle ElseIf Err = 3219 Then For Each errBucle In DBEngine.Errors MsgBox "Número de Error: " & errBucle.Number & vbCr & errBucle.Description Next errBucle ElseIf Err = 3044 Then For Each errBucle In DBEngine.Errors MsgBox "Número de Error: " & errBucle.Number & vbCr & errBucle.Description Next errBucle

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 10: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 10 Ing. Jacqueline Montes López

Exit Sub End Sub Private Sub cmdActualizar_Click() cmdActualizar.Enabled = False 'Desactiva Actualizar, Cancelar y Eliminar cmdSalvar.Enabled = True cmdCancelar.Enabled = True cmdBorrar.Enabled = False cmdAgregar.Enabled = False dtaProveedores.Recordset.Edit 'Activamos la modificación... txtNombreCompañía.SetFocus txtNombreCompañía.SelStart = 0 txtNombreCompañía.SelLength = Len(txtNombreCompañía.Text) iLastAction = 2 End Sub Private Sub cmdAgregar_Click() 'Marca el lugar en el Recordset sLastRecord = dtaProveedores.Recordset.Bookmark 'Activamos y desactivamos algunos botones... cmdAgregar.Enabled = False cmdSalvar.Enabled = True cmdCancelar.Enabled = True cmdActualizar.Enabled = False cmdBorrar.Enabled = False dtaProveedores.Recordset.AddNew 'Añade el nuevo registro txtCodProveedor.SetFocus 'Se mueve al primer campo iLastAction = 1 End Sub Private Sub cmdBorrar_Click() On Error GoTo ErrorHandler 'Si ocurre algún error... Dim lngIdProveedor As Long Dim bEncontrado As Boolean lngIdProveedor = InputBox("Teclee el Código del Proveedor que desee eliminar. ", "Eliminando Proveedor", dtaProveedores.Recordset("IdProveedor")) Do While Not dtaProveedores.Recordset.EOF If lngIdProveedor = dtaProveedores.Recordset("IdProveedor") Then 'Primero pregunta si es correcto Borrar If MsgBox("Está seguro que desea borrar al Proveedor " & " " & dtaProveedores.Recordset("NombreCompañía") & " de Código " _ & dtaProveedores.Recordset("IdProveedor") & "?", vbQuestion + vbYesNo, "Borrando " & " " & dtaProveedores.Recordset("NombreCompañía")) = vbYes Then 'dtaProveedores.Recordset.Edit dtaProveedores.Recordset.Delete 'Si es así, lo borra... dtaProveedores.Recordset.MovePrevious '...y se mueve un registro hacia atrás bEncontrado = True

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 11: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 11 Ing. Jacqueline Montes López

Else Exit Sub End If Else dtaProveedores.Recordset.MoveNext End If Loop If Not bEncontrado Then MsgBox "El Proveedor con Código " & lngIdProveedor & " no fue encontrado", vbExclamation Else MsgBox "El Proveedor con Código " & lngIdProveedor & " fue eliminado", vbOKOnly, "Registro Eliminado" End If ErrorHandler: If (Err = 3200) Then For Each errBucle In DBEngine.Errors MsgBox "Número de Error: " & errBucle.Number & vbCr & errBucle.Description, vbCritical Next errBucle End If End Sub Private Sub cmdCancelar_Click() cmdCancelar.Enabled = False cmdAgregar.Enabled = True cmdActualizar.Enabled = True cmdBorrar.Enabled = True cmdSalvar.Enabled = False cmdAgregar.Enabled = True dtaProveedores.UpdateControls 'Restaura los controles a sus valores originales dtaProveedores.Recordset.Bookmark = sLastRecord 'Pone la propiedad Bookmark del Recordset 'igual a la variable de marcador. Esto regresará al usuario al registro 'en que estaba cuando se oprimió el botón Agregar txtCodProveedor.SetFocus 'Centra la atención en el primer control asociado End Sub Private Sub cmdCerrar_Click() Unload Me End Sub Private Sub cmdSalvar_Click() 'En las siguientes líneas los campos de la tabla Proveedores 'toman los valores introducidos en el formulario. If txtCodProveedor.Text <> "" And txtNombreCompañía.Text <> "" Then dtaProveedores.Recordset("IdProveedor") = txtCodProveedor.Text dtaProveedores.Recordset("NombreCompañía") = txtNombreCompañía.Text If txtCargo.Text <> "" Then

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 12: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 12 Ing. Jacqueline Montes López

dtaProveedores.Recordset("CargoContacto") = txtCargo.Text ElseIf txtDirección.Text <> "" Then dtaProveedores.Recordset("Dirección") = txtDirección.Text ElseIf txtCiudad.Text <> "" Then dtaProveedores.Recordset("Ciudad") = txtCiudad.Text ElseIf txtRegión.Text <> "" Then dtaProveedores.Recordset("Región") = txtRegión.Text ElseIf txtCódigoPostal.Text <> "" Then dtaProveedores.Recordset("CódPostal") = txtCódigoPostal.Text ElseIf txtPaís.Text <> "" Then dtaProveedores.Recordset("País") = txtPaís.Text ElseIf txtTeléfono.Text <> "" Then dtaProveedores.Recordset("Teléfono") = txtTeléfono.Text ElseIf txtFax.Text <> "" Then dtaProveedores.Recordset("Fax") = txtFax.Text ElseIf txtPáginaPrincipal.Text <> "" Then dtaProveedores.Recordset("PáginaPrincipal") = txtPáginaPrincipal.Text End If dtaProveedores.Recordset.Update 'Envía el registro... cmdAgregar.Enabled = True cmdCancelar.Enabled = True cmdBorrar.Enabled = True cmdActualizar.Enabled = True cmdSalvar.Enabled = False Else MsgBox "Datos Incompletos... verifique" If txtNombreCompañía.Text = "" Then txtNombreCompañía.SetFocus ElseIf txtCodProveedor.Text = "" Then txtCodProveedor.SetFocus End If End If End Sub Private Sub dtaProveedores_Reposition() Dim TotalRegistros As Long TotalRegistros = (dtaProveedores.Recordset.RecordCount) dtaProveedores.Caption = dtaProveedores.Recordset.AbsolutePosition + 1 lblTotalregistros.Caption = "de " & TotalRegistros End Sub Private Sub Form_Activate() txtNombreCompañía.SelStart = 0 txtNombreCompañía.SelLength = Len(txtNombreCompañía) txtNombreCompañía.SetFocus End Sub Private Sub Form_Resize() Me.Width = 9140

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 13: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 13 Ing. Jacqueline Montes López

Me.Height = 6125 End Sub Private Sub txtCargo_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtDirección.SetFocus End If End Sub Private Sub txtCiudad_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtRegión.SetFocus End If End Sub Private Sub txtCódigoPostal_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtPaís.SetFocus End If End Sub Private Sub txtDirección_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtCiudad.SetFocus End If End Sub Private Sub txtFax_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtPáginaPrincipal.SetFocus End If End Sub Private Sub txtNombreCompañía_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then If txtNombreCompañía.Text = "" Then MsgBox "Este campo no puede contener una cadena vacía !", vbExclamation txtNombreCompañía.SetFocus Else txtNombreContacto.SetFocus End If End If End Sub Private Sub txtNombreCompañía_Validate(Cancel As Boolean) If txtNombreCompañía.Text = "" Then MsgBox "Este campo no puede contener una cadena vacía!" txtNombreCompañía.SetFocus

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 14: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 14 Ing. Jacqueline Montes López

End If End Sub Private Sub txtNombreContacto_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtCargo.SetFocus End If End Sub Private Sub txtPáginaPrincipal_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then cmdSalvar.SetFocus End If End Sub Private Sub txtPaís_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtTeléfono.SetFocus End If End Sub Private Sub txtRegión_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtCódigoPostal.SetFocus End If End Sub Private Sub txtTeléfono_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtFax.SetFocus End If End Sub

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 15: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 15 Ing. Jacqueline Montes López

1. El Control Data. (Continuación) 2. El control DBCombo 2.1 Propiedades más utilizados del Control DBCombo.

2.1.1 Name 2.1.2 DataSource 2.1.3 DataField 2.1.4 SelectedItem 2.1.5 VisibleCount 2.1.6 VisibleItems 2.1.7 BoundColumn 2.1.8 BoundText 2.1.9 Text 2.1.10 MatchEntry 2.1.11 Style 2.1.12 RowSource 2.1.13 ListField

2.2 Métodos más utilizados del Control DBCombo.

2.2.1 ReFill 2.2.2 SetFocus 2.2.3

1. El control Data Proporciona acceso a datos almacenados en bases de datos mediante uno de los tres tipos de objetos Recordset. El control Data le permite desplazarse de un registro a otro, así como presentar y manipular datos de los registros en controles enlazados. Sin un control Data o un control de origen de datos equivalente como el control RemoteData, los controles enlazados a datos (vinculados) de un formulario no pueden tener acceso a los datos automáticamente. 1.1 Propiedades más utilizadas del Control Data 1.1.1 Name: Devuelve el nombre utilizado en el código para identificar un formulario, un control o

un objeto de acceso a datos. Es de sólo lectura en tiempo de ejecución. 1.1.2 Align: Devuelve o establece un valor que determina si un objeto se presenta en cualquier

tamaño y posición dentro de un formulario o si se presenta en la parte superior, inferior, izquierda o derecha del mismo y si su tamaño se ajusta automáticamente al ancho del formulario.

1.1.3 Caption: Una frase a modo de mensaje que se despliega en el propio control Data. 1.1.4 Connect: Proporciona información acerca del origen de una base de datos abierta, de una base

de datos utilizada en una consulta de paso a través o de una tabla adjunta. 1.1.5 DatabaseName: Devuelve y establece el nombre y ubicación de la fuente de datos de un

control Data. Este es a menudo una expresión de cadena que indica el nombre y la ruta completa de la base de datos.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 16: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 16 Ing. Jacqueline Montes López

1.1.6 Exclusive: Devuelve o establece un valor booleano que indica si la base de datos subyacente de un control Data está abierta para acceso de un único usuario o de múltiples usuarios. El valor por omisión es falso y, por tanto, permite el acceso multiusuario.

1.1.7 ReadOnly: Devuelve o establece un valor booleano que indica si los datos pueden editarse. El

valor por omisión es False, para permitir la edición. 1.1.8 RecordsetType: Devuelve o establece un valor entero que indica el tipo de objeto Recordset

que desea que cree el control Data: Table, Dynaset o Snapshot. El valor por omisión es 1, Dynaset.

1.1.9 Recordsource: Devuelve o establece la tabla subyacente, la instrucción SQL o el

procedimiento de almacenaje. Esta propiedad determina cuáles registros serán desplegados por el control Data.

1.1.10 Visible: Devuelve o establece un valor que indica si un objeto es visible o está oculto. 1.1.11 BOF: Devuelve un valor booleano que indica si la posición del registro activo es anterior al

primer registro de un objeto Recordset. La propiedad BOF devuelve el valor True, si la posición del registro activo es anterior al primer registro y False si el registro activo está en el registro activo o en el posterior.

1.1.12 EOF: Devuelve un valor booleano que indica si la posición del registro activo es posterior al

último registro de un objeto Recordset. La propiedad EOF devuelve el valor True, si la posición del registro activo es posterior al último registro y False si el registro activo está en el último registro o antes de éste.

1.1.13 Recordset: Devuelve o establece un objeto Recordset definido por las propiedades de un

control Data o por un objeto Recordset existente. 1.2 Métodos más utilizados del control Data 1.2.1 AddNew: Crea un nuevo registro para un objeto Recordset de tipo Table o Dynaset.

Sintaxis Recordset.AddNew

1.2.2 Edit: Copia el registro activo de un objeto Recordset al búfer de copia para su posterior

edición.

Sintaxis Recordset.Edit

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 17: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 17 Ing. Jacqueline Montes López

1.2.3 Delete: Elimina el registro activo de un objeto Recordset de tipo Dynaset o Table. Para espacios de trabajo ODBCDirect, el tipo de controlador determina si los objetos Recordset se pueden actualizar y, por tanto, admiten el método Delete.

Sintaxis Recordset.Delete

1.2.4 Update: Guarda el contenido del búfer de copia en un objeto Recordset de tipo Dynaset o

Table especificado.

Sintaxis Recordset.Update

1.2.5 MoveFirst, MoveLast, MoveNext y MovePrevious: Mueven al registro primero, último,

siguiente o anterior de un objeto Recordset y lo convierten en el registro activo. 1.2.6 Refresh: Se usa para abrir, reconstruir y volver a desplegar el conjunto de registros asociados

con el control Data.

Sintaxis objeto.Refresh

1.2.7 UpdateControls: Obtiene el registro actual del objeto Recordset de un control Data y presenta

los datos apropiados en los controles enlazados a un control Data. No acepta argumentos con nombre.

Sintaxis objeto.UpdateControls

Comentarios Utilice este método para restaurar el contenido de los controles enlazados a sus valores originales, como cuando un usuario hace cambios en los datos y después decide cancelarlos. Este método tiene el mismo efecto que hacer que el registro actual lo vuelva hacer de nuevo, excepto que no se producen eventos. El método UpdateControls termina cualquier operación Edit o AddNew pendiente. 2. El control DBCombo El control DBCombo es un cuadro combinado enlazado a datos con una lista desplegable que se llena automáticamente a partir de un campo de un control Data asociado y que, opcionalmente, actualiza un campo de una tabla relacionada de otro control Data. La parte de cuadro de texto de DBCombo puede usarse para modificar el campo seleccionado. El control DBCombo se llena automáticamente con datos procedentes de un campo del objeto Recordset de un control Data al que está asociado. el control DBCombo tiene la posibilidad de

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 18: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 18 Ing. Jacqueline Montes López

actualizar un campo dentro de un objeto Recordset relacionado que puede residir en un control Data diferente. El control DBCombo también acepta un modo de búsqueda automática que puede encontrar rápidamente los elementos de la lista sin necesidad de escribir código adicional. 2.1 Propiedades más utilizadas del control DBCombo. 2.1.1 Name: Devuelve el nombre utilizado en el código para identificar un formulario, un control o

un objeto de acceso a datos. Es de sólo lectura en tiempo de ejecución. 2.1.2 DataSource: El nombre del control Data que se actualiza cuando se hace una selección. 2.1.3 DataField: El nombre de un campo que se actualiza en el Recordset especificado por la

propiedad DataSource. 2.1.4 SelectedItem: El marcador del elemento seleccionado del Recordset especificado por la

propiedad RowSource. 2.1.5 VisibleCount: El número de elementos visibles de la lista (total o parcialmente). 2.1.6 VisibleItems: Una matriz de marcadores con un número máximo de elementos igual a la

propiedad VisibleCount. 2.1.7 BoundColumn: El nombre de un Field del Recordset especificado por RowSource que se

devuelve a la propiedad DataField cuando se hace una selección. DBCombo no acepta campos de tipo LongBinary en la propiedad BoundColumn.

2.1.8 BoundText: El valor de texto del campo BoundColumn. Cuando se realiza una selección, se

devuelve este valor para actualizar el objeto Recordset especificado por las propiedades DataSource y DataField.

2.1.9 Text: El valor de texto del elemento seleccionado en la lista. 2.1.10 MatchEntry: El método de búsqueda en la lista cuando el usuario escribe caracteres en tiempo

de ejecución. Sintaxis

objeto.MatchEntry [= valor ] Valores que puede tomar la propiedad MatchEntry Los valores admitidos para valor son:

Valor Valor Descripción

dblBasicMatching 0 Coincidencia básica. (Predeterminado) El control busca la siguiente aparición del carácter introducido usando la primera letra de las entradas de la lista. Si escribe varias veces la

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 19: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 19 Ing. Jacqueline Montes López

misma letra se recorren todas las entradas de la lista que comiencen por dicha letra.

dblExtendedMatching 1

Coincidencia ampliada. El control busca una entrada que coincida con todos los caracteres introducidos. La búsqueda se realiza a medida que se escriben los caracteres, perfeccionando posteriormente la búsqueda.

2.1.11 Style: Devuelve o establece un valor entero que indica el tipo de muestra y el comportamiento

del control. Es de sólo lectura en tiempo de ejecución.

Sintaxis objeto.Style

Valores que puede tomar la propiedad Style: 0 – dbcDropdownCombo (Predeterminado):El usuario puede seleccionar datos en la lista con solo escribir en el cuadro de texto la primera (o primeras letras) de los valores posibles que tome el campo desplegado en el DBCombo y establecido por la propiedad ListField y luego, utilizando las teclas de desplazamiento (flecha arriba y flecha abajo), se puede mover entre los diferentes elementos del combo. 1- dbcSimpleCombo: Cuadro combinado desplegable. Incluye una lista desplegable y un cuadro de texto. El usuario puede seleccionar datos en la lista o escribir en el cuadro de texto. 2- dbcDropdownList : Este estilo sólo permite la selección desde la lista desplegable. Al escribir la primera o primeras letras, se muestra la primera aparición de los elementos que comienzan con esa letra. 2.1.12 RowSource : El nombre del control Data que se utiliza como origen de los elementos para la

parte de lista del control. 2.1.13 ListField: El nombre de un campo del Recordset especificado por RowSource que se utiliza

para llenar la lista desplegable. DBCombo no acepta campos de tipo LongBinary en la propiedad ListField.

2.2 Métodos más utilizados del DBCombo 2.2.1 ReFill: Vuelve a crear la lista de un control DataList o DBCombo y fuerza la actualización de

su presentación. El método ReFill es diferente del método Refresh estándar, que sólo provoca un evento Repaint.

Sintaxis objeto.ReFill

2.2.2 Setfocus: Mueve el enfoque al control.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 20: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 20 Ing. Jacqueline Montes López

Sintaxis

objeto.SetFocus v Actividad e la Clase Nº 9 Ejemplo No. 2 Del uso de Control Data en un formulario. Objetivo: Crear un formulario que sirva de interfaz con la Tabla Productos de la base de datos EMPRESA. Tome como sugerencia el diseño que aparece en la siguiente imagen. 1. De la misma forma que la clase anterior, cree en la Base de Datos EMPRESA, las Tablas

Productos y Categorías, con los siguientes campos.

PRODUCTOS NOMBRE TIPO TAMAÑO

IdProducto Integer 2 NombreProducto Texto 40 IdProveedor Integer 2 IdCategoria Integer 2 CantidadPorUnidad Texto 20 PrecioUnidad Currency 6 UnidadesEnExistencia Long 9 UnidadesEnPedido Long 9 NivelNuevoPedido Long 9 Suspendido Texto 2 fds Currency 6

CATEGORÍAS NOMBRE TIPO TAMAÑO

IdCategoría Integer 3 NombreCategoría Texto 40 Descripción Memo 0 2. Ahora proceda a ingresar los registros en cada Tabla :

PRODUCTOS

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 21: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 21 Ing. Jacqueline Montes López

CATEGORÍAS 3. Para hacer uso del DBCombo, seleccione del menú Proyecto\Componentes y active el

componenete Microsoft Data Bound List Controls 6.0 4. El diseño del FORM, sera el siguiente :

Tabla de objetos y sus propiedades para el ejemplo.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 22: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 22 Ing. Jacqueline Montes López

Objeto Propiedad Valor Form Name frmProductos BorderStyle 2-Sizable Caption Datos de Productos MaxButton False MDIChild True Label Name lblIdProducto Caption Id. Producto Label Name lblNombreProducto Caption Nombre Producto Label Name lblProveedor Caption Proveedor Label Name lblCategoría Caption Categoría Label Name CantidadPorUnidad Caption Cantidad por Unidad Label Name lblPrecioUnitario Caption Precio Unitario Label Name UnidadesExistentes Caption Unidades en Existencia Label Name lblUnidadesPedidas Caption Unidades en Pedido Label Name lblNivelNuevoPedido Caption Nivel de Nuevo Pedido Label Name lblNoRegistros Caption Registro : Label Name lblTotalRegistros Caption Control Data Name dtaProductos Caption Connect Access DatabaseName A:\Base de Datos\EMPRESA.MDB Recordsource Productos Visible True Control Data Name DtaProveedores Caption Proveedores Connect Access DatabaseName A:\Base de Datos\EMPRESA.MDB Recordsource Proveedores Visible False Control Data Name dtaCategoría Caption Categoría Connect Access DatabaseName A:\Base de Datos\EMPRESA.MDB Recordsource Categoría

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 23: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 23 Ing. Jacqueline Montes López

Visible False TextBox Name txtIdProducto Text DataField IdProducto DataSource dtaProductos Locked True TextBox Name txtNombreProducto Text DataField NombreProducto DataSource dtaProductos DBCombo Name dbcProveedor DataSource dtaProductos RowSource dtaProveedores DataField IdProveedor ListField NombreCompañía BoundColumn IdProveedor MatchEntry 0-dblBasicMatching Style 2-dbcDropdownList DBCombo Name dbcCategoría DataSource dtaProductos RowSource dtaCategoría DataField IdCategoría ListField NombreCategoría MatchEntry 0-dblBasicMatching BoundColumn IdCategoría Style 0-dbcDropdownCombo TextBox Name txtCantidadPorUnidad Text DataField CantidadPorUnidad DataSource dtaProductos TextBox Name txtPrecioUnitario Text DataField PrecioUnidad DataSource dtaProductos TextBox Name txtUnidadesExistentes Text DataField UnidadesEnExistencia DataSource dtaProductos TextBox Name txtUnidadesPedidas Text DataField UnidadesEnPedido DataSource dtaProductos TextBox Name txtNivelNuevoPedido Text DataField NivelNuevoPedido

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 24: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 24 Ing. Jacqueline Montes López

DataSource dtaProductos CheckBox Name chkSuspendido Alignment 1- Right Justify DataField Suspendido DataSource dtaProductos CommandButton Name cmdAgregar Caption &Agregar Default True CommandButton Name cmdActualizar Caption Ac&tualizar CommandButton Name cmdSalvar Caption &Salvar CommandButton Name cmdBorrar Caption &Borrar CommandButton Name cmdCancelar Caption &Cancelar CommandButton Name cmdCerrar Caption Ce&rrar CommandButton Name cmdRenovar Caption Reno&var

'Sección de Declaraciones del Formulario Public wsWS As Workspace 'Requerimos un área de trabajo... Public DBEmpresa As Database 'Necesitamos una variable Database... 'Sección de Declaraciones del Formulario Public iLastAction As Integer Private sLastRecord As String Dim rsProductos As dao.Recordset Dim rsProveedores As dao.Recordset Dim rsCategorías As dao.Recordset Sub Main() On Error GoTo ErrorHandler 'Abrimos el área de trabajo... Set wsWS = DBEngine.Workspaces(0) '*******Abrimos la base de datos ************ 'REVISE MEDIANTE EL EXPLORADOR DE WINDOWS, LA RUTA DONDE ESTA UBICADA SU BASE DE DATOS Set DBEmpresa = wsWS.OpenDatabase("C:\Documents and Settings\MONTESJ.EQUIPO09\Mis documentos\Empresa.mdb") Exit Sub End Sub Private Sub cmdActualizar_Click() cmdActualizar.Enabled = False 'Desactiva Actualizar, Cancelar y Eliminar cmdSalvar.Enabled = True cmdCancelar.Enabled = True cmdBorrar.Enabled = False

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 25: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 25 Ing. Jacqueline Montes López

cmdAgregar.Enabled = False dtaProductos.Recordset.Edit 'Activamos la modificación... txtIdProducto.SetFocus txtIdProducto.SelStart = 0 iLastAction = 2 End Sub Private Sub cmdAgregar_Click() 'Marca el lugar en el Recordset sLastRecord = dtaProductos.Recordset.Bookmark 'Activa y desactivamos algunos botones... cmdAgregar.Enabled = False cmdSalvar.Enabled = True cmdCancelar.Enabled = True cmdActualizar.Enabled = False cmdBorrar.Enabled = False dtaProductos.Recordset.AddNew 'Añade el nuevo registro txtIdProducto.SetFocus 'Se mueve al primer campo iLastAction = 1 End Sub Private Sub cmdBorrar_Click() On Error GoTo ErrorHandler Dim lngIdProducto As Long Dim bEncontrado As Boolean lngIdProducto = InputBox("Teclee el Código del Producto que desee eliminar. ", "Eliminando Producto", dtaProductos.Recordset("IdProducto")) Do While Not dtaProductos.Recordset.EOF If lngIdProducto = dtaProductos.Recordset("IdProducto") Then 'Primero pregunta si es correcto Borrar If MsgBox("Está seguro que desea borrar al Producto " & " " & dtaProductos.Recordset("NombreProducto") & " de Código " & dtaProductos.Recordset("IdProducto") & "?", vbQuestion + vbYesNo, "Borrando " & " " & dtaProductos.Recordset("NombreProducto")) = vbYes Then dtaProductos.Recordset.Edit dtaProductos.Recordset.Delete 'Si es así, lo borra... dtaProductos.Recordset.MoveFirst '...y se mueve un registro hacia arriba bEncontrado = True Else Exit Sub End If Else If Not bEncontrado Then dtaProductos.Recordset.MoveNext Else Exit Do

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 26: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 26 Ing. Jacqueline Montes López

End If End If Loop If Not bEncontrado Then dtaProductos.Recordset.MoveLast MsgBox "El Producto con Código " & lngIdProducto & " no fue encontrado", vbExclamation Else MsgBox "El Producto con Código " & lngIdProducto & " fue eliminado", vbOKOnly, "Registro Eliminado" End If ErrorHandler: If (Err = 3200) Then For Each errBucle In DBEngine.Errors MsgBox "Número de Error: " & errBucle.Number & vbCr & errBucle.Description, vbCritical Next errBucle End If End Sub Private Sub cmdCancelar_Click() cmdCancelar.Enabled = False cmdAgregar.Enabled = True cmdActualizar.Enabled = True cmdBorrar.Enabled = True cmdSalvar.Enabled = False cmdAgregar.Enabled = True dtaProductos.UpdateControls 'Restaura los controles a sus valores originales dtaProductos.Recordset.Bookmark = sLastRecord 'Pone la propiedad Bookmark del Recordset 'igual a la variable de marcador. Esto regresará al usuario al registro en que estaba cuando se oprimió el botón Agregar txtNombreProducto.SetFocus 'Centra la atención en el primer control asociado End Sub Private Sub cmdCerrar_Click() Unload Me End Sub Private Sub cmdRenovar_Click() dtaProductos.Refresh End Sub Private Sub cmdSalvar_Click() 'En las siguientes líneas los campos de la tabla Productos 'toman los valores introducidos en el formulario. If txtIdProducto.Text <> "" And txtNombreProducto.Text <> "" Then dtaProductos.Recordset("IdProducto") = txtIdProducto.Text dtaProductos.Recordset("NombreProducto") = txtNombreProducto.Text If dbcProveedor.Text <> "" Then dtaProductos.Recordset("IdProveedor") = dbcProveedor.BoundText

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 27: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 27 Ing. Jacqueline Montes López

ElseIf dbcCategoría.Text <> "" Then dtaProductos.Recordset("IdCategoría") = dbcCategoría.BoundText ElseIf txtCantidadPorUnidad.Text <> "" Then dtaProductos.Recordset("CantidadPorUnidad") = txtCantidadPorUnidad.Text ElseIf txtPrecioUnitario.Text <> "" Then dtaProductos.Recordset("PrecioUnidad") = txtPrecioUnitario.Text ElseIf txtUnidadesExistentes.Text <> "" Then dtaProductos.Recordset("UnidadesEnExistencia") = txtUnidadesExistentes.Text ElseIf txtUnidadesPedidas.Text <> "" Then dtaProductos.Recordset("UnidadesEnPedido") = txtUnidadesPedidas.Text ElseIf txtNivelNuevoPedido.Text <> "" Then dtaProductos.Recordset("NivelNuevoPedido") = txtNivelNuevoPedido.Text End If dtaProductos.Recordset.Update 'Envía el registro... cmdAgregar.Enabled = True cmdCancelar.Enabled = True cmdBorrar.Enabled = True cmdActualizar.Enabled = True cmdSalvar.Enabled = False Else MsgBox "Datos Incompletos... verifique" If txtNombreProducto.Text = "" Then txtNombreProducto.SetFocus ElseIf dbcProveedor.BoundText = "" Then dbcProveedor.SetFocus End If End If End Sub Private Sub dtaProductos_Reposition() Dim TotalRegistros As Long TotalRegistros = (dtaProductos.Recordset.RecordCount) dtaProductos.Caption = dtaProductos.Recordset.AbsolutePosition + 1 lblTotalregistros.Caption = " de " & TotalRegistros End Sub Private Sub Form_Activate() txtNombreProducto.SelStart = 0 txtNombreProducto.SelLength = Len(txtNombreProducto) txtNombreProducto.SetFocus End Sub Private Sub txtIdProducto_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtNombreProducto.SetFocus End If End Sub

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 28: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 28 Ing. Jacqueline Montes López

Private Sub txtNombreProducto_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then dbcProveedor.SetFocus End If End Sub Private Sub dbcProveedor_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then dbcCategoría.SetFocus End If End Sub Private Sub dbcCategoría_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtCantidadPorUnidad.SetFocus End If End Sub Private Sub txtCantidadPorUnidad_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtPrecioUnitario.SetFocus End If End Sub Private Sub txtPrecioUnitario_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtUnidadesExistentes.SetFocus End If End Sub Private Sub txtUnidadesExistentes_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtUnidadesPedidas.SetFocus End If End Sub Private Sub txtUnidadesPedidas_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtNivelNuevoPedido.SetFocus End If End Sub Private Sub txtNivelNuevoPedido_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then cmdSalvar.SetFocus End If End Sub

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 29: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 29 Ing. Jacqueline Montes López

Bases de Datos y Objetos de Acceso a Datos (DAO) (Continuación) 1.1 Jerarquía de los DAO. 1.2 Propiedades y métodos más utilizados del objeto Recordset.

1.2.1 Métodos 1.2.1.1 AddNew 1.2.1.2 Delete 1.2.1.3 Edit 1.2.1.4 Update 1.2.1.5 Seek 1.2.1.6 Move, MoveFirst y MoveLast 1.2.1.7 Refresh

1.2.2 Propiedades 1.2.2.1 EOF 1.2.2.2 BOF 1.2.2.3 Name 1.2.2.4 DatabaseName 1.2.2.5 RecordsetType 1.2.2.6 Recordcount

Motor de base de datos Microsoft Jet

Sistema de administración de bases de datos que recupera datos de y almacena datos en bases de datos del sistema y de los usuarios. El motor de base de datos Microsoft Jet se puede ver como un componente administrador de datos con el que se crean otros sistemas de acceso a datos, como Microsoft Access y Visual Basic.

ODBC (Open Database Connectivity)

Protocolo estándar que permite a las aplicaciones conectarse con diferente servidores de bases de datos o archivos externos. Los controladores ODBC que utiliza el motor de bases de datos Microsoft Jet permiten tener acceso al Servidor SQL de Microsoft y a muchas otras bases de datos externas.

La interfaz de programación de aplicaciones (API) de ODBC también se puede utilizar para tener acceso a los controladores ODBC y a las bases de datos con las que se conectan sin utilizar el motor de bases de datos Microsoft Jet.

ODBCDirect

Tecnología que le permite tener acceso a orígenes de datos ODBC directamente mediante las características del DAO que evitan el motor de bases de datos Microsoft Jet.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 30: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 30 Ing. Jacqueline Montes López

Nota: Cuando se hace referencia a un OBDC (Open Database Connectivity) directamente a través de DAO’s, el espacio de trabajo se llama ODBCDirect Wokspace. Esto se hace para distinguirlo de un origen de datos ODBC al cual se hace referencia de manera indirecta a través del Microsoft Jet Database Engine usando un espacio de trabajo Microsoft Jet (Microsoft Jet Workspace).

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 31: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 31 Ing. Jacqueline Montes López

DBEngine: Este objeto ocupa el lugar más alto en la jerarquía del modelo de objetos DAO. Este contiene y controla a todos los demás objetos de la jerarquía. No se pueden crear objetos DBEngine adicionales. El objeto BDEngine no es un elemento de una colección.

Sintaxis [DBEngine.][collection | method | property] Workspaces(espacio de trabajo): La colección Workspaces contiene todos los espacios de trabajo abiertos del objeto DBEngine. Para referirse a un objeto Workspace en una colección, puede usarse su número de orden o el nombre dado a dicho espacio de trabajo; es decir: DBEngine.Workspaces(0) DBEngine.Workspaces(“name”) DBEngine.Workspaces![name] Workspace: El objeto Workspace define una sesión nombrada por un usuario. Este contiene las bases de datos abiertas y provee mecanismos para transacciones simultáneas y, en un espacio de trabajo Microsoft Jet, soporte para seguridad en grupos de trabajo. El objeto Workspace define como van a interactuar las aplicaciones desarrolladas con los datos, ya sea usando Microsoft database engine u ODBCDirect. Use el Workspace para manejar la sesión actual o para iniciar una sesión adicional. En una sesión pueden abrirse múltiples bases de datos o conexiones, y manejar transacciones. Por ejemplo, con el Workspace se puede: • Usar las propiedades Name, UserName y Type para establecer una sesión. • Usar el método Close para terminar una sesión. • Usar edl método Opendatabase para abrir una o más bases de datos existentes en el espacio de

trabajo (Workspace. Por otro lado, si se está usando Microsoft Jet Database engine, puede establecerse la seguridad basándose en los nombres de usuarios y los passwords: • Use las colecciones Groups y Users para establecer permisos de acceso a los objetos del

Workspace a grupos y usuarios. Databases Collection: Una colección Databases contiene todas las bases de datos abiertas o creadas en un objeto Workspace. Cuando se abre una base de datos existente o se crea una nueva, esta se agrega automáticamente a la colección Databases. Cuando se cierra una base de datos utilizando el método Close, está se quita de la colección Databases pero no se borra del disco.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 32: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 32 Ing. Jacqueline Montes López

En un espacio de trabajo Microsoft Jet, la propiedad Name establecida para una base de datos, es una cadena que especifica la ruta del archivo de base de datos ya sea en el disco fijo de la máquina o la ruta en el servidor de dominio. Para referirse a un objeto Database en una colección usando su número de orden o su propiedad Name, utilice una de las siguientes formas sintáxicas: Databases(0) Databases(“name”) Databases![name] Objeto Database: Un objeto Database representa una base de datos abierta. El objeto Database y sus métodos y propiedades permiten manipular una base de datos abierta. En cualquier tipo de base de datos se puede: • Usar el método Execute para ejecutar una consulta de acción (action query. • Usar el método OpenRecordset para ejecutar una consulta se selección (select query) y crear un

objeto Recordset. • Usar la propiedad RecordsAffected para determinar cuántos registros fueron cambiados por una

consulta de acción (action query. • Usar la propiedad Version para determinar cual version de Database Engine creó la base de datos. • Usar el método CreateQueryDef para crear una definición de consulta temporal o persistente. Recordsets Collections: Una colección Recordsets contiene todos los objetos Recordset abiertos de un objeto Database. Cuando se usan DAO’s, los datos se manipulan casi completamente con objetos Recordset. Al abrir un nuevo objeto Recordset, este se agrega a la colección Recordsets y se remueve automáticamente al cerrarlo. Pueden crearse tantas variables de objeto Recordset como sean necesarias. Diferentes objetos Recordsets pueden accesar las mismas tablas, consultas y fields sin que ocurran conflictos. Para referirse a un objeto Recordset en una colección usando su número de orden o su nombre, use cualquiera de las siguientes formas sintáxicas: Recordsets(0) Recordsets(“name”) Recordsets![name] Objeto Recordset:Un objeto Recordset representa los registros en una tabla base o los registros que resultan de ejecutar una consulta.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 33: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 33 Ing. Jacqueline Montes López

Existen cinco tipos de objetos Recordset: Recordset tipo Tabla: Representación en código de una tabla base que puede usarse para agregar, cambiar o eliminar registros de una tabla en la base de datos (Solo espacios de trabajo Microsoft Jet). Recordset tipo Dynaset: Resultado de una consulta que puede tener registros actualizables. Un objeto Recordset de tipo dynaset es un conjunto dinámico de registros que puede usarse para agregar, cambiar o eliminar registros de una o varias tablas de una base de datos. Este tipo de objetos puede contener campos de varias tablas en una base de datos. Recordset tipo Snapshot: Una copia estática de un conjunto de registros que pueden usarse para buscar datos o generar reportes. Un objeto Recordset tipo Snapshot puede contener campos de una o más tablas en una base de datos pero no pueden ser actualizados. Recordset tipo Forward-Only: Idéntico al tipo Snapshot pero con la diferencia que no se provee ningún cursor. Sólo puede navegarse a través de los registros. Recordset tipo Dinámico: Es el resultado de una consulta a una o más tablas en las cuales se puede agregar, cambiar o eliminar registros. Por otro lado, si otros usuarios agregan, eliminan o cambian registros en las tablas, estos cambios se reflejan en el Recordset Dinámico. Colección Connections: Una colección Connections contiene los objetos Connection de un espacio de trabajo (ODBCDirect Workspace solamente). Cuando se abre un objeto Connection, este se agrega automáticamente a la colección Connections del Workspace. Cuando se cierra un objeto Conecction con el método Close, este es removido de la colección Conecctions. Deben cerrarse todos los Recodsets abiertos dentro del objeto Connection antes de cerrarlo. La propiedad Name de un objeto Connection es una cadena que especifica la ruta del archivo de base de datos. Para referirse a un objeto Connection en una colección, se usa su número ordinal o su nombre establecido en la propiedad Name. Connections(0) Connections(“name”) Connections![“name”]

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 34: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 34 Ing. Jacqueline Montes López

v Actividades de Clase Nº 10 1. Implementación del mismo ejercicio desarrollado anteriormente pero usando Recordset. 2. Uso el método Seek para búsqueda de registros. 3. Introducción a las consultas SQL (Structured Query Languaje). Actividades Actividad No.1: Desarrollar el ejemplo de la clase anterior usando Recordset. Ejemplo del uso de Recordset en un formulario.

General/Declaraciones Public iLastAction As Integer Private sLastRecord As String Dim DbSACRA As Database 'Necesitamos una variable Database... Dim rsEspecialidad As Recordset 'y una Recordset Private Sub cmdActualizar_Click() cmdActualizar.Enabled = False 'Desactiva Actualizar, Cancelar y Eliminar cmdSalvar.Enabled = True cmdCancelar.Enabled = True cmdBorrar.Enabled = False cmdAgregar.Enabled = False dtaEspecialidad.Recordset.Edit 'Activamos la modificación txtNombreEspecialidad.SetFocus txtNombreEspecialidad.SelStart = 0 txtNombreEspecialidad.SelLength = Len(txtNombreEspecialidad) iLastAction = 2

End Sub Private Sub cmdAgregar_Click() sLastRecord = dtaEspecialidad.Recordset.Bookmark 'Marca el lugar en el Recordset cmdAgregar.Enabled = False 'Desactiva el botón Agregar cmdSalvar.Enabled = True 'Activa los botones Guardar y Cancelar cmdCancelar.Enabled = True cmdActualizar.Enabled = False cmdBorrar.Enabled = False dtaEspecialidad.Recordset.AddNew 'Añade el nuevo registro txtNombreEspecialidad.SetFocus 'Se mueve al primer campo iLastAction = 1 End Sub

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 35: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 35 Ing. Jacqueline Montes López

Private Sub cmdBorrar_Click()

If MsgBox("Está seguro que desea borrar" & " " & UCase(meCodeEspecialidad.Text) & "?", vbQuestion + vbYesNo, "Borrando " & " " & meCodeEspecialidad.Text) = vbYes Then 'Primero pregunta si es correcto Borrar dtaEspecialidad.Recordset.Delete 'Si es así, lo borra... dtaEspecialidad.Recordset.MovePrevious '...y se mueve un registro hacia arriba End If

End Sub Private Sub cmdCancelar_Click() cmdCancelar.Enabled = False cmdAgregar.Enabled = True cmdActualizar.Enabled = True cmdBorrar.Enabled = True cmdSalvar.Enabled = False cmdAgregar.Enabled = True dtaEspecialidad.UpdateControls 'Restaura los controles a sus valores originales dtaEspecialidad.Recordset.Bookmark = sLastRecord 'Pone la propiedad Bookmark del Recordset 'igual a la variable de marcador. 'Esto regresará al usuario al registro 'en que estaba cuando se oprimió el botón Agregar txtNombreEspecialidad.SetFocus 'Centra la atención en el primer control asociado

End Sub Private Sub cmdCerrar_Click()

Unload Me End Sub Private Sub cmdSalvar_Click() If meCodeEspecialidad.Text <> "" And txtNombreEspecialidad <> "" And txtNombreJefe.Text <> "" Then 'En las siguientes líneas los campos de la tabla Estudiante 'toman los valores introducidos en el formulario. dtaEspecialidad.Recordset("cod_espec") = meCodeEspecialidad.Text dtaEspecialidad.Recordset("nomb_espec") = UCase(txtNombreEspecialidad.Text) dtaEspecialidad.Recordset("jefe_espec") = UCase(txtNombreJefe) dtaEspecialidad.Recordset.Update 'Envía el registro... cmdAgregar.Enabled = True cmdCancelar.Enabled = True cmdBorrar.Enabled = True

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 36: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 36 Ing. Jacqueline Montes López

cmdActualizar.Enabled = True cmdSalvar.Enabled = False Else MsgBox "Datos Incompletos... verifique" If txtNombreEspecialidad = "" Then txtNombreEspecialidad.SetFocus Else If meCodeEspecialidad.Text = "" Then meCodeEspecialidad.SetFocus Else txtNombreJefe.SetFocus End If End If End If

End Sub Private Sub dtaEspecialidad_Validate(Action As Integer, Save As Integer) ' cmdAgregar.Enabled = True 'cmdAgregar.Default = True ' cmdCancelar.Enabled = True 'cmdBorrar.Enabled = True 'cmdActualizar.Enabled = True 'cmdSalvar.Enabled = True

End Sub Private Sub Form_Activate()

Dim wsWS As Workspace 'Requerimos un área de trabajo 'Abre el área de trabajo... Set wsWS = DBEngine.Workspaces(0) 'Abre la base de datos... Set DbSACRA = wsWS.OpenDatabase("C:\SACRA\SACRA_DB.MDB") 'y abre la tabla. Set rsEspecialidad = DbSACRA.OpenRecordset("Especialidad", dbOpenTable) txtNombreEspecialidad.SetFocus

End Sub

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 37: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 37 Ing. Jacqueline Montes López

Private Sub meCodeEspecialidad_LostFocus() Set rsEspecialidad = DbSACRA.OpenRecordset("Especialidad", dbOpenTable) If meCodeEspecialidad.Text <> "" And iLastAction = 1 Then rsEspecialidad.Index = "cod_espec" rsEspecialidad.Seek "=", meCodeEspecialidad.Text ' Vuelve al registro actual si falla Seek. If rsEspecialidad.NoMatch = False Then MsgBox "Código de asignatura existe..." meCodeEspecialidad.SelStart = 1 meCodeEspecialidad.SelLength = Len(meCodeEspecialidad) meCodeEspecialidad.SetFocus End If End If

End Sub Private Sub txtNombreEspecialidad_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then meCodeEspecialidad.SetFocus End If

End Sub Private Sub txtNombreJefe_keypress(KeyAscii As Integer)

If KeyAscii = 13 Then cmdSalvar.SetFocus End If

End Sub

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 38: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 38 Ing. Jacqueline Montes López

El Control DBGrid (TrueDBGrid) 1.1 Propiedades más utilizadas del Control DBGrid (TrueDBGrid).

1.1.1 Disponibles en tiempo de diseño (y ejecución) 1.1.1.1 Name 1.1.1.2 Caption 1.1.1.3 AllowAddNew 1.1.1.4 AllowArrows 1.1.1.5 AllowDelete 1.1.1.6 AllowUpdate 1.1.1.7 DataSource 1.1.1.8 Visible 1.1.1.9 Height 1.1.1.10 Width 1.1.1.11 Columns

1.1.2 Disponibles en tiempo de ejecución 1.1.2.1 Col y Row

1.2 Eventos más utilizados del Control DBGrid.

1.2.1 Click 1.2.2 BeforeDelete 1.2.3 BeforeUpdate 1.2.4 BeforeInsert 1.2.5 AfterDelete 1.2.6 AfterUpdate 1.2.7 AfterInsert

El control DBGrid (TrueDBGrid) Muestra y permite la manipulación de datos de una serie de filas y columnas que corresponden a registros y campos de un objeto Recordset. Sintaxis DataGrid Propiedades más utilizadas del Control DBGrid (TrueDBGrid) Disponibles en tiempo de diseño (y ejecución) Name: Devuelve el nombre utilizado en el código para identificar un formulario, un control o un objeto de acceso a datos. Es de sólo lectura en tiempo de ejecución. Caption: Una frase a modo de mensaje que se despliega en el propio control Data.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 39: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 39 Ing. Jacqueline Montes López

AllowAddNew: Devuelve o establece un valor que indica si el usuario puede agregar nuevos registros al objeto Recordset subyacente a un control DataGrid. Sintaxis objeto.AllowAddNew [= valor] La sintaxis de la propiedad AllowAddNew consta de las siguientes partes: Parte Descripción

objeto Una expresión de objeto que da como resultado un objeto de la lista Se aplica a.

valor Una expresión booleana que determina si un usuario puede agregar nuevos registros, como se describe en Valores.

Valores Los valores admitidos para valor son: Valor Descripción

True Los usuarios pueden agregar registros al objeto Recordset subyacente al control DataGrid.

False Los usuarios no pueden agregar registros al objeto Recordset subyacente al control DataGrid.

Comentarios Si la propiedad AllowAddnew es True, la última fila que se muestra en el control DataGrid se deja en blanco para permitir a los usuarios introducir nuevos registros. Si la propiedad AllowAddNew es False, no se muestra ninguna línea en blanco. El objeto Recordset subyacente puede no permitir inserciones incluso aunque la propiedad AllowAddNew sea True. En este caso, se producirá un error si el usuario intenta agregar un registro. AllowArrows: Establece o devuelve un valor que determina si el control utiliza las teclas de dirección para desplazarse por la cuadrícula. Sintaxis objeto.AllowArrows [= valor] La sintaxis de la propiedad AllowArrows consta de las siguientes partes: Parte Descripción

objeto Expresión de objeto que da como resultado un objeto de la lista Se aplica a.

valor Expresión booleana que determina las teclas de dirección que se usarán para desplazarse por la cuadrícula, como se describe en Valores.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 40: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 40 Ing. Jacqueline Montes López

Valores Los valores admitidos para valor son: Valor Descripción

True (Predeterminado) El usuario puede usar las teclas de dirección tanto para moverse de celda en celda como de fila en fila.

False Las teclas de flecha a la izquierda y flecha a la derecha moverán el enfoque de un control a otro y no se pueden usar para moverse entre celdas.

Comentarios El usuario no puede usar las teclas de dirección para moverse fuera del control DataGrid cuando esta propiedad está establecida a True. Si la propiedad WrapCellPointer también está establecida a True, las teclas de dirección se ajustarán alrededor de las filas y el usuario podrá desplazarse por toda la cuadrícula con las teclas de dirección. AllowDelete: Devuelve o establece un valor que indica si el usuario puede eliminar registros del objeto Recordset subyacente a un control Datagrid. Sintaxis objeto.AllowDelete [= valor] La sintaxis de la propiedad AllowDelete consta de las siguientes partes: Parte Descripción

objeto Una expresión de objeto que da como resultado un objeto de la lista Se aplica a.

valor Una expresión booleana que determina si un usuario puede eliminar registros, como se describe en Valores.

Valores Los valores admitidos para valor son: Valor Descripción

True Los usuarios pueden eliminar registros del objeto Recordset subyacente al control DataGrid.

False Los usuarios no pueden eliminar registros del objeto Recordset subyacente al control DataGrid.

Comentarios Utilice la propiedad AllowDelete para impedir que los usuarios eliminen registros del Recordset a través de la interacción con el control DataGrid. El objeto Recordset subyacente puede no permitir eliminaciones incluso aunque la propiedad AllowDelete sea True para el control DataGrid. En este caso, se producirá un error si el usuario intenta eliminar un registro.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 41: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 41 Ing. Jacqueline Montes López

Nota Después de eliminar un registro de un control DataGrid, se debe usar el método Refresh para forzar la actualización de DataGrid. De lo contrario, a pesar de haber eliminado el registro, aún se mostrará en DataGrid. AllowUpdate: Devuelve o establece un valor que indica si un usuario puede modificar datos del control DataGrid. Sintaxis objeto.AllowUpdate [= valor] La sintaxis de la propiedad AllowUpdate consta de las siguientes partes: Parte Descripción

objeto Una expresión de objeto que da como resultado un objeto de la lista Se aplica a.

valor Una expresión booleana que determina si el usuario puede modificar datos, como se describe en Valores.

Valores Los valores admitidos para valor son: Valor Descripción True El usuario puede modificar datos del control DataGrid False El usuario no puede modificar datos del control DataGrid Comentarios Cuando la propiedad AllowUpdate es False, el usuario aún puede desplazarse a través del control DataGrid y seleccionar datos, pero no puede modificar ninguno de los valores; se pasa por alto cualquier intento de cambiar datos de la cuadrícula. También puede usar las propiedades del objeto Column para hacer que columnas individuales del control DataGrid sean de sólo lectura, pero los valores de la propiedad AllowUpdate tienen prioridad sobre los valores establecidos para las columnas (sin modificar éstos). Nota El objeto Recordset quizá no permita actualizaciones incluso si AllowUpdate es True para el control DataGrid; en este caso se produce un error interceptable cuando el usuario intenta cambiar el registro. DataSource: Devuelve o establece el origen de datos mediante el cual un receptor de datos enlaza con una base de datos. Sintaxis objeto.DataSource [=datasource]

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 42: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 42 Ing. Jacqueline Montes López

La sintaxis de la propiedad DataSource consta de las siguientes partes: Parte Descripción

objeto Una expresión de objeto que da como resultado un objeto de la lista Se aplica a.

datasource Una referencia a un objeto que califica como un origen de datos, incluso objetos Recordset ADO y clases o controles de usuario definidos como orígenes de datos (propiedad DataSourceBehavior = vbDataSource).

Visible: Devuelve o establece un valor que indica si un objeto es visible o está oculto. Height y Width: Devuelven o establecen las dimensiones de un objeto o el ancho del objeto Columns de un control DataGrid. Para los objetos Printer y Screen, no están disponibles en tiempo de diseño. Sintaxis objeto.Height [= número] objeto.Width [= número] La sintaxis de las propiedades Height y Width consta de las siguientes partes: Parte Descripción

objeto Una expresión de objeto que da como resultado un objeto de la lista Se aplica a.

número Una expresión numérica que especifica las dimensiones del objeto, según se indica en Valores.

Valores Las medidas se calculan de la siguiente forma: Form: alto y ancho externos del formulario, incluyendo los bordes y la barra de título. Control: se mide desde el centro del borde del control, de forma que los controles con anchos de borde distintos se alineen correctamente. Estas propiedades utilizan las unidades de escala del contenedor de un control. Objeto Printer: las dimensiones físicas del papel configurado para el dispositivo de impresión. No está disponible en tiempo de diseño. Si se establecen en tiempo de ejecución, los valores de estas propiedades se usarán en lugar de la propiedad PaperSize. Objeto Screen: el alto y el ancho de la pantalla. No están disponibles en tiempo de diseño y son de sólo lectura en tiempo de ejecución.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 43: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 43 Ing. Jacqueline Montes López

Objeto Picture: el alto y el ancho de la imagen en unidades HiMetric. Comentarios Para los objetos Form, Printer y Screen, estas propiedades se miden siempre en twips. Para los formularios y controles, los valores de estas propiedades cambian cuando el usuario o el código modifican el tamaño del objeto. Los límites máximos de estas propiedades para todos los objetos dependen del sistema. Si establece las propiedades Height y Width para un controlador de impresora que no admite su uso, no se producirá ningún error y el tamaño del papel continuará siendo el mismo. Si establece Height y Width para un controlador de impresora que sólo admite en ellas determinados valores, no se producirá ningún error y en la propiedad se establecerá un valor que el controlador admita. Por ejemplo, puede ocurrir que al intentar establecer 150 en Height, el controlador establezca 144. Utilice las propiedades Height, Width, Left y Top para realizar operaciones o cálculos que impliquen el área total de un objeto, como puede ser mover el objeto o cambiar su tamaño. Utilice las propiedades ScaleLeft, ScaleTop, ScaleHeight y ScaleWidth para realizar operaciones o cálculos que impliquen solamente el área interna de un objeto, como dibujar o mover objetos dentro de otro objeto. Nota La propiedad Height no puede modificarse en los controles DriveListBox ni ComboBox, en los cuales el valor de la propiedad Style es 0 (cuadro combinado desplegable) o 2 (lista desplegable). Para el objeto Columns del control DataGrid, Width se especifica en la unidad de medida del objeto que contiene el control DataGrid. El valor predeterminado de Width es el valor de la propiedad DefColWidth del control DataGrid. Columns: Devuelve una colección de objetos Column. Sintaxis objeto.Columns El marcador de posición objeto representa una expresión de objeto que da como resultado un objeto que puede ser un DataGrid. Comentarios La propiedad Columns devuelve una colección de objetos Column en un Variant. Puede manipular la mayoría de los atributos del control DataGrid si cambia las propiedades de los objetos Column. Elija un determinado objeto Column mediante la propiedad Col.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 44: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 44 Ing. Jacqueline Montes López

Disponibles en tiempo de ejecución. Col y Row: Devuelven o establecen la celda activa en un control DataGrid. No está disponible en tiempo de diseño. Sintaxis objeto.Col [= número] objeto.Row [= número] La sintaxis de las propiedades Col y Row consta de las siguientes partes: Parte Descripción

objeto Una expresión de objeto que da como resultado un objeto de la lista Se aplica a.

número El número de la columna o fila que contiene la celda activa. Comentarios Utilice estas propiedades para especificar una celda de un control DataGrid, o para averiguar la fila o columna que contiene la celda activa en una región seleccionada. Las filas y columnas se numeran a partir de cero, comenzando por la parte superior para las filas y por la parte izquierda para las columnas. Al establecer estas propiedades en tiempo de ejecución no cambian las celdas seleccionadas. Para especificar una región seleccionada, utilice las propiedades SelEndCol, SelStartCol, SelEndRow y SelStartRow. Nota Las propiedades Col y Row son distintas de las propiedades Cols y Rows. Eventos más utilizados del control DBGrid. Click: Ocurre cuando el usuario presiona y suelta un botón del mouse (ratón) en un objeto. También puede ocurrir cuando se cambia el valor de un control. BeforeDelete: Se produce antes de que el registro seleccionado se elimine de un control DataGrid. BeforeUpdate: Se produce antes de que los datos de un control DataGrid pasen al búfer de copia del control. BeforeInsert: Se produce antes de que se inserten nuevos registros en un control DataGrid. AfterDelete: Se produce después de que el usuario elimina un registro seleccionado de un control DataGrid. AfterUpdate: Se produce después de que los datos cambiados se hayan escrito en la base de datos desde un control DataGrid. AfterInsert: Se produce después de que el usuario inserte un registro nuevo en un control DataGrid.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 45: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 45 Ing. Jacqueline Montes López

Actividad de la Clase Nº11 Ejemplo No. 1 del uso de Control DBGrid en un formulario. Objetivo: Crear un formulario que sirva de interfaz con la Tabla Clientes de la base de datos EMPRESA. Tome como sugerencia el diseño que aparece en la siguiente imagen. Modo Diseño Modo Ejecución Tabla de objetos y sus propiedades para el ejemplo.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 46: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 46 Ing. Jacqueline Montes López

Objeto Propiedad Valor Form Name frmClientes BorderStyle 2-Sizable Caption Datos de Clientes MDIChild True WindowState 2-Maximized Control Data Name dtaClientes Caption Connect Access DatabaseName Ruta a la base de datos NWind (Neptuno) Recordsource Clientes Visible True DBCombo Name dbcClientes BoundColumn IdCliente DataSource dtaClientes ListField IdCliente (si desea puede utilizar NombreCompañía) MatchEntry 0-dblBasicMatching RowSource dtaClientes Style 1-dbcSimpleCombo CommandButton Name cmdCerrar Caption Ce&rrar Label Name lblClientes Caption Cliente : Label Name lblTotalRegistros Caption Control DBGrid Name dbgClientes AllowAddNew True AllowArrows True AllowDelete True AllowUpdate True DataSource dtaClientes

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 47: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 47 Ing. Jacqueline Montes López

Código asociado a los eventos de los diferentes controles utilizados Private Sub cmdCerrar_Click() Unload Me End Sub Private Sub dbcClientes_Click(Area As Integer) ‘Si existe algún dato seleccionado en el DBCombo... If IsNull(dbcClientes.SelectedItem) = False Then dtaClientes.Recordset.Bookmark = dbcClientes.SelectedItem End If End Sub Private Sub dbcClientes_KeyPress(KeyAscii As Integer) ‘Si se presionó Enter... If KeyAscii = 13 Then ‘y si existe algún dato seleccionado en el DBCombo... If IsNull(dbcClientes.SelectedItem) = False Then dtaClientes.Recordset.Bookmark = dbcClientes.SelectedItem dbgClientes.Col = 0 dbgClientes.SetFocus End If End If End Sub Private Sub dbgClientes_BeforeDelete(Cancel As Integer) If MsgBox("Está seguro de eliminar este registro ?", vbQuestion + vbYesNo, "Eliminando Registros") <> vbYes Then Cancel = True Else dbgClientes.SetFocus End If End Sub Private Sub dtaClientes_Reposition() Dim TotalRegistros As Long TotalRegistros = (dtaClientes.Recordset.RecordCount) dtaClientes.Caption = dtaClientes.Recordset.AbsolutePosition + 1 lblTotalRegistros.Caption = " de " & TotalRegistros End Sub Private Sub Form_Activate() ‘Mandamos el enfoque al DBCombo donde despliego los Id. de Clientes... dbcClientes.SetFocus End Sub Private Sub Form_Load()

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 48: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 48 Ing. Jacqueline Montes López

‘Habilitar las siguientes líneas de código equivale a establecer la propiedad ‘Recordsource igual a Clientes en modo de diseño... 'dtaClientes.RecordSource = "Select * from Clientes" ‘Consulta SQL... 'dtaClientes.Refresh End Sub Private Sub Form_Resize() If Me.WindowState = 0 Then 'Botón Minimizar... dbgClientes.Height = Me.Height - 1200 dbgClientes.Width = Me.Width - 200 dtaClientes.Top = dbgClientes.Top + dbgClientes.Height + 100 dbcClientes.Top = dtaClientes.Top cmdCerrar.Top = dtaClientes.Top lblCliente.Top = dtaClientes.Top lblTotalRegistros.Top = dtaClientes.Top ElseIf Me.WindowState = 2 Then 'Botón Maximizar... dbgClientes.Height = Me.Height - 1200 dbgClientes.Width = Me.Width - 400 dtaClientes.Top = dbgClientes.Top + dbgClientes.Height + 100 dbcClientes.Top = dtaClientes.Top cmdCerrar.Top = dtaClientes.Top lblCliente.Top = dtaClientes.Top lblTotalRegistros.Top = dtaClientes.Top End If End Sub

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 49: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 49 Ing. Jacqueline Montes López

1. Bases de Datos y Objetos de Acceso a Datos (DAO) (Continuación)

1.1 Conceptos Fundamentales. 1.2 Jerarquía de los DAO. 1.3 El objeto Recordset. 1.4 Introducción a SQL.

Ejemplo No. 1 del uso de Control DBGrid en un formulario. Objetivo: Crear un formulario que permita filtrar información referente a los Pedidos hechos por:

• Todos los clientes en una fecha específica • Todos los clientes en un período • Un mismo cliente en una fecha específica • Un mismo cliente en un período

Tome como sugerencia el diseño que aparece en la siguiente imagen. Modo Diseño Defina Ud. mismo(a) las propiedades de los objetos que va a utilizar.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 50: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 50 Ing. Jacqueline Montes López

Código asociado a los eventos de los diferentes controles utilizados ‘Sección General-Declaraciones del formulario... Dim rsClientesPedidos As Recordset Dim rsClientesPorFecha As Recordset Private Sub cmdFechaEspecífica_Click() Dim Fecha As String Dim sqlSQL As String Fecha = InputBox("Introduzca Fecha", "Datos para Generar Salida", Date) If IsDate(Fecha) = False Then cmdInfoFecha.SetFocus Exit Sub End If sqlSQL = "SELECT DISTINCTROW Clientes.IdCliente, Clientes.NombreCompañía, " _ & "Clientes.NombreContacto, Clientes.CargoContacto, Clientes.Dirección, Clientes.Ciudad, " _ & "Clientes.Región, Clientes.CódPostal, Clientes.País, Clientes.Teléfono, Clientes.Fax, " _ & "Pedidos.IdPedido, Pedidos.IdEmpleado, Pedidos.FechaPedido, Pedidos.FechaEntrega, Pedidos.FechaEnvío, " _ & "Pedidos.FormaEnvío, Pedidos.Cargo, Pedidos.Destinatario, Pedidos.DirecciónDestinatario, Pedidos.CiudadDestinatario, " _ & "Pedidos.RegiónDestinatario, Pedidos.CódPostalDestinatario, Pedidos.PaísDestinatario " _ & "FROM Clientes INNER JOIN Pedidos ON Clientes.IdCliente = Pedidos.IdCliente " _ & "WHERE (((Pedidos.FechaPedido)=#" & CDate(Fecha) & "#));" Set rsClientesPorFecha = DBNeptuno.OpenRecordset(sqlSQL, dbOpenDynaset) Set dtaPedidosCliente.Recordset = rsClientesPorFecha rsClientesPorFecha.MoveLast 'Estas líneas producen el mismo resultado que las dos anteriores... 'dtaPedidosCliente.RecordSource = sqlSQL 'dtaPedidosCliente.Refresh End Sub Private Sub cmdPedidosClienteFecha_Click() Dim Fecha, Cliente As String Dim sqlSQL As String Cliente = InputBox("Introduzca el Cliente del cual desea la información", "Datos para Generar Salida")

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 51: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 51 Ing. Jacqueline Montes López

Fecha = InputBox("Introduzca Fecha", "Datos para Generar Salida", Date) If IsDate(Fecha) = False Then cmdPedidosClienteFecha.SetFocus Exit Sub End If sqlSQL = "SELECT DISTINCTROW Clientes.IdCliente, Clientes.NombreCompañía, " _ & "Clientes.NombreContacto, Clientes.CargoContacto, Clientes.Dirección, Clientes.Ciudad, " _ & "Clientes.Región, Clientes.CódPostal, Clientes.País, Clientes.Teléfono, Clientes.Fax, " _ & "Pedidos.IdPedido, Pedidos.IdEmpleado, Pedidos.FechaPedido, Pedidos.FechaEntrega, Pedidos.FechaEnvío, " _ & "Pedidos.FormaEnvío, Pedidos.Cargo, Pedidos.Destinatario, Pedidos.DirecciónDestinatario, Pedidos.CiudadDestinatario, " _ & "Pedidos.RegiónDestinatario, Pedidos.CódPostalDestinatario, Pedidos.PaísDestinatario " _ & "FROM Clientes INNER JOIN Pedidos ON Clientes.IdCliente = Pedidos.IdCliente " _ & "WHERE (((Clientes.IdCliente)='" & Cliente & "') AND ((Pedidos.FechaPedido)=#" & CDate(Fecha) & "#));" Set rsClientesPorFecha = DBNeptuno.OpenRecordset(sqlSQL, dbOpenDynaset) Set dtaPedidosCliente.Recordset = rsClientesPorFecha rsClientesPorFecha.MoveLast 'Estas líneas producen el mismo resultado que las dos anteriores... 'dtaPedidosCliente.RecordSource = sqlSQL 'dtaPedidosCliente.Refresh End Sub Private Sub cmdPedidosClienteFecha1_Click() Dim Fecha, Cliente As String Dim sqlSQL As String Cliente = InputBox("Introduzca el Cliente del cual desea la información", "Datos para Generar Salida") Fecha = InputBox("Introduzca Fecha", "Datos para Generar Salida", Date) If IsDate(Fecha) = False Then cmdPedidosClienteFecha.SetFocus Exit Sub End If sqlSQL = "SELECT DISTINCTROW Clientes.IdCliente, Clientes.NombreCompañía, " _ & "Clientes.NombreContacto, Clientes.CargoContacto, Clientes.Dirección, Clientes.Ciudad, " _ & "Clientes.Región, Clientes.CódPostal, Clientes.País, Clientes.Teléfono, Clientes.Fax, " _ & "Pedidos.IdPedido, Pedidos.IdEmpleado, Pedidos.FechaPedido, Pedidos.FechaEntrega, Pedidos.FechaEnvío, " _

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 52: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 52 Ing. Jacqueline Montes López

& "Pedidos.FormaEnvío, Pedidos.Cargo, Pedidos.Destinatario, Pedidos.DirecciónDestinatario, Pedidos.CiudadDestinatario, " _ & "Pedidos.RegiónDestinatario, Pedidos.CódPostalDestinatario, Pedidos.PaísDestinatario " _ & "FROM Clientes INNER JOIN Pedidos ON Clientes.IdCliente = Pedidos.IdCliente " _ & "WHERE (((Clientes.IdCliente)='" & Cliente & "') AND ((Pedidos.FechaPedido)=#" & CDate(Fecha) & "#));" dtaPedidosCliente.RecordSource = sqlSQL dtaPedidosCliente.Refresh End Sub Private Sub cmdPedidosClientePeríodo_Click() Dim Fecha, Fecha1, Cliente As String Dim sqlSQL As String Cliente = InputBox("Introduzca el Cliente del cual desea la información", "Datos para Generar Salida") Fecha = InputBox("Introduzca Fecha Inicio Período", "Datos para Generar Salida", Date) Fecha1 = InputBox("Introduzca Fecha que culmina el Período", "Datos para Generar Salida") If IsDate(Fecha) = False Then cmdPedidosClienteFecha.SetFocus Exit Sub End If sqlSQL = "SELECT DISTINCTROW Clientes.IdCliente, Clientes.NombreCompañía, " _ & "Clientes.NombreContacto, Clientes.CargoContacto, Clientes.Dirección, Clientes.Ciudad, " _ & "Clientes.Región, Clientes.CódPostal, Clientes.País, Clientes.Teléfono, Clientes.Fax, " _ & "Pedidos.IdPedido, Pedidos.IdEmpleado, Pedidos.FechaPedido, Pedidos.FechaEntrega, Pedidos.FechaEnvío, " _ & "Pedidos.FormaEnvío, Pedidos.Cargo, Pedidos.Destinatario, Pedidos.DirecciónDestinatario, Pedidos.CiudadDestinatario, " _ & "Pedidos.RegiónDestinatario, Pedidos.CódPostalDestinatario, Pedidos.PaísDestinatario " _ & "FROM Clientes INNER JOIN Pedidos ON Clientes.IdCliente = Pedidos.IdCliente " _ & "WHERE (((Clientes.IdCliente)='" & Cliente & "') AND ((Pedidos.FechaPedido)>=#" & Fecha & "# And (Pedidos.FechaPedido)<=#" & Fecha1 & "#))" Set rsClientesPorFecha = DBNeptuno.OpenRecordset(sqlSQL, dbOpenDynaset) Set dtaPedidosCliente.Recordset = rsClientesPorFecha rsClientesPorFecha.MoveLast 'Estas líneas producen el mismo resultado que las dos anteriores... 'dtaPedidosCliente.RecordSource = sqlSQL 'dtaPedidosCliente.Refresh End Sub Private Sub cmdPedidosClientePeríodo1_Click()

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 53: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 53 Ing. Jacqueline Montes López

Dim Fecha, Fecha1, Cliente As String Dim sqlSQL As String Cliente = InputBox("Introduzca el Cliente del cual desea la información", "Datos para Generar Salida") Fecha = InputBox("Introduzca Fecha Inicio Período", "Datos para Generar Salida", Date) Fecha1 = InputBox("Introduzca Fecha que culmina el Período", "Datos para Generar Salida") If IsDate(Fecha) = False Then cmdPedidosClienteFecha.SetFocus Exit Sub End If sqlSQL = "SELECT DISTINCTROW Clientes.IdCliente, Clientes.NombreCompañía, " _ & "Clientes.NombreContacto, Clientes.CargoContacto, Clientes.Dirección, Clientes.Ciudad, " _ & "Clientes.Región, Clientes.CódPostal, Clientes.País, Clientes.Teléfono, Clientes.Fax, " _ & "Pedidos.IdPedido, Pedidos.IdEmpleado, Pedidos.FechaPedido, Pedidos.FechaEntrega, Pedidos.FechaEnvío, " _ & "Pedidos.FormaEnvío, Pedidos.Cargo, Pedidos.Destinatario, Pedidos.DirecciónDestinatario, Pedidos.CiudadDestinatario, " _ & "Pedidos.RegiónDestinatario, Pedidos.CódPostalDestinatario, Pedidos.PaísDestinatario " _ & "FROM Clientes INNER JOIN Pedidos ON Clientes.IdCliente = Pedidos.IdCliente " _ & "WHERE (((Clientes.IdCliente)='" & Cliente & "') AND ((Pedidos.FechaPedido)>=#" & Fecha & "# And (Pedidos.FechaPedido)<=#" & Fecha1 & "#))" dtaPedidosCliente.RecordSource = sqlSQL dtaPedidosCliente.Refresh End Sub Private Sub cmdPedidosPeríodo_Click() Dim Fecha, Fecha1 As String Dim sqlSQL As String Fecha = InputBox("Fecha de Inicio del Período", "Datos para Generar Salida", Date) Fecha1 = InputBox("Fecha que culmina el Período", "Datos para Generar Salida", DateAdd("w", 1, Date)) If IsDate(Fecha) = False Then cmdPedidosPeríodo.SetFocus Exit Sub End If

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 54: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 54 Ing. Jacqueline Montes López

If IsDate(Fecha1) = False Then cmdPedidosPeríodo.SetFocus Exit Sub End If sqlSQL = "SELECT DISTINCTROW Clientes.IdCliente, Clientes.NombreCompañía, " _ & "Clientes.NombreContacto, Clientes.CargoContacto, Clientes.Dirección, Clientes.Ciudad, " _ & "Clientes.Región, Clientes.CódPostal, Clientes.País, Clientes.Teléfono, Clientes.Fax, " _ & "Pedidos.IdPedido, Pedidos.IdEmpleado, Pedidos.FechaPedido, Pedidos.FechaEntrega, Pedidos.FechaEnvío, " _ & "Pedidos.FormaEnvío, Pedidos.Cargo, Pedidos.Destinatario, Pedidos.DirecciónDestinatario, Pedidos.CiudadDestinatario, " _ & "Pedidos.RegiónDestinatario, Pedidos.CódPostalDestinatario, Pedidos.PaísDestinatario " _ & "FROM Clientes INNER JOIN Pedidos ON Clientes.IdCliente = Pedidos.IdCliente " _ & "WHERE (((Pedidos.FechaPedido)>=#" & Fecha & "# And (Pedidos.FechaPedido)<=#" & Fecha1 & "#));" Set rsClientesPorFecha = DBNeptuno.OpenRecordset(sqlSQL, dbOpenDynaset) Set dtaPedidosCliente.Recordset = rsClientesPorFecha rsClientesPorFecha.MoveLast 'Estas líneas producen el mismo resultado que las dos anteriores... 'dtaPedidosCliente.RecordSource = sqlSQL 'dtaPedidosCliente.Refresh End Sub Private Sub dtaPedidosCliente_Reposition() dtaPedidosCliente.Caption = dtaPedidosCliente.Recordset.RecordCount & " Registros" End Sub Private Sub Form_Load() dtaPedidosCliente.DatabaseName = DBNeptuno.Name End Sub Private Sub Form_Resize() If Me.WindowState = 0 Then 'Botón Minimizar... tdbgPedidosCliente.Height = Me.Height - 1600 tdbgPedidosCliente.Width = Me.Width - 200 dtaPedidosCliente.Top = tdbgPedidosCliente.Top + tdbgPedidosCliente.Height + 100 cmdFechaEspecífica.Top = dtaPedidosCliente.Top cmdPedidosPeríodo.Top = dtaPedidosCliente.Top cmdPedidosClienteFecha.Top = tdbgPedidosCliente.Top + tdbgPedidosCliente.Height + cmdFechaEspecífica.Height + 90 cmdPedidosClientePeríodo.Top = tdbgPedidosCliente.Top + tdbgPedidosCliente.Height + cmdFechaEspecífica.Height + 90

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 55: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 55 Ing. Jacqueline Montes López

ElseIf Me.WindowState = 2 Then 'Botón Maximizar... tdbgPedidosCliente.Height = Me.Height - 1600 tdbgPedidosCliente.Width = Me.Width - 400 dtaPedidosCliente.Top = tdbgPedidosCliente.Top + tdbgPedidosCliente.Height + 100 cmdFechaEspecífica.Top = dtaPedidosCliente.Top cmdPedidosPeríodo.Top = dtaPedidosCliente.Top cmdPedidosClienteFecha.Top = tdbgPedidosCliente.Top + tdbgPedidosCliente.Height + cmdFechaEspecífica.Height + 90 cmdPedidosClientePeríodo.Top = tdbgPedidosCliente.Top + tdbgPedidosCliente.Height + cmdFechaEspecífica.Height + 90 End If End Sub

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 56: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 56 Ing. Jacqueline Montes López

Bases de Datos y Objetos de Acceso a Datos (DAO) (Continuación) 1. Instrucciones SQL (Structured Query Languaje: Lenguaje de Consulta Estructurado)

1.1 La Instrucción SELECT 1.1.1 Uso del comando SELECT para crear Recordsets.

1.1.1.1 Generar instrucciones SELECT que incluyan el uso de variables y/o controles. 1.2 La instrucción DELETE. 1.3 La instrucción UPDATE. 1.4 La instrucción INSERT INTO.

2. El objeto QueryDef 2.1 Uso del comando SELECT para crear QueryDefs

2.1.1 Generar instrucciones SELECT que incluyan el uso de variables y/o controles. 2.1.2 Generar instrucciones SELECT que incluyan el uso de parámetros.

3. El objeto Printer. 4. Funciones de utilidad para manipular variables:

4.1 InputBox 4.2 DateAdd() y Date() 4.3 Left() y Right() 4.4 Mid() 4.5 Cdate() 4.6 IsDate() e IsNumeric()

1. Instrucciones SQL (Structured Query Languaje: Lenguaje de Consulta Estructurado) 1.1 SELECT (Instrucción) Pide al motor de base de datos Microsoft Jet que devuelva información de la base de datos como un conjunto de registros. Sintaxis SELECT [predicado] { * | tabla.* | [tabla.]campo1 [AS alias1] [, [tabla.]campo2 [AS alias2] [, ...]]} FROM expresióntabla [, ...] [IN basededatosexterna] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION] La sintaxis de la instrucción SELECT consta de las siguientes partes:

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 57: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 57 Ing. Jacqueline Montes López

Parte Descripción predicado Uno de los siguientes predicados: ALL, DISTINCT, DISTINCTROW o TOP. Puede

utilizar el predicado para limitar el número de registros devueltos. Si no especifica ninguno, el valor predeterminado es ALL.

* Especifica que se seleccionan todos los campos de la tabla o tablas especificadas. tabla

El nombre de la tabla que contiene los campos de la que se van a seleccionar los registros.

campo1, campo2: Los nombres de los campos que contienen los datos que desea recuperar. Si incluye más

de un campo, éstos se recuperan en el orden enumerado. alias1, alias2 Los nombres que se van a utilizar como encabezados de columnas en vez de los

nombres de columnas originales en tabla. expresióntabla

El nombre de la tabla o las tablas que contienen los datos que desea recuperar. basededatosexterna

El nombre de la base de datos que contiene las tablas en expresióntabla si no están en la base de datos activa.

Comentarios Para realizar esta operación, el motor de base de datos Microsoft Jet busca la tabla o las tablas especificadas, extrae las columnas elegidas, selecciona las filas que cumplen los criterios y ordena o agrupa las filas resultantes en el orden especificado. Las instrucciones SELECT no modifican los datos de la base de datos. La instrucción SELECT suele ser la primera palabra en una instrucción SQL. La mayoría de las instrucciones SQL son instrucciones SELECT o SELECT...INTO. La sintaxis mínima para una instrucción SELECT es: SELECT campos FROM tabla Puede utilizar un asterisco (*) para seleccionar todos los campos de una tabla. El ejemplo siguiente selecciona todos los campos de la tabla Empleados:

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 58: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 58 Ing. Jacqueline Montes López

SELECT * FROM Empleados; Si se incluye un nombre de campo en más de una tabla en la instrucción FROM, escriba delante el nombre de la tabla y el operador . (punto). En el siguiente ejemplo, el campo Departamento está en la tabla Empleados y en la tabla Supervisores. La instrucción SQL selecciona los departamentos de la tabla Empleados y los nombres de supervisores de la tabla Supervisores: SELECT Empleados.Departamento, Supervisores.NombreSupervisor FROM Empleados INNER JOIN Supervisores WHERE Empleados.Departamento = Supervisores.Departamento; Cuando se crea un objeto Recordset, el motor de base de datos Microsoft Jet utiliza el nombre de campo de la tabla como el nombre de objeto Field en el objeto Recordset. Si desea un nombre de campo diferente o un nombre que no participe en la expresión utilizada para generar el campo, utilice la palabra reservada AS. El siguiente ejemplo utiliza el título Nacimiento para dar nombre al objeto Field devuelto en el objeto Recordset resultante: SELECT FechaNacimiento AS Nacimiento FROM Empleados; Siempre que utilice funciones de dominio agregado o consultas que devuelvan nombres de objetos Field ambiguos o duplicados, debe utilizar la cláusula AS para proporcionar un nombre alternativo para el objeto Field. El siguiente ejemplo utiliza el título CuentaEncabezado para dar nombre al objeto Field devuelto del objeto Recordset resultante: SELECT COUNT(IdEmpleado) AS CuentaEncabezado FROM Empleados; Puede utilizar otras cláusulas en una instrucción SELECT para limitar y organizar aún más los datos devueltos. Para obtener más información al respecto, vea el tema de Ayuda relativo a las cláusulas que esté utilizando. 1.1.1 Uso del Comando SELECT para crear Recordsets 1.1.1.1 Generar instrucciones SQL que incluyan el uso de variables y/o controles. Cuando se trabaja con objetos de acceso a datos (DAO), puede que necesite construir una instrucción SQL en el código. Por ejemplo, si está creando un nuevo objeto Recordset, es necesario establecer una cadena SQL válida. Es muy posible que también necesite una instrucción SQL cuando cree un objeto QueryDef. La forma más fácil de construir una instrucción SQL es crear una consulta en la cuadrícula de diseño de la consulta, cambiar a vista SQL, y copiar y pegar la instrucción SQL correspondiente en su código. A menudo una consulta debe estar basada en valores que suministra el usuario o que cambian en situaciones diferentes. Si éste es el caso, necesitará incluir variables o valores de control en la consulta. El motor de base de datos Microsoft Jet procesa todas las instrucciones SQL, pero no las variables o los controles. Por tanto, debe construir su instrucción SQL de forma que Microsoft Access determine

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 59: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 59 Ing. Jacqueline Montes López

primero estos valores y luego los concatene en la instrucción SQL que se pasa al motor de base de datos Jet. El siguiente ejemplo muestra cómo crear un objeto Recordset con una simple instrucción SQL. Esta consulta devuelve todos los pedidos desde una tabla Pedidos que fue colocada después del 31-3-96: Dim dbs As Database, cadSQL As String Dim rs as Recordset Set dbs = CurrentDb cadSQL = "SELECT * FROM Pedidos WHERE FechaPedido >#3-31-96#;" Set rs = dbs.OpenRecordset(cadSQL, dbOpenDynaset) Set Data1.Recordset = rs ‘Pasamos los valores a un Control Data... rs.MoveLast ‘y poblamos el Recordset... El siguiente ejemplo crea el mismo objeto Recordset usando un valor almacenado en una variable. Observe el signo numérico (#) que denota que los valores de la fecha deben ser incluidos en la cadena de forma que sean concatenados con el valor de la fecha. Dim dbs As Database, cadSQL As String Dim rs as Recordset Dim FechaComienzo As Date FechaComienzo = #3-31-96# Set dbs = CurrentDb cadSQL = "SELECT * FROM Pedidos WHERE FechaPedido" _ & "> #" & FechaComienzo & "#;" Set rs = dbs.OpenRecordset(cadSQL, dbOpenDynaset) Set Data1.Recordset = rs ‘Pasamos los valores a un Control Data... rs.MoveLast ‘y poblamos el Recordset... El siguiente ejemplo crea un objeto Recordset usando un valor en un control llamado FechaPedido en un formulario Pedidos. Observe que se suministra la referencia completa al control y que se incluye el signo numérico (#) que denota la fecha dentro de la cadena. Dim dbs As Database, rs As Recordset, cadSQL As String Set dbs = CurrentDb cadSQL = "SELECT * FROM Pedidos WHERE FechaPedido" _ & "> #" & Forms!Pedidos!FechaPedido & "#;" Set rs = dbs.OpenRecordset(cadSQL, dbOpenDynaset)

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 60: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 60 Ing. Jacqueline Montes López

Set Data1.Recordset = rs ‘Pasamos los valores a un Control Data... rs.MoveLast ‘y poblamos el Recordset... 1.2 DELETE (Instrucción) Crea una consulta de eliminación que elimina registros de una o más tablas enumeradas en la cláusula FROM y que cumplen la cláusula WHERE. Sintaxis DELETE [tabla.*] FROM tabla WHERE criterio La instrucción DELETE consta de las siguientes partes: Parte Descripción tabla El nombre opcional de la tabla cuyos registros se van a eliminar. tabla El nombre de la tabla cuyos registros se van a eliminar. criterio Una expresión que determina qué registros se van a eliminar. Comentarios La instrucción DELETE es especialmente útil cuando desea eliminar muchos registros. Para eliminar una tabla completa de la base de datos, puede utilizar el método Execute con la instrucción DROP. Sin embargo, si elimina la tabla, se pierde la estructura. En cambio, cuando utiliza DELETE sólo se elimina el dato; la estructura de la tabla y todas sus propiedades, como los atributos y los índices de los campos, permanecen intactos. Puede utilizar DELETE para quitar registros de las tablas que están en una relación uno a varios con otras tablas. Las operaciones de eliminación en cascada hacen que los registros de las tablas que están en el lado varios de la relación se eliminen cuando el registro correspondiente del lado uno de la relación se elimina en la consulta. Por ejemplo, en la relación entre las tablas Clientes y Pedidos, la tabla Clientes está en el lado uno y la tabla Pedidos está en el lado varios de la relación. La eliminación de un registro de la tabla Clientes provoca que los registros correspondientes de la tabla Pedidos se eliminen si se especifica la opción de eliminación en cascada. Una consulta de eliminación suprime registros completos, y no sólo los datos de los campos específicos. Si desea eliminar valores de un campo específico, cree una consulta de actualización que cambie los valores a Null.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 61: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 61 Ing. Jacqueline Montes López

Importante • Después de quitar registros utilizando una consulta de eliminación, no puede deshacer la

operación. Si desea saber qué registros se eliminaron, primero examine el resultado con una consulta de selección que utilice el mismo criterio y después ejecute la consulta de eliminación.

• Mantenga siempre copias de seguridad de sus datos. Si elimina los registros por equivocación,

podrá recuperarlos de sus copias de seguridad. 1.3 La instrucción UPDATE. 1.4 La instrucción INSERT INTO. 2. QueryDefs (Colección) Una colección QueryDefs contiene todos los objetos QueryDef de un objeto Database en una base de datos Microsoft Jet y todos los objetos QueryDef de un objeto Connection en un espacio de trabajo ODBCDirect. Para crear un nuevo objeto QueryDef, utilice el método CreateQueryDef. En un espacio de trabajo Microsoft Jet, si proporciona una cadena para el argumento nombre o si establece la propiedad Name del nuevo objeto QueryDef explícitamente no a una cadena de longitud cero, creará un objeto QueryDef permanente que se agregará automáticamente a la colección QueryDefs y guardado en disco. Proporcionar una cadena de longitud cero como el argumento nombre o establecer la propiedad Name explícitamente a una cadena de longitud cero dará como resultado un objeto QueryDef temporal. En un espacio de trabajo ODBCDirect, un objeto QueryDef siempre es temporal. La colección QueryDefs contiene todos los objetos QueryDef abiertos. Cuando se cierra un objeto QueryDef, se elimina automáticamente de la colección QueryDefs. Para hacer referencia a un objeto QueryDef incorporado en una colección por su número de orden o por el valor de la propiedad Name, utilice cualquiera de los formatos de sintaxis siguientes: QueryDefs(0) QueryDefs("nombre") QueryDefs![nombre] Puede hacer referencia a objetos QueryDef temporales sólo por las variables de objeto que les haya asignado.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 62: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 62 Ing. Jacqueline Montes López

Uso del Comando SELECT para crear QueryDefs. 2.1.1 Generar instrucciones SQL que incluyan el uso de variables y controles. Cuando se trabaja con objetos de acceso a datos (DAO), puede que necesite construir una instrucción SQL en el código. Por ejemplo, si está creando un nuevo objeto Recordset, es necesario establecer una cadena SQL válida. Es muy posible que también necesite una instrucción SQL cuando cree un objeto QueryDef. La forma más fácil de construir una instrucción SQL es crear una consulta en la cuadrícula de diseño de la consulta, cambiar a vista SQL, y copiar y pegar la instrucción SQL correspondiente en su código. A menudo una consulta debe estar basada en valores que suministra el usuario o que cambian en situaciones diferentes. Si éste es el caso, necesitará incluir variables o valores de control en la consulta. El motor de base de datos Microsoft Jet procesa todas las instrucciones SQL, pero no las variables o los controles. Por tanto, debe construir su instrucción SQL de forma que Microsoft Access determine primero estos valores y luego los concatene en la instrucción SQL que se pasa al motor de base de datos Jet. El siguiente ejemplo crea un objeto QueryDef usando un valor en un control llamado FechaPedido en un formulario Pedidos. Observe que se suministra la referencia completa al control y que se incluye el signo numérico (#) que denota la fecha dentro de la cadena. Dim dbs As Database, qdf As QueryDef, cadSQL As String Set dbs = CurrentDb cadSQL = "SELECT * FROM Pedidos WHERE FechaPedido" _ & "> #" & Forms!Pedidos!FechaPedido & "#;" Set qdf = dbs.CreateQueryDef("SegundoTrimestre", cadSQL) 2.1.2 Generar instrucciones SQL que incluyan el uso de parámetros. Parameter (Objeto) Un objeto Parameter representa un valor suministrado a una consulta. El parámetro está asociado a un objeto QueryDef creado a partir de una consulta con parámetros. Los objetos Parameter le permiten cambiar los argumentos en un objeto QueryDef que se ejecuta frecuentemente si tener que volver a compilar la consulta. Utilizando las propiedades de un objeto Parameter, puede establecer un parámetro de consulta que puede cambiarse antes de ejecutar la consulta. Puede hacer lo siguiente:

• Utilice la propiedad Name para devolver el nombre de un parámetro.

• Utilice la propiedad Value para establecer o devolver los valores del parámetro que se va a utilizar en la consulta.

• Utilice la propiedad Type para devolver el tipo de datos del objeto Parameter.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 63: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 63 Ing. Jacqueline Montes López

• Utilice la propiedad Direction para establecer o devolver si el parámetro es un parámetro de entrada, un parámetro de salida o ambos.

En un espacio de trabajo ODBCDirect, también puede:

• Cambiar el valor de la propiedad Type.

• Utilizar la propiedad Direction para establecer o devolver si el parámetro es un parámetro de entrada, un parámetro de salida o ambos.

En el siguiente ejemplo se llena un objeto Recordset a partir de la información filtrada por un objeto QueryDef, al cual se le introducen dos parámetros que definen un período de tiempo, para seleccionar la información referente a la cantidad de pedidos atendidos por cada empleado en dicho período. Dim dbsNeptuno As Database Dim qdfInforme As QueryDef Dim rsInforme as Recordset Dim Fechanicio As String Dim FechaFin As String Set dbsNeptuno = OpenDatabase("Neptuno.mdb") ' Crea el objeto QueryDef temporal con dos ' parámetros.

FechaInicio = InputBox("Introduzca la Fecha de Inicio del Período" & vbCr & "Formato dd-mm-aa", "Fecha de Inicio del Período") FechaFin = InputBox("Introduzca la Fecha en que termina el Período" & vbCr & "Formato dd-mm-aa", "Fecha de Culminación del Período") Set qdfInforme = dbsNeptuno.CreateQueryDef("", _ "PARAMETERS parFechaInicio DateTime, parFechaFin DateTime; " _ & "SELECT IdEmpleado, COUNT(IdPedido) AS NúmPedidos " _ & "FROM Pedidos WHERE Fecha de envío BETWEEN " _ & "[parFechaInicio] AND [parFechaFin] GROUP BY IdEmpleado " _ & "ORDER BY IdEmpleado") qdfInforme.Parameters!parFechaInicio = CDate(FechaInicio) qdfInforme.Parameters!parFechaFin = CDate(FechaFin) Set rsEntregasGanancias = queQdf.OpenRecordset() 3. Objeto Printer. El objeto Printer le permite comunicarse con una impresora del sistema (inicialmente la impresora predeterminada). La colección Printers le permite obtener información acerca de todas las impresoras del sistema disponibles.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 64: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 64 Ing. Jacqueline Montes López

Sintaxis Printer Printers(índice) El marcador de posición índice representa un entero entre 0 y Printers.Count-1. Comentarios Para presentar texto y gráficos en el objeto Printer, utilice métodos gráficos. Una vez que el objeto Printer contenga el resultado que desea imprimir, puede usar el método EndDoc para enviar directamente el resultado a la impresora predeterminada de la aplicación. Debe comprobar y posiblemente revisar la distribución de los formularios si quiere imprimirlos. Si utiliza el método PrintForm para imprimir un formulario, las imágenes gráficas se pueden recortar en la parte inferior de la página y el texto puede pasar a la página siguiente. La colección Printers le permite consultar las impresoras disponibles de forma que pueda especificar la impresora predeterminada de su aplicación. Por ejemplo, quizá quiera saber cuál de las impresoras disponibles usa un determinado controlador de impresoras. El siguiente código comprueba todas las impresoras disponibles para encontrar la primera impresora cuya orientación de página sea Vertical y después la establece como la impresora predeterminada: Dim X As Printer For Each X In Printers If X.Orientation = vbPRORPortrait Then ' La define como predeterminada del sistema. Set Printer = X ' Sale del bucle. Exit For End If Next Mediante la instrucción Set se designa una de las impresoras de la colección Printers como impresora predeterminada. El ejemplo anterior designa como impresora predeterminada de la aplicación la impresora identificada por la variable de objeto X. Nota: Si utiliza la colección Printers para especificar una impresora determinada, como Printers(3), sólo puede tener acceso a sus propiedades en modo de sólo lectura. Para leer y escribir las propiedades de una impresora concreta, primero tiene que definirla como impresora predeterminada de la aplicación.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 65: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 65 Ing. Jacqueline Montes López

v Actividades de la Clase Nº 13 Uso del objeto QueryDefs en un formulario de Reportes. Objetivo: Crear un formulario que permita salida a impresora de la información filtrada referente a las ganancias obtenidas por la empresa Neptuno en un período cualquiera definido por el usuario. Descripción del procedimiento de cálculo: Las tablas de donde podemos obtener la información guardada respecto a las entregas hechas y el detalle de las mismas, son la tabla Pedidos y la tabla Detalles de Pedidos. Se filtra la información correspondiente a un período definido por el usuario y a los registros obtenidos se les aplica el cálculo sencillo, para cada producto, de multiplicar las cantidades entregadas del mismo por su precio unitario y al resultado restarle el descuento. El resultado será la ganancia neta por cada producto (en dólares. Tome como sugerencia el diseño que aparece en la siguiente imagen. Modo Diseño

Defina Ud. mismo(a) las propiedades de los objetos que va a utilizar.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 66: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 66 Ing. Jacqueline Montes López

Modo Ejecución: Una vez que introduzca los datos para alimentar las variables de selección y se ejecute el procedimiento, deberá obtener una pantalla similar a la siguiente.

Código asociado a los eventos de los diferentes controles utilizados ‘Sección General-Declaraciones del formulario... Option Explicit Dim DirReport As String Sub cmdClose_Click() Unload Me End Sub Private Sub cmdImprimirEnImpresora_Click() Dim queQdf As QueryDef Dim rsEntregasGanancias As Recordset Dim FechaInicio, FechaFin, PrimeroNombre As String Dim TotalEntregas, TotalCantidadEntregada, Page, Línea, i As Integer Dim GananciaPorProducto, Descuento As Double Dim Primero As Long

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 67: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 67 Ing. Jacqueline Montes López

FechaInicio = InputBox("Introduzca la Fecha de Inicio del Período" & vbCr & "Formato dd-mm-aa", "Fecha de Inicio del Período") FechaFin = InputBox("Introduzca la Fecha en que termina el Período" & vbCr & "Formato dd-mm-aa", "Fecha de Culminación del Período") Screen.MousePointer = vbHourglass Set queQdf = DBNeptuno.CreateQueryDef("", "PARAMETERS Fecha1 DateTime, Fecha2 DateTime; " _ & "SELECT DISTINCTROW Productos.IdProducto, Productos.NombreProducto, [Detalles de pedidos].IdPedido, " _ & "Pedidos.FechaEntrega, [Detalles de pedidos].PrecioUnidad, [Detalles de pedidos].Cantidad, " _ & "[Detalles de pedidos].Descuento " _ & "FROM Productos INNER JOIN (Pedidos INNER JOIN [Detalles de pedidos] ON Pedidos.IdPedido = [Detalles de pedidos].IdPedido) ON Productos.IdProducto = [Detalles de pedidos].IdProducto " _ & "WHERE (((Pedidos.FechaEntrega) Between [Fecha1] And [Fecha2])) " _ & "ORDER BY Productos.IdProducto; ") queQdf.Parameters!Fecha1 = CDate(FechaInicio) queQdf.Parameters!Fecha2 = CDate(FechaFin) Set rsEntregasGanancias = queQdf.OpenRecordset() rsEntregasGanancias.MoveLast 'Llenamos el recordset... 'Si no existen datos para la fecha especificada... If rsEntregasGanancias.RecordCount = 0 Then MsgBox "No existe información para procesarla!!!", vbExclamation Exit Sub End If Set rsEntregasGanancias = queQdf.OpenRecordset() 'Específicamos el Tipo de papel a utilizar : carta... Printer.PaperSize = 1 'Específicamos el Tamaño de la fuente... Printer.FontSize = 9 TotalEntregas = 0 TotalCantidadEntregada = 0 GananciaPorProducto = 0 Descuento = 0 Page = 1 Línea = 1 i = 1

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 68: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 68 Ing. Jacqueline Montes López

Primero = rsEntregasGanancias.Fields("IdProducto") PrimeroNombre = rsEntregasGanancias.Fields("NombreProducto") 'La escala a utilizar es en milímetros... Printer.ScaleMode = 6 Do While Not rsEntregasGanancias.EOF If Primero = rsEntregasGanancias.Fields("IdProducto") Then

TotalEntregas = TotalEntregas + 1 TotalCantidadEntregada = TotalCantidadEntregada + rsEntregasGanancias.Fields("Cantidad")

Descuento = (rsEntregasGanancias.Fields("Descuento") / 100) * (rsEntregasGanancias.Fields("PrecioUnidad") * rsEntregasGanancias.Fields("Cantidad")) GananciaPorProducto = GananciaPorProducto+ (rsEntregasGanancias.Fields("PrecioUnidad") * rsEntregasGanancias.Fields("Cantidad")) - Descuento

rsEntregasGanancias.MoveNext ElseIf Primero <> rsEntregasGanancias.Fields("IdProducto") Then If Línea = 1 Then 'Establecemos el tamaño de la fuente... Printer.FontSize = 8 'Establecemos que se imprima en negrilla... Printer.FontBold = True Printer.FontSize = 11 Printer.CurrentX = 60 Printer.CurrentY = 20 Printer.Print "EMPRESA IMPORTADORA NEPTUNO S.A" Línea = Línea + 1 Printer.FontSize = 10 Printer.CurrentX = 50 Printer.CurrentY = 25 Printer.Print "Reporte de Totales por Producto: Entregas, Cantidades, Ganancias" Línea = Línea + 1 Printer.CurrentX = 80 Printer.CurrentY = 30 Printer.Print "Período: " & CDate(FechaInicio) & "-" & CDate(FechaFin) Printer.CurrentX = 170 Printer.CurrentY = 30 Printer.Print "Página No." & Page Línea = Línea + 1

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 69: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 69 Ing. Jacqueline Montes López

Printer.CurrentX = 10 Printer.CurrentY = 35 Printer.Print "IdProducto" Printer.CurrentX = 35 Printer.CurrentY = 35 Printer.Print "Nombre Producto" Printer.CurrentX = 90 Printer.CurrentY = 35 Printer.Print "Total Entregas" Printer.CurrentX = 130 Printer.CurrentY = 35 Printer.Print "Total Cantidad" Printer.CurrentX = 170 Printer.CurrentY = 35 Printer.Print "Total Ganancias" Línea = Línea + 1 ElseIf ((Línea = 48) Or (rsEntregasGanancias.EOF)) Then Page = Page + 1 i = 0 Línea = 0 Printer.NewPage End If 'Fin If Línea = 1... 'Establecemos que no se imprima en negrilla... Printer.FontSize = 8 Printer.FontBold = False i = i + 1 Printer.CurrentY = 35 + (5 * i) Printer.CurrentX = 10 Printer.CurrentY = 35 + (5 * i) Printer.Print Primero Printer.CurrentX = 35 Printer.CurrentY = 35 + (5 * i) Printer.Print PrimeroNombre Printer.CurrentX = 95 Printer.CurrentY = 35 + (5 * i) Printer.Print TotalEntregas

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 70: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 70 Ing. Jacqueline Montes López

Printer.CurrentX = 140 Printer.CurrentY = 35 + (5 * i) Printer.Print TotalCantidadEntregada Printer.CurrentX = 180 Printer.CurrentY = 35 + (5 * i) Printer.Print "US$ " & Format(GananciaPorProducto, "###0.00") Línea = Línea + 1 'Reiniciamos variables... TotalEntregas = 0 TotalCantidadEntregada = 0 Descuento = 0 GananciaPorProducto = 0 Primero = rsEntregasGanancias.Fields("IdProducto") PrimeroNombre = rsEntregasGanancias.Fields("NombreProducto") End If 'Fin If Primero ... Loop 'Termina la operación de impresión enviada al objeto Printer... Printer.EndDoc Set Data1.Recordset = queQdf.OpenRecordset(dbOpenDynaset) queQdf.Close Screen.MousePointer = vbDefault MsgBox "El Reporte se imprimió con exito" End Sub Private Sub Data1_Reposition() Data1.Caption = Data1.Recordset.RecordCount & " Registros" End Sub

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 71: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 71 Ing. Jacqueline Montes López

Private Sub Form_Load() Dim bParmQry As Integer Dim qdfTmp As QueryDef On Error GoTo LoadErr Data1.DatabaseName = DBNeptuno.Name Data1.Connect = DBNeptuno.Connect Data1.RecordsetType = 1 'Cargamos el lugar donde estará el archivo Excel... DirReport = "C:\ReportesNeptuno\" If Len(Data1.RecordSource) > 50 Then Me.Caption = "Impresión de Datos" Else Me.Caption = "Impresión de Datos" End If Exit Sub LoadErr: MsgBox "Error:" & Err & " " & Err.Description Unload Me End Sub Private Sub Form_Resize() On Error Resume Next If Me.WindowState <> 1 Then grdDataGrid.Height = grdDataGrid.Height - (425 + picButtons.Height) '- (425 + Data1.Height) End If End Sub 4. Funciones de utilidad para manipular variables: InputBox (Función) Muestra un mensaje en un cuadro de diálogo, espera que el usuario escriba un texto o haga clic en un botón y devuelve un tipo String con el contenido del cuadro de texto. Sintaxis InputBox(prompt[, title][, default][, xpos][, ypos][, helpfile, context]) La sintaxis de la función InputBox consta de estos argumentos con nombre:

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 72: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 72 Ing. Jacqueline Montes López

Parte Descripción

prompt

Requerido. Expresión de cadena que se muestra como mensaje en el cuadro de diálogo. La longitud máxima de prompt es de aproximadamente 1024 caracteres, según el ancho de los caracteres utilizados. Si prompt consta de más de una línea, puede separarlos utilizando un carácter de retorno de carro (Chr(13)), un carácter de avance de línea (Chr(10)) o una combinación de los caracteres de retorno de carro-avance de línea (Chr(13) y Chr(10)) entre cada línea y la siguiente.

title Opcional. Expresión de cadena que se muestra en la barra de título del cuadro de diálogo. Si omite title, en la barra de título se coloca el nombre de la aplicación.

default Opcional. Expresión de cadena que se muestra en el cuadro de texto como respuesta predeterminada cuando no se suministra una cadena. Si omite default, se muestra el cuadro de texto vacío.

xpos Opcional. Expresión numérica que especifica, en twips, la distancia en sentido horizontal entre el borde izquierdo del cuadro de diálogo y el borde izquierdo de la pantalla. Si se omite xpos, el cuadro de diálogo se centra horizontalmente.

ypos

Opcional. Expresión numérica que especifica, en twips, la distancia en sentido vertical entre el borde superior del cuadro de diálogo y el borde superior de la pantalla. Si se omite ypos, el cuadro de diálogo se coloca a aproximadamente un tercio de la altura de la pantalla, desde el borde superior de la misma.

helpfile Opcional. Expresión de cadena que identifica el archivo de Ayuda que se utilizará para proporcionar ayuda interactiva para el cuadro de diálogo. Si se especifica helpfile, también deberá especificarse context.

context Opcional. Expresión numérica que es el número de contexto de Ayuda asignado por el autor al tema de Ayuda correspondiente. Si se especifica context, también deberá especificarse helpfile.

DateAdd (Función) Devuelve un valor de tipo Variant (Date) con una fecha a la que se ha agregado un intervalo de tiempo especificado. Sintaxis DateAdd(intervalo, número, fecha) La sintaxis de la función DateAdd consta de los siguientes argumentos con nombre:

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 73: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 73 Ing. Jacqueline Montes López

Parte Descripción

intervalo Requerido. Expresión de tipo cadena (String) que contiene el intervalo de tiempo que se desea agregar.

número Requerido. Expresión numérica con el número de intervalos que se desea agregar. Puede ser positiva (para obtener fechas futuras) o negativa (para obtener fechas pasadas).

fecha Requerido. Valor de tipo Variant (Date) o literal que representa la fecha en la que se agregó el intervalo.

Valores El argumento intervalo tiene los siguientes valores: Valor Descripción yyyy Año q Trimestre m Mes y Día del año d Día w Día de la semana ww Semana h Hora n Minuto s Segundo

Comentarios Puede utilizar la función DateAdd para agregar o restar un intervalo de tiempo especificado de una fecha. Por ejemplo, con DateAdd podría calcular una fecha 30 días posterior al día de hoy o una hora 45 minutos posterior a la actual. Si desea agregar días a fecha, puede utilizar Día del año ("y"), Día ("d") o Día de la semana ("w"). La función DateAdd no devuelve nunca una fecha no válida. En el ejemplo siguiente se agrega un mes al 31 de enero: DateAdd("m", 1, "31-ene-95") En este caso, DateAdd devuelve 28-feb-95 y no 31-feb-95. Si fecha es 31-ene-96, devolverá 29-feb-96, ya que 1996 es un año bisiesto. Si la fecha calculada va a resultar inferior al año 100 (esto es, se restan más años que los que hay en fecha), se produce un error. Si número no es un valor de tipo Long se redondeará al número entero más cercano antes de ser evaluado. Nota El formato del valor devuelto por DateAdd es determinado por la configuración del Panel de control, no por el formato que se pasa en el argumento fecha.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 74: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 74 Ing. Jacqueline Montes López

Función Left Descripción

Devuelve un número de caracteres especificado a partir del lado izquierdo de una cadena. Sintaxis Left(cadena, longitud) La sintaxis de la función Left tiene los siguientes argumentos:

Parte Descripción

cadena Expresión de cadena a partir de la que se devuelven los caracteres que están más a la izquierda. Si cadena contiene Null, se devuelve Null.

longitud Expresión numérica que indica cuántos caracteres se van a devolver. Si es igual a 0, se devuelve una cadena de longitud cero (""). Si es mayor o igual al número de caracteres de cadena, se devuelve la cadena completa.

Comentarios

Para determinar el número de caracteres que contiene cadena, use la función Len. El siguiente ejemplo usa la función Left para devolver los primeros tres caracteres de MiCadena: Dim MiCadena, CadenaIzquierda MiCadena = "VBSCript" CadenaIzquierda = Left(MiCadena, 3) 'CadenaIzquierda contiene "VBS".

Función Right Descripción

Devuelve un número de caracteres especificado a partir del lado derecho de una cadena. Sintaxis Right(cadena, longitud)

La sintaxis de la función Right tiene los siguientes argumentos:

Parte Descripción

cadena Expresión de cadena desde la que se devuelven los caracteres que están más a la derecha. Si cadena contiene Null, se devuelve Null.

longitud Expresión numérica que indica cuántos caracteres se van a devolver. Si es igual a 0, se devuelve una cadena de longitud cero. Si es mayor o igual al número de caracteres que hay en cadena, se devuelve toda la cadena.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 75: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 75 Ing. Jacqueline Montes López

Comentarios

Para determinar el número de caracteres que hay en cadena, use la función Len. El siguiente ejemplo usa la función Right para devolver un número especificado de caracteres a partir del lado derecho de una cadena:

Dim CualquierCadena, MiCad CualquierCadena = "Hola mundo" 'Define la cadena. MiCad = Right(CualquierCadena, 1) ' Devuelve "d". MiCad = Right(CualquierCadena, 6) ' Devuelve " mundo". MiCad = Right(CualquierCadena, 20) ' Devuelve "Hola mundo".

Mid (Función) Devuelve un tipo Variant (String) que contiene un número especificado de caracteres de una cadena. Sintaxis Mid(string, start[, length]) La sintaxis de la función Mid tiene estos argumentos con nombre: Parte Descripción

string Requerido. Expresión de cadena de la cual se devuelven los caracteres. Si string contiene Null, se devuelve Null.

start Requerido; un tipo Long. Posición de carácter en string en la cual comienza la parte que se quiere tomar. Si start es mayor que el número de caracteres en la string, Mid devuelve una cadena de longitud cero ("").

length Requerido; un tipo Variant (Long). Número de caracteres que se van a devolver. Si se omite o en el texto hay menos de length caracteres (incluyendo el carácter de start), se devuelven todos los caracteres desde la posición de start hasta el final de la cadena.

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Page 76: Bases de Datos y Visual Basic

I Unidad – Introducción a los sistemas de gestión de bases de datos

Página no. 76 Ing. Jacqueline Montes López

Comentarios Para determinar el número de caracteres en string, utilice la función Len. Nota Utilice la función MidB con datos de byte incluidos en una cadena, como en los lenguajes de conjunto de caracteres de doble byte. En lugar de especificar el número de caracteres, los argumentos especifican el número de bytes. Para ver código de ejemplo que utiliza MidB, vea el segundo ejemplo en el tema de ejemplo. Dim MiCadena, PrimeraPalabra, UltimaPalabra, PalabraMedia MiCadena = "Demostración función Mid" ' Crea la cadena de texto. PrimeraPalabra = Mid(MiCadena, 1, 12) ' Devuelve "Demostración". UltimaPalabra = Mid(MiCadena, 21, 3) ' Devuelve "Mid". PalabraMedia = Mid(MiCadena, 14) ' Devuelve "función Mid". 1.1 Cdate()

1.2 IsDate() e IsNumeric()

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.