En este primer ejemplo sera, realizar una consulta de los clientes que concuerden con lo ingresado en el textbox, esta se conectara a la base Northwind del servidor de BD SQL 2008.
Bien veamos, crearemos un formulario donde el textbox se llamara txtCliente, y el listbox se llamara lstClientes, como se muestra en la siguiente imagen.
Este proyecto debe tener referenciada la biblioteca para el acceso a datos (Microsoft Activex Data Objects 2.8 Library), asi como mostramos en la siguiente figura:
Dentro del botón colocaremos la consulta hacia la base de los clientes que filtraremos para ser llenados dentro del listbox.
'La conexión a la base de datos
Dim cn As ADODB.Connection: Set cn = New ADODB.Connection
Dim rs As ADODB.Recordset: Set rs = New ADODB.Recordset
Dim sql As String
sql = "select CompanyName from Customers " & _
"where CompanyName like '" & Me.txtClientes & "%'" & _
"order by CompanyName"
cn.Open "Provider=SQLNCLI; " & _
"Initial Catalog=Northwind; " & _
"Data Source=PRINCESA; " & _
"integrated security=SSPI; persist security info=True;"
' Abrir el recordset de forma estática:
rs.Open sql, cn, adOpenStatic
'Llenamos el Listbox
While Not rs.EOF
Me.lstCliente.AddItem (rs!CompanyName)
rs.MoveNext
Wend
rs.Close
cn.Close
Como vemos es una consulta simple, en esta primera etapa la consulta la realizamos en el mismo proyecto o capa del usuario.
Ahora realizaremos un cambio crearemos un proyecto del tipo DLL Activex, con el nombre COMCliente, donde trasladaremos esta consulta a este proyecto, con lo cual estamos logrando la separación entre la capa del usuario y la capa de acceso a datos.
La estructura de proyectos quedara como la siguiente figura:
Como tenemos dos proyectos, para lograr que estos se comuniquen debemos de crear una referencia del Proyecto Clientes agregamos una referencia al proyecto no compilado es decir al proyecto COMCliente.vbp, el compilado nos referimos recién después de generar la dll es decir al COMCliente.dll.... mas adelante veremos como hacemos esto:
Bien, ahora en este proyecto nuevo crearemos una funcion que devuelva un recordset con la informacion de los clientes filtrados, para lo cual necesitamos enviarle el parametro del filtro, como se indica en el siguiente codigo, esto lo agregamos en la Clase Cliente del proyecto COMCliente.
Function rsClientes(ByVal xFiltro As String) As ADODB.Recordset
'La conexión a la base de datos
Dim cn As ADODB.Connection: Set cn = New ADODB.Connection
Dim sql As String
sql = "select CompanyName from Customers " & _
"where CompanyName like '" & xFiltro & "%'" & _
"order by CompanyName"
cn.Open "Provider=SQLNCLI; " & _
"Initial Catalog=Northwind; " & _
"Data Source=PRINCESA; " & _
"integrated security=SSPI; persist security info=True;"
' El recordset para acceder a los datos
Dim rs As ADODB.Recordset: Set rs = New ADODB.Recordset
' Abrir el recordset de forma estática:
rs.Open sql, cn, adOpenStatic
Set rsClientes = rs
End Function
Una vez realizado esto, volvemos al proyecto Clientes, para usar este proyecto de acceso a datos y cargar nuestro listbox, dentro del boton mostrar escriberemos lo siguiente:
If Me.txtClientes.Text = "" Then
MsgBox "Ingrese a lo menos un caracter", vbCritical, "Sist Clientes"
Else
Dim xcliente As COMCliente.cliente
Set xcliente = New COMCliente.cliente
Dim rs As New ADODB.Recordset
Set rs = xcliente.rsclientes(Me.txtClientes.Text)
'Llenamos el Listbox
While Not rs.EOF
Me.lstCliente.AddItem (rs!CompanyName)
rs.MoveNext
Wend
End If
Con esta forma de trabajo separamos en capas la funcionalidad de lo que queremos hacer, como nos representa la siguiente figura, pero este tipo de DLL's son las que se alojan en el mismo cliente, el esfuerzo para consultas pesadas o es mas pesadas y con una alta concurrencia a la base de datos hara que nuestro sistema se vuelva mas pesado.
Lo realizado acá se puede representar en la siguiente figura:
Lo siguiente se realizar los ejecutables, para ser llevados a instalarse al cliente, para esto primero se debe de empezar con las DLL's de mas bajo nivel aquellas que no tengan referencia a ni un proyecto, en este caso empezaremos con COMCliente.
Seleccionamos el proyecto y en el menú archivo seleccionaremos Genera COMCliente.dll que es la compilación para la generación de la DLL.
una vez generada esta dll seleccionamos el proyecto Clientes y ahora hacemos referencia a esta dll creada.
Una vez realizado esto desde el mismo menu seleccionamos generar Clientes.exe, para crear el exe a instalar,
finalmente estos dos archivos se alojan en el cliente y previo registro de esta dll con el comando REGSVR32.
No hay comentarios:
Publicar un comentario