2do Analisis
 

ActiveX Data Objects

De Wikipedia, la enciclopedia libre

 
Para otros usos de este término, véase ADO (desambiguación).

ActiveX Data Objects (ADO) es uno de los mecanismos que usan los programas de computadoras para comunicarse con las bases de datos, darles órdenes y obtener resultados de ellas.

Con ADO, un programa puede leer, insertar, editar, o borrar, la información contenida en diferentes áreas de almacenamiento dentro de la base de datos llamadas tablas. Además, se puede manipular la propia base de datos para crear nuevas áreas para el almacenamiento de información (tablas), como también alterar o eliminar las ya existentes, entre otras cosas.

Fue desarrollado por Microsoft y es usado en ambientes Windows por lenguajes de programación como Visual Basic, C++, Delphi entre otros, como también en la Web mediante el uso de Active Server Pages (ASP) y el lenguaje VBScript.

Contenido

[ocultar]

Evolución [editar]

ADO substituyó tanto a DAO (Data Access Object), como a RDO (Remote Data Object), que eran los sistemas previos que se usaban para acceder a las bases de datos y bases de datos remotas, respectivamente. Tiene la mayor parte de la funcionalidad de ambos modelos y sin embargo es más sencillo de usar y de entender y por lo tanto más fácil y menos engorroso de programar.

La última versión de ADO, creada por Microsoft, se llama ADO.NET, y se usa en los entornos de programación de la plataforma .NET, de Microsoft, para manejar bases de datos tanto en Windows como en la Web mediante ASP.NET, que es la nueva versión del ASP para la plataforma.NET.

En la plataforma de programación de software libre llamada Mono también existe una librería similar a ADO.NET, lo que significa que ahora, la tecnología ADO.NET se puede usar en otros sistemas operativos aparte de Windows, como Linux, Mac OS X, BSD, y Solaris.

ADO.NET es mucho más poderoso que ADO pero también es muy diferente, por lo que es necesario rediseñar los programas hechos con ADO, para que funcionen en él.

Está previsto que para el 2006 salga una nueva versión del entorno.NET que tendrá una versión mejorada de ADO.NET, denominada ADO.NET 2.

+-----+------+
| DAO | RDO  |
+-----+------+
|    ADO     |
+------------+
|  ADO.NET   |
+------------+
| ADO.NET 2  | 
+------------+
| ADO.NET 3.5| 
+------------+


 

Funcionamiento [editar]

ADO es un intermediario entre el programa y la base de datos. El programa no ve la base de datos directamente, sino que hace todo el trabajo a través de ADO. Usando ADO, el programa se comunica con la base de datos, consulta, edita, inserta, borra, registros, añade tablas, etc. ADO a su vez se comunica con la base de datos a través de un "proveedor de datos".

El programa usa ADO para hacer una solicitud a la base de datos:
   "Dame el nombre y apellido de todos los empleados que vivan en Venezuela"

Programa ---> ADO ---> Proveedor de datos ---> Base de datos

En la dirección contraria, la base de datos responde, comunicándose con el proveedor de datos, éste con ADO, y al final, la información llega al programa.

La base de datos responde

Programa <--- ADO <--- Proveedor de datos <--- Base de datos

+--------+-----------+
| Nombre | Apellido  |
+--------+-----------+
| José   | Pereira   |
| Juan   | Pérez     |
| María  | Hernández |
+--------+-----------+

Una vez que el programa tiene la información proveniente de la base de datos, puede hacer con ella lo que considere, como por ejemplo, puede desplegarla en una página Web.

Los usuarios solicitados son los siguientes:

Nombre Apellido
José Pereira
Juan Pérez
María Hernández

Componentes de ADO [editar]

Principales componentes de ADO

  • Connection (Permite establecer una conexión con la base de datos)
  • Recordset (Maneja un conjunto de records de la base de datos)
  • Command (Permite enviar órdenes SQL para ser ejecutados por la base de datos)

Otros componentes de ADO

  • Record (Permite manejar un registro, típicamente pero no exclusivamente, de una fuente diferente a una base de datos. Uno de sus usos es la representación de datos que no están estructurados en forma de Tablas, como por ejemplo que tengan una estructura tipo árbol.
  • Field (Permite manipular un campo perteneciente a un Record o un Recordset)
  • Parameter (Permite configurar un parámetro para una consulta SQL. Se usa con Command)
  • Stream (Permite manejar flujos de datos (streams), provenientes de ficheros de texto, páginas web, etc)
  • Error (Indica las características de los errores que pudieran suceder al ejecutar métodos de los objetos de ADO)
  • Property (Contiene información perteneciente a un objeto determinado)

Objetos Connection, Recordset y Command [editar]

Los 3 principales componentes de ADO son Connection, Recordset y Command (la conexión, el recordset, y la orden).

           +------------+
      +----+ Connection +----+
      |    +------------+    |
      |                      |
+-----+-----+          +-----+-----+
| Recordset +----------+  Command  |
+-----------+          +-----------+

La Conexión [editar]

La conexión es como una autopista que permite el flujo de datos entre el programa y la base de datos. Por ella pueden viajar las órdenes que desde el programa se usan para hacer solicitudes de información a la base de datos o para realizar una operación dentro de ella como borrar registros, añadir registros, modificar tablas, etc. También, por esta autopista, pueden ir y venir los datos, desde y hacia la base de datos, entre otras cosas.

Tanto el recordset como la orden usan la conexión para comunicarse con la base de datos.

La conexión se comunica con la base de datos a través de un intermediario llamado "proveedor de datos".

+----------+         +-----------+         +---------+
| Conexión | ------> | Proveedor | ------> | Base de |
|          | <------ |  de datos | <------ | datos   |
+----------+         +-----------+         +---------+

El proveedor de datos [editar]

El proveedor de datos es un componente que se relaciona directamente con la base de datos. Hay un proveedor de datos por cada tipo de base de datos. Así, las bases de datos de tipo Access, SQL Server, Oracle, MySQL, tienen, cada una, un proveedor de datos específico.

La conexión ADO puede usar dos tipos de proveedores de datos, OLE DB y ODBC, siendo OLE DB el tipo de proveedor nativo.

Cuando no existe un proveedor de OLE DB específico para una base de datos determinada, y en cambio existe un proveedor ODBC, la conexión ADO puede usarlo para comunicarse con la base de datos, sin embargo, no directamente, sino a través de un proveeor OLE DB especial que sirve de intermediario entre ADO y ODBC.

La figura de abajo muestra, a la izquierda, un esquema de los diferentes componentes que existen entre un programa y la base de datos, y, a la derecha, muestra el camino que recorre la información, usando por un lado OLE DB, y por el otro ODBC. Nótese que al usar ODBC, la ruta es más larga porque tiene que pasarse por más componentes. Esto hace la comunicación un poco más lenta.

                      Con OLE DB          Con ODBC
+---------------+  +---------------+  +---------------+
|   Programa    |  |   Programa    |  |   Programa    |
+---------------+  |      |        |  |      |        |
|      ADO      |  |     ADO       |  |     ADO       |
+---------------+  |      |        |  |      |        |
|    OLE DB     |  |    OLEDB      |  |    OLEDB (OLE DB especial para
|      +--------+  |      |        |  |      |    comunicación con cualquier ODBC)
|      |  ODBC  |  |      |        |  |     ODBC      |
+------+--------+  |      |        |  |      |        |
| Base de datos |  | Base de datos |  | Base de datos |
+---------------+  +---------------+  +---------------+

Todo esto es transparente al usuario de ADO, quien, en líneas generales, no tiene por que enterarse ni conocer estos mecanismos.

ADO tiene un alto grado de abstracción, lo que significa que, al mantener una interface sencilla, oculta los detalles complejos del manejo de la base de datos.

Un programa puede saltarse completamente el ADO, y acceder a la base de datos directamente de 3 maneras diferentes, a través de OLDB, ODBC, o por ODBC usando una capa intermedia de OLE DB. Al trabajar de esta manera, se tiene la ventaja de una mayor funcionalidad que no contiene ADO a cambio de una mayor complejidad en la programación. Esto es necesario algunas veces, en ciertos tipos de programas y para ciertas necesidades, pero no es lo común.

+------------------------+
|        Programa        |
+---+-------+-------+----+
    1       2       3
+---+----+--+---+---+----+
| OLE DB | ODBC | OLE DB |
|        |      +--------+
|        |      |  ODBC  |
+--------+------+--------+
|     Base de datos      |
+------------------------+

El Recordset [editar]

El Recordset es, como su nombre lo indica, un conjunto de records. En general, sus datos tienen su origen en una base de datos, aunque también pueden generarse independientemente de ésta.

Un recordset puede contener cero o más records (registros). Cada recordset tiene una colección de campos, que es común a todos los records. Podemos verlo como una matriz o tabla, en donde las filas son los records, y las columnas son los campos.

Recordset con algunos datos de la tabla de empleados:

+------------+---------+----------+
| IdEmpleado | Nombre  | Apellido | 
+------------+---------+----------+
|     1      | Luis    | Pérez    |  <-- Record 1
+------------+---------+----------+
|     5      | José    | Abreu    |  <-- Record 2
+------------+---------+----------+
|     3      | Pedro   | León     |  <-- Record 3
+------------+---------+----------+
|     7      | María   | Marcano  |  <-- Record 4
+------------+---------+----------+
      |          |          |
      |          |          +------- Campo "Apellido"
      |          |
      |          +------------------ Campo "Nombre"
      |
      +----------------------------- Campo "IdEmpleado"

Un recordset puede tener varias características que el programador define a su conveniencia. Puede ser de solo lectura, o de lectura-escritura, por ejemplo.

La información con que se carga el recordset puede provenir de una tabla o varias tablas, de la base de datos.

El recordset, tiene capacidades de navegación entre su conjunto de registros. Puede:

  • Moverse al siguiente registro
  • Moverse al anterior
  • Moverse al primero
  • Moverse al último
  • y otros

En un recordset, se ve y se pueden editar los datos de un solo registro en un tiempo dado, se pueden manipular los datos de los campos del "registro actual" en donde se encuentra.

Además de editar registros, también se puede:

  • Insertar registros nuevos
  • Borrar registros

Las edición, la inserción y el borrado de registros en el recordset, se reflejarán en la Base de Datos.

El Comando [editar]

La orden (command) es el componente ADO que permite hacer solicitudes o dar órdenes a la base de datos mediante una sentencia SQL.

Se puede especificar la inserción de registros nuevos en una tabla, así como también, la eliminación la actualización y la obtención de registros con determinadas condiciones.

Además, se pueden crear, alterar y modificar las características de las tablas que conforman la base de datos.

Ejemplo de uso de ADO desde Visual Basic [editar]

En este ejemplo se asume un Formulario con un DataGrid. Se usará la base de datos "Neptuno.mdb" que viene en las instalaciones en español de Microsoft Office y de Visual Basic.

Referencia a ADO [editar]

Para poder usar ADO desde Visual Basic, lo primero que debemos hacer es referenciar el componente ADO. Esto se hace por el menú "ProyectoReferencias" y en la ventana que sale, seleccionamos ADO, que en la lista se verá como

Microsoft ActiveX Data Objects X.XX Library

en donde X.XX representa la versión de ADO que queremos usar, que puede ir desde la 1.5 hasta la 2.8.

Nota: Un computador pudiera tener instalada una o más versiones simultáneamente y debemos elegir una de ellas. Las versiones más recientes tienen más funcionalidades y tienen menos errores que las antiguas.

La conexión con la base de datos [editar]

Para trabajar con una base de datos, primero debemos establecer una conexión con ésta.

En el Formulario, declaramos el objeto MiConexión, que nos permitirá la conexión con la base de datos

' declaro el objeto MiConexion como una variable de módulo.
' Cuando se instancie será la conexión con la base de datos
Dim MiConexion As ADODB.Connection

En este momento, el objeto MiConexion solo está declarado, pero todavía no existe porque no ha sido instanciado.

En el evento Form_Load, instanciamos el objeto MiConexion, y establecemos la conexión con la base de datos para poder comunicarnos con ella.

Private Sub Form_Load()
    ' Instancio la conexión (ahora la conexión existe)
    Set MiConexión = New ADODB.Connection
    
    With MiConexión
        ' Cursor en Cliente para poder usar un DataGrid
           .CursorLocation = adUseClient
        ' Abro la conexión con la base de datos Neptuno.mdb usando su DSN
           .Open "DSN=Neptuno"
    End With
End Sub

Ya tengo la conexión instanciada y ya me he conectado con la base de datos. La autopista está abierta y funcionando.

Ahora puedo hacer cosas con la información que contiene la base de datos. Puedo leerla, escribirla, borrarla, modificarla, etc. También puedo manipular la propia base de datos. Puedo crear tablas, modificarlas, puedo crear usuarios, etc.

Leo información de la base de datos [editar]

Ahora que tenemos la conexión establecida con la base de datos, queremos leer información de ésta y mostrarla en la pantalla.

Especificamos la información que queremos [editar]

Primero, debemos especificarle, a la base de datos, qué información queremos. Esto se hace mediante una sentencia SQL.

Por ejemplo. Queremos el ID y el Nombre del producto para todos los productos cuyo Nombre contenga la palabra "Queso".

Esta es la sentencia SQL que necesitamos
SELECT IdProducto, NombreProducto
FROM   Productos
WHERE  NombreProducto LIKE '%Queso%'

La sentencia SQL de arriba significa lo siguiente:

Indicamos, a la base de datos, que nos devuelva dos campos,
IdProducto y NombreProducto
SELECT IdProducto, NombreProducto 

Indicamos en qué Tabla, de la base de datos,
están los campos previamente señalados
Están en la Tabla Productos
FROM   Productos

Indicamos una condición.
Queremos solo los registros en cuyo nombre esté la palabra "Queso"
WHERE  NombreProducto LIKE '%Queso%'

En Visual basic, creamos una variable de string a la que llamaremos "SQL". Podríamos llamarla como querramos, podríamos llamarla "Aguacate", Visual Basic lo manejaría sin problemas, pero es mejor darle un nombre que tenga sentido para nosotros y que corresponda con el uso que se le va a dar.

Dim SQL As String

A esa variable le asignamos un texto que será la orden que le vamos a enviar a la base de datos. Este texto es la sentencia SQL que acabamos de crear arriba.

SQL = "SELECT IdProducto, NombreProducto" & vbCrLf & _
      "FROM   Productos" & vbCrLf & _
      "WHERE  NombreProducto LIKE '%Queso%'"

Ya tenemos especificado la orden que le vamos a enviar a la base de datos para que nos devuelva los registros con la información que queremos. Ahora debemos crear un Recordset, que es el objeto de ADO donde se recibirá la información proveniente de la base de datos.

Usamos un Recordset para recibir la información desde la base de datos [editar]

Declaramos el objeto Recordset que recibirá la información de la base de datos

Dim rs As ADODB.Recordset

La variable "rs" recibirá los datos provenientes de la base de datos.

Ahora usamos la conexión para enviar la orden a la base de datos para que nos devuelva la información.

Set rs = MiConexion.Execute(SQL)

Cuando se ejecuta la sentencia previa, la conexión "MiConexion", ejecuta la orden contenida en la variable "SQL". Esto significa que la orden es enviada a la base de datos y ésta responde devolviendo la información requerida. "MiConexion" lee esa información proveniente de la base de datos, y la convierte en un Recordset, el cual es asignado al objeto "rs".

Ahora el Recordset "rs" tiene la información que llegó desde la base de datos, lista para ser usada. Allí tenemos, todos los registros de la Tabla "Productos" que cumplan con la condición de que en el campo "NombreProducto" contenga la palabra "queso". En el Recordset solo se encuentran los campos que especificamos, "IdProducto" y "NombreProducto".

Mostramos la información que contiene el Recordset en un DataGrid [editar]

En el Recordset "rs" tenemos la información. Esta información es usable de muchas maneras, ya que con el Recordset tal y como está podemos recorrer esa información y manipularla, añdir registros, borrarlos, etc.

Sin embargo, en este ejemplo, queremos mostrarla en un DataGrid.

Para ello, solo tenemos que asignar el Recordset a la propiedad DataSource del DataGrid. Una vez hecho esto, el DataGrid mostrará el contenido del recordset.

Set DataGrid1.DataSource = rs

Código completo del programa [editar]

Nota: Para que el programa funcione solo hay que añadir un control DataGrid al Formulario y una referencia a Microsoft ActiveX Data Objects X.XX Library.

Option Explicit

' ----------------------------------------------------------
' Declaro el objeto MiConexion como una variable de módulo.
' Cuando se instancie será la conexión con la base de datos.
' ----------------------------------------------------------
Dim MiConexión As ADODB.Connection

' ----------------------------------------------------------
' Al cargarse el Formulario hago el trabajo.
' (Aquí, a lo sumo, solo debería establecerse la conexión con la base de datos,
'  y las demás cosas se deberían hacer en otro lado,
'  pero este es solo un ejemplo sencillo)
' ----------------------------------------------------------
Private Sub Form_Load()
    ' ----------------------------------------------------------
    ' Instancio la conexión y me conecto con la base de datos
    ' ----------------------------------------------------------
        Set MiConexión = New ADODB.Connection
        
        With MiConexión
            ' Cursor en Cliente para poder usar un DataGrid
               .CursorLocation = adUseClient
            ' Abro la conexión con la base de datos usando un DSN
               .Open "DSN=Neptuno"
        End With
    ' ----------------------------------------------------------
    ' Especifico qué información quiero de la base de datos
    ' ----------------------------------------------------------
        Dim SQL As String
        
        SQL = "SELECT IdProducto, NombreProducto" & vbCrLf & _
              "From Productos" & vbCrLf & _
              "WHERE  NombreProducto LIKE '%Queso%'"
    ' ----------------------------------------------------------
    ' Cargo el recordset con la información proveniente de la base de datos
    ' ----------------------------------------------------------
        Dim rs As ADODB.Recordset
        
        Set rs = MiConexión.Execute(SQL)
    ' ----------------------------------------------------------
    ' Muestro la información en el DataGrid
    ' ----------------------------------------------------------
        Set DataGrid1.DataSource = rs
End Sub

Imagen del programa [editar]

Se muestran los artículos de la Tabla Productos cuyos nombres contengan la palabra "queso".

Imagen:DataGrid mostrando unos registros.gif

Véase también [editar]

Bases de datos

Lenguaje de consultas para bases de datos relacionales

  • SQL (Structured Query Language)

Componentes para manejo de bases de datos

  • OLE DB (Object Linking and Embedding DataBase)
  • ODBC (Open Database Connectivity)
  • ADO.NET

Plataformas de desarrollo y lenguajes de programación


Programacion con ADO

INGRESO DE REGISTROS

 

Dim CN As New Connection

Dim TP As New Recordset

 

 

Private Sub Form_Load()

CN.Provider = "Microsoft.Jet.OLEDB.4.0"

CN.ConnectionString = "Data Source=" & App.Path & "Empresa.mdb"

CN.CursorLocation = adUseClient

CN.Open

TP.LockType = adLockOptimistic

TP.Open "Personal", CN

End Sub

 

Private Sub Command1_Click()

TP.MoveFirst

TP.Find "Codigo = '" & Text1 & "'"

If Not TP.EOF Then

    MsgBox "Codigo Repetido", 16

    Exit Sub

End If

TP.AddNew

TP!Codigo = Text1

TP!Nombre = Text2

TP!Sueldo = Val(Text3)

TP.Update

Command2_Click

End Sub

 

Private Sub Command2_Click()

Text1 = ""

Text2 = ""

Text3 = ""

Text1.SetFocus

End Sub

 

Private Sub Command3_Click()

TP.Close

CN.Close

Unload Me

End Sub

 

 

 

 

 

 

CONSULTA INDIVIDUAL DE REGISTROS

 

Dim CN As New Connection

Dim TP As New Recordset

Dim SQL As String

 

Private Sub Form_Load()

CN.Provider = "Microsoft.Jet.OLEDB.4.0"

CN.ConnectionString = "Data Source=" & App.Path & "Empresa.mdb"

CN.CursorLocation = adUseClient

CN.Open

End Sub

 

Private Sub Command1_Click()

SQL = "Select * from Personal where codigo = '" & Text1 & "'"

Set TP = CN.Execute(SQL)

If TP.EOF Then

    MsgBox "Codigo No Existe", 16

    Exit Sub

End If

Label4 = TP!Nombre

Label5 = TP!Sueldo

End Sub

 

Private Sub Command2_Click()

Text1 = ""

Label4 = ""

Label5 = ""

Text1.SetFocus

End Sub

 

Private Sub Command3_Click()

CN.Close

Unload Me

End Sub

 

 

 

 

 

 

 

 

 

 

 

 

 

MODIFICACION DE REGISTROS

 

Dim CN As New Connection

Dim TP As New Recordset

 

Private Sub Form_Load()

CN.Provider = "Microsoft.Jet.OLEDB.4.0"

CN.ConnectionString = "Data Source=" & App.Path & "Empresa.mdb"

CN.CursorLocation = adUseClient

CN.Open

TP.LockType = adLockOptimistic

TP.Open "Personal", CN

End Sub

 

Private Sub Command1_Click()

TP.MoveFirst

TP.Find "Codigo = '" & Text1 & "'"

If TP.EOF Then

    MsgBox "Codigo No Existe", 16

    Exit Sub

End If

Text2 = TP!Nombre

Text3 = TP!Sueldo

End Sub

 

Private Sub Command2_Click()

TP!Nombre = Text2

TP!Sueldo = Val(Text3)

TP.Update

End Sub

 

Private Sub Command3_Click()

Text1 = ""

Text2 = ""

Text3 = ""

Text1.SetFocus

End Sub

 

Private Sub Command4_Click()

TP.Close

CN.Close

Unload Me

End Sub

 

 

 

 

 

ELIMINACION DE REGISTROS

 

Dim CN As New Connection

Dim TP As New Recordset

Dim SQL As String

 

Private Sub Form_Load()

CN.Provider = "Microsoft.Jet.OLEDB.4.0"

CN.ConnectionString = "Data Source=" & App.Path & "Empresa.mdb"

CN.CursorLocation = adUseClient

CN.Open

End Sub

 

Private Sub Command1_Click()

SQL = "Select * from Personal where codigo = '" & Text1 & "'"

Set TP = CN.Execute(SQL)

If TP.EOF Then

    MsgBox "Codigo No Existe", 16

    Exit Sub

End If

Label4 = TP!Nombre

Label5 = TP!Sueldo

End Sub

 

Private Sub Command2_Click()

SQL = "DELETE FROM PERSONAL WHERE CODIGO = '" & Text1 & "'"

Set TP = CN.Execute(SQL)

Command3_Click

End Sub

 

Private Sub Command3_Click()

Text1 = ""

Label4 = ""

Label5 = ""

Text1.SetFocus

End Sub

 

Private Sub Command4_Click()

CN.Close

Unload Me

End Sub

 

 

 

 

 

 

 

CONSULTA GENERAL DE REGISTROS

 

Dim CN As New CONNECTION

Dim TP As New Recordset

Dim F As Long

 

Private Sub Command1_Click()

TP.Close

CN.Close

Unload Me

End Sub

 

Private Sub Form_Load()

CN.Provider = "MICROSOFT.JET.OLEDB.4.0"

CN.ConnectionString = "DATA SOURCE=" & App.Path & "Empresa.mdb"

CN.CursorLocation = adUseClient

CN.Open

 

TP.LockType = adLockOptimistic

TP.Open "Personal", CN

TP.MoveLast

FG1.Rows = TP.RecordCount + 1

TP.MoveFirst

 

FG1.Cols = 5

FG1.ColWidth(0) = 700

FG1.ColWidth(1) = 3000

FG1.ColWidth(2) = 3000

FG1.ColWidth(3) = 1100

FG1.ColWidth(4) = 1000

 

FG1.TextMatrix(0, 0) = "Codigo"

FG1.TextMatrix(0, 1) = "Nombre"

FG1.TextMatrix(0, 2) = "Direccion"

FG1.TextMatrix(0, 3) = "Telefono"

FG1.TextMatrix(0, 4) = "Sueldo"

 

F = 0

Do While Not TP.EOF

    F = F + 1

    FG1.TextMatrix(F, 0) = TP!codigo

    FG1.TextMatrix(F, 1) = TP!NOMBRE

    FG1.TextMatrix(F, 2) = TP!DIRECCION

    FG1.TextMatrix(F, 3) = TP!TELEFONO

    FG1.TextMatrix(F, 4) = TP!SUELDO

    TP.movenext

Loop

End Sub


CONSULTA SECUENCIAL DE REGISTROS

 

Dim CN As New Connection

Dim TP As New Recordset

Dim SQL As String

 

Private Sub presenta()

Text1 = TP!codigo

Text2 = TP!Nombre

Text3 = TP!Sueldo

End Sub

 

Private Sub Command1_Click()

TP.MoveFirst

presenta

End Sub

 

Private Sub Command2_Click()

On Error GoTo a

TP.MovePrevious

presenta

Exit Sub

a:

MsgBox "Inicio del Archivo", vbInformation

TP.MoveNext

End Sub

 

Private Sub Command3_Click()

On Error GoTo a

TP.MoveNext

presenta

Exit Sub

a:

MsgBox "Fin del Archivo", vbInformation

TP.MovePrevious

End Sub

 

Private Sub Command4_Click()

TP.MoveLast

presenta

End Sub

 

Private Sub Form_Load()

CN.Provider = "Microsoft.Jet.OLEDB.4.0"

CN.ConnectionString = "Data Source=" & App.Path & "Empresa.mdb"

CN.CursorLocation = adUseClient

CN.Open

TP.Open "Personal", CN

presenta

End Sub


CONSULTA INDIVIDUAL CON FOTO

 

Dim cn As New Connection

Dim tp As New Recordset

Dim sql As String

 

Private Sub Command1_Click()

sql = "select*from personal where codigo ='" & Text1 & "'"

Set tp = cn.Execute(sql)

If tp.EOF Then

MsgBox "codigo no Existe", 16

Text1 = "": Text1.SetFocus

Exit Sub

End If

Label6 = tp!Nombre

Label7 = tp!Direccion

Label8 = tp!Telefono

Label9 = tp!Sueldo

Image1.Picture = LoadPicture(App.Path & "fotos" & Text1 & ".jpg")

End Sub

 

Private Sub Command2_Click()

Text1 = ""

Label6 = ""

Label7 = ""

Label8 = ""

Label9 = ""

Image1.Picture = LoadPicture()

Text1.SetFocus

End Sub

 

Private Sub Command3_Click()

cn.Close

Unload Me

End Sub

 

Private Sub Form_Load()

cn.Provider = "microsoft.jet.oledb.4.0"

cn.ConnectionString = "data source=" & App.Path & "Empresa.mdb"

cn.CursorLocation = adUseClient

cn.Open

End Sub


CONSULTA EMERGENTE DE DATOS

 

Private Sub msflexgrid1_DblClick()

With MSFlexGrid1

Form2.Text1 = .TextMatrix(.Row, 0)

Form2.Label4 = .TextMatrix(.Row, 1)

Form2.Label5 = .TextMatrix(.Row, 2)

Form6.Hide

End With

End Sub


INGRESO CON FLEXGRID

 

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

    TP.MoveFirst

    TP.Find "Codigo = '" & Text1 & "'"

    If Not TP.EOF Or Text1 = "" Then

      MsgBox "Codigo Repetido", 16

        Exit Sub

    End If

Text2.SetFocus

End If

End Sub

 

Private Sub Text2_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

    If Text2 = "" Then

        MsgBox "Falta Nombre", 16

        Text2.SetFocus

        Exit Sub

    End If

Text3.SetFocus

End If

 

Private Sub Text3_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

    If Val(Text3) < 0 Then

        MsgBox "INgrese el sueldo", 16: Text3.SetFocus: Exit Sub

    End If

    TP.AddNew

    TP!codigo = Text1

    TP!nombre = Text2

    TP!sueldo = Val(Text3)

    TP.Update

    Data1.RecordSource = "Select * from personal order by codigo"

    Data1.Refresh

    limpiar

   

End If

End Sub

 

Private Sub Text3_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

    If Val(Text3) < 0 Then

        MsgBox "INgrese el sueldo", 16: Text3.SetFocus: Exit Sub

    End If

    TP.AddNew

    TP!codigo = Text1

    TP!nombre = Text2

    TP!sueldo = Val(Text3)

    TP.Update

    Data1.Refresh

    limpiar

   

End If

End Sub

Programa a Trabajar 
Private Sub Command1_Click()
If Trim(Text1) = "" Then
    MsgBox "Ingrese el nombre de la ciudad", vbInformation
    Text1.SetFocus
    Exit Sub
End If
    OrdenSQL = "insert into ciudades values ('" & Label2 & "','" & Text1 & "')"
    Set rs1 = Conexion.Execute(OrdenSQL)
    Call presenta("ciudades", DataGrid1)
    Label2 = GeneraCodigo("Ciudades", "Codigo")
    Label2 = FormatoCodigo(Label2, 4)
    Text1 = Clear
    Text1.SetFocus
End Sub

Private Sub Command3_Click()
If Trim(Text1) = "" Then
    MsgBox "Ingrese el nombre de la ciudad", 16
    Text1.SetFocus
    Exit Sub
End If

OrdenSQL = "update ciudades set descripcion='" & Text1 & "' where codigo= '" & Trim(Label5) & "'"
Set rs1 = Conexion.Execute(OrdenSQL)

Call presenta("ciudades", DataGrid1)
End Sub

Private Sub Command4_Click()
End
End Sub

Private Sub DataGrid1_Click()
Label5 = DataGrid1.Columns(0).Text
Text1 = DataGrid1.Columns(1).Text
End Sub

Private Sub DataGrid1_DblClick()
On Error GoTo final
Dim op As Integer
  op = MsgBox("¿Está seguro de eliminar el registro de la base?", vbYesNo + vbInformation)
  If op = vbNo Then
     Exit Sub
  End If
  '-----------------------------------
  OrdenSQL = "Delete from ciudades where Codigo='" & DataGrid1.Columns(0).Text & "'"
  Set rs1 = Conexion.Execute(OrdenSQL)
   
  Call presenta("ciudades", DataGrid1)
  'Label3 = GeneraCodigo("ciudades", "Codigo")
  'Label3 = FormatoCodigo(Label3, 4)
  Exit Sub
final:
    MsgBox "El Registro no puede ser eliminado porque contiene datos relacionados", 16
  
End Sub

Private Sub Form_Load()
Call AbreBD
Label2 = GeneraCodigo("Ciudades", "Codigo")
Label2 = FormatoCodigo(Label2, 4)
Call presenta("ciudades", DataGrid1)
End Sub

'crea procedimientos para presentar los datos
'Public Sub presenta()
 '  OrdenSQL = "select * from Ciudades"
 '  Set rs1 = Conexion.Execute(OrdenSQL)
 '  Set DataGrid1.DataSource = rs1
'End Sub


Modulo
Public Conexion As ADODB.Connection
Public rs1 As ADODB.Recordset

Public Cod As ADODB.Recordset

Public OrdenSQL As String

Public Sub AbreBD()
  'abre la base y la enlaza
  Set Conexion = New ADODB.Connection
 
  Conexion.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" _
  & App.Path & "Clientes.mdb ;Jet OLEDB:Database1<S"
 
  Conexion.CursorLocation = adUseClient
End Sub

Public Function GeneraCodigo(tabla As String, CampoCodigo As String) As String
 'genera codigo de cualquier programa
 On Error GoTo s
 OrdenSQL = "Select max(" & CampoCodigo & ") as Maximo from " & tabla
 Set Cod = Conexion.Execute(OrdenSQL)
 GeneraCodigo = Val(Cod!Maximo) + 1
 Exit Function
s:
    GeneraCodigo = "1"
End Function

Public Function FormatoCodigo(Cod_Formatear As String, Longitud As Integer) As String
   'le da formato a el codigo
   Dim L As Integer
   L = Len(Cod_Formatear)
   For x = 1 To Longitud - L
     FormatoCodigo = FormatoCodigo + "0"
   Next x
     FormatoCodigo = FormatoCodigo + Cod_Formatear
End Function

Public Sub presenta(tabla As String, datag As Object)
OrdenSQL = "select * from " + tabla
Set rs1 = Conexion.Execute(OrdenSQL)
Set datag.DataSource = rs1
End Sub

'para utilizar este preocedimiento es estudiante debera hacer creado
'una tabla que contenga dos campos, cuyos nombres sean:
'codigo y descripcion .....
Public Sub cargarcombo(tabla As String, combo As Object)
OrdenSQL = "select * from " + tabla
Set rs1 = Conexion.Execute(OrdenSQL)
With rs1
    If Not .BOF Then
        .MoveFirst
    End If
    Do While Not .EOF
        combo.AddItem !codigo + "-" + !descripcion
        .MoveNext
    Loop
        combo.ListIndex = 0
End With
End Sub

Ejercicios de Facturacion con tablas relacionadas
 Dim CN As New Connection
Dim TC As New Recordset
Dim TA As New Recordset
Dim TF As New Recordset
Dim TD As New Recordset

Dim F, C, NF, X As Long
Dim T, ST, IVA, VP As Single

Private Sub Command1_Click()
TF.AddNew
TF!NFac = NF
TF!Fecha = Date
TF!Cod_Cli = Text1
TF.Update

For X = 1 To F
    TD.AddNew
    TD!NFac = NF
    TD!Cod_Art = FG1.TextMatrix(X, 0)
    TD!Cantidad = Val(FG1.TextMatrix(X, 2))
    TD.Update
   
    TA.MoveFirst
    TA.Find "Codigo='" & TD!Cod_Art & "'"
    TA!Existencia = TA!Existencia - TD!Cantidad
    TA.Update
Next X

Command2_Click

TF.MoveLast
NF = TF!NFac + 1
Label2 = Format(NF, "00000")
End Sub

Private Sub Command2_Click()
Text1 = ""
Label7 = ""
Text2 = ""
Label8 = ""
Text3 = ""
Label9 = ""
For X = 1 To 49
    FG1.TextMatrix(X, 0) = ""
    FG1.TextMatrix(X, 1) = ""
    FG1.TextMatrix(X, 2) = ""
    FG1.TextMatrix(X, 3) = ""
    FG1.TextMatrix(X, 4) = ""
Next X
Label13 = ""
Label14 = ""
Label15 = ""
Text1.SetFocus
Text2.Enabled = False
Text3.Enabled = False
Command1.Enabled = False
F = 0
ST = 0
End Sub

Private Sub Command3_Click()
TC.Close
TA.Close
TF.Close
TD.Close
CN.Close
Unload Me
End Sub

Private Sub Form_Load()
CN.Provider = "MICROSOFT.JET.OLEDB.4.0"
CN.ConnectionString = "DATA SOURCE=" & App.Path & "NEGOCIO.MDB"
CN.CursorLocation = adUseClient
CN.Open

TC.LockType = adLockOptimistic
TC.Open "CLIENTES", CN
TA.LockType = adLockOptimistic
TA.Open "ARTICULOS", CN
TF.LockType = adLockOptimistic
TF.Open "FACTURAS", CN
TD.LockType = adLockOptimistic
TD.Open "DETALLES", CN

FG1.Cols = 5
FG1.Rows = 50
FG1.FixedCols = 0
FG1.ColWidth(0) = 700
FG1.ColWidth(1) = 3000
FG1.ColWidth(2) = 1000
FG1.ColWidth(3) = 1000
FG1.ColWidth(4) = 1000
FG1.TextMatrix(0, 0) = "CODIGO"
FG1.TextMatrix(0, 1) = "DESCRIPCION"
FG1.TextMatrix(0, 2) = "CANTIDAD"
FG1.TextMatrix(0, 3) = "PRECIO"
FG1.TextMatrix(0, 4) = "TOTAL"

TF.MoveLast
NF = TF!NFac + 1
Label2 = Format(NF, "00000")
Label4 = Date

Text2.Enabled = False
Text3.Enabled = False
Command1.Enabled = False

ST = 0
F = 0
End Sub

 

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
    TC.MoveFirst
    TC.Find "Codigo='" & Text1 & "'"
    If TC.EOF Then
        MsgBox "Cliente No Existe !!!", 16
        Text1 = ""
        Text1.SetFocus
        Exit Sub
    End If
    Label7 = TC!Nombre
    Text2.Enabled = True
    Text2.SetFocus
End If
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
    TA.MoveFirst
    TA.Find "Codigo='" & Text2 & "'"
    If TA.EOF Then
        MsgBox "Articulo No Existe !!!", 16
        Text2 = ""
        Text2.SetFocus
        Exit Sub
    End If
    Label8 = TA!Descripcion
    Label9 = TA!precio
    Text3.Enabled = True
    Text3.SetFocus
End If
End Sub


Private Sub Text3_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
    C = Val(Text3)
    If C > TA!Existencia Then
        MsgBox "Excede Existencia", 16
        Text3 = ""
        Text3.SetFocus
        Exit Sub
    End If
    F = F + 1
    FG1.TextMatrix(F, 0) = Text2
    FG1.TextMatrix(F, 1) = Label8
    FG1.TextMatrix(F, 2) = Text3
    FG1.TextMatrix(F, 3) = FormatCurrency(Label9)
    T = TA!precio * C
    FG1.TextMatrix(F, 4) = FormatCurrency(T)
    ST = ST + T
    IVA = ST * 0.12
    VP = ST + IVA
    Label13 = FormatCurrency(ST)
    Label14 = FormatCurrency(IVA)
    Label15 = FormatCurrency(VP)
    Text2 = ""
    Label8 = ""
    Text3 = ""
    Label9 = ""
    Text2.SetFocus
    Command1.Enabled = True
End If
End Sub

 

 
  Hoy habia 11 visitantes (12 clics a subpáginas) ¡Aqui en esta página!  
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis