Centro Nacional de Capacitación y Calidad

Anuncio
CENTRO NACIONAL DE
CAPACITACIÓN Y CALIDAD
Coordinación de Informática
Visual Basic 6.0 Avanzado
V is u a l
B as ic
a v an za d o
Índice
PRESENTACIÓN ............................................................................................... 3
INTRODUCCIÓN ................................................................................................ 4
MÓDULO I. PROCEDIMIENTOS Y FUNCIONES .............................................. 5
PROGRAMACIÓN ORIENTADA A EVENTOS ..................................................................... 5
PROCEDIMIENTOS .............................................................................................................. 6
Procedimientos Sub ............................................................................................................ 6
Funciones (Function) .......................................................................................................... 8
ARGUMENTOS ................................................................................................................... 10
Tipos de datos .................................................................................................................. 10
Paso de argumentos como valor: ByVal ........................................................................... 12
Paso de argumentos por referencia: ByRef ...................................................................... 12
COMENTARIOS .................................................................................................................. 13
ESTRUCTURAS DE CONTROL ......................................................................................... 14
Expresión condicional ....................................................................................................... 14
Estructura de decisión IF… THEN .................................................................................... 14
Estructura de decisión SELECT CASE ............................................................................. 15
Estructura de decisión DO ................................................................................................ 15
Estructura de decisión FOR… NEXT ................................................................................ 15
MÓDULO II. GESTIÓN DE BASES DE DATOS ............................................... 16
CONEXIONES CLIENTE – SERVIDOR .............................................................................. 16
ODBC (CONECTIVIDAD ABIERTA A BASES DE DATOS) .............................................. 16
ESTABLECIMIENTO DE CONEXIONES CLIENTE-SERVIDOR ........................................ 17
ActiveX Data Object: ADO ................................................................................................ 18
El control FlexGrid en la gestión de datos ........................................................................ 22
Objeto Recordset .............................................................................................................. 24
Instrucciones SQL en Visual Basic ................................................................................... 26
Exportación de Datos........................................................................................................ 28
PROYECTO PRINCIPAL .................................................................................. 32
FORMULARIOS Y PROGRAMACIÓN EN VISUAL BASIC ............................................... 32
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 2
V is u a l
B as ic
a v an za d o
PRESENTACIÓN
El Instituto Mexicano del Seguro Social conjuntamente con el Sindicato
Nacional de Trabajadores del Seguro Social comprometidos con la superación y
actualización del personal, impulsan la Capacitación en materia de Informática,
Humanística, Promocional y de Programas Institucionales que se vinculen a la
solución de los problemas de la operación, favoreciendo el otorgamiento de
servicios de calidad.
En este contexto la Coordinación de Informática del Centro Nacional de
Capacitación y Calidad, cumple con la tarea de elaborar los Materiales de
Apoyo Didáctico del Participante para sustentar los cursos de los Planes de
Capacitación en Informática que integran el programa de trabajo de esta
Coordinación y que están abiertos a todos nuestros compañeros trabajadores.
A continuación se presenta el Material de Apoyo Didáctico del Participante
Visual Basic 6.0 Avanzado, que ha sido elaborado con información, actualizada
y el sustento pedagógico y didáctico para que cumpla con el fin para el cual fue
elaborado: conducir y apoyar el aprendizaje de los trabajadores.
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 3
V is u a l
B as ic
a v an za d o
INTRODUCCIÓN
El presente material de apoyo incluye una exposición detallada de las
herramientas empleadas con mayor frecuencia en el desarrollo de aplicaciones
con Visual Basic: términos, definiciones, ejemplos, ilustraciones y un proyecto
cuyos contenidos permitirán a los participantes no sólo obtener una idea global
sobre el empleo de estas, sino también la posibilidad de crear sistemas
informáticos acordes a necesidades específicas en diversas áreas de trabajo,
siguiendo los modelos aquí presentados.
Visual Basic 6.0 Avanzado incluye dos módulos en los que se concentra la
información necesaria para desarrollar aplicaciones, siendo estos los
siguientes:
MÓDULO I. ---------------------------------------- PROCEDIMIENTOS Y FUNCIONES
MÓDULO II. ------------------------------------------ GESTIÓN DE BASES DE DATOS
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 4
Pr oc e d im ie nt o s
MÓDULO I. PROCEDIMIENTOS Y FUNCIONES
PROGRAMACIÓN ORIENTADA A EVENTOS
Los programas se relacionan con el usuario, esperan una respuesta y procesan las entradas
de datos de forma “predecible”. A esta manera de trabajar una aplicación, se le conoce como
programación orientada a eventos. Esta es una característica fundamental de los programas
creados en Visual Basic; éstos se construyen partiendo de un grupo de objetos “inteligentes”
que saben cómo responder al darse la interacción con el usuario.
La orientación a eventos de los programas desarrollados en Visual Basic, se traduce en que
gran parte de las operaciones que pueden llevar a cabo las aplicaciones que construya,
serán ejecutadas mediante procedimientos de evento. Estos bloques de código (orientados a
evento) procesarán las entradas, calcularán valores, mostrarán la salida de datos y también
serían capaces de realizar otras tareas.
Cada objeto en Visual Basic tiene un conjunto predefinido de eventos, a los cuales puede
responder; estos eventos se listan en el cuadro de lista desplegable Procedure
(procedimiento) de la ventana Código para cada uno de los objetos contenidos en el
formulario en uso. Es posible escribir un procedimiento de evento no sólo para cada objeto,
sino también por cada uno de los eventos reconocidos por visual para los controles; y
aunque es muy probable que no necesite programar más de un evento, considere que existe
un amplio número de alternativas entre las cuales elegir para adecuar el funcionamiento y
operatividad de sus programas según los requerimientos específicos que sea necesario
satisfacer.
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 5
Pr oc e d im ie nt o s
Ejemplo 1: al cargarse un formulario, se ejecutará el procedimiento que incluya el evento
Form_Load(), en la pantalla de código.
Private Sub Form_Load()
txtUsuario.Text=””
txtContraseña.Text=””
cmdAceptar.Enabled=False
cmdCancelar.Enabled=False
txtUsuario.SetFocus
End Sub
Ejemplo 2: al hacer click en un command button nombrado cmdAgregar, el procedimiento del
evento cmdAgregar_Click() es ejecutado.
Private Sub cmdAgregar_Click()
intInstruccion = Agregar
P_Cambios
txtArticulo.SetFocus
End Sub
De esta forma, la mayoría de los controles estarán vinculados a eventos concretos, a partir
de los cuales tendrán efecto los procedimientos codificados.
PROCEDIMIENTOS
Procedimientos Sub
Un procedimiento Sub no puede retornar un valor, así que es una completa declaración; La
sintaxis para cualquier procedimiento Sub es la siguiente:
Sub NombreProcedimiento(ArgList*) *véase el apartado de Argumentos
Declaraciones o expresiones
End Sub
Los procedimientos Sub pueden ser de tipo Private o Public. Los procedimientos Private
Sub tendrán efecto sobre el objeto o control al que se asocia el evento que desencadena el
procedimiento. En el siguiente ejemplo se establece que el procedimiento se llevará a cabo
cuando el usuario ejecute el evento doble clic sobre el objeto flxClientes. El código escrito no
tendrá utilidad alguna si el evento no ocurre.
Private Sub flxClientes_DblClick()
Dim strSql As String
Dim rstClieSel As New ADODB.Recordset
flxClientes.Col = 0
strSql = "SELECT * FROM Clientes WHERE Clie_Clave= " & flxClientes.Text
rstClieSel.Open strSql, strConexion, adOpenStatic, adLockReadOnly
txtClave.Text = rstClieSel("Clie_Clave")
txtNombre.Text = rstClieSel("Clie_Nombre")
txtRfc.Text = rstClieSel("Clie_Rfc")
Set rstClieSel = Nothing
End Sub
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 6
Pr oc e d im ie nt o s
Los procedimientos Public Sub generalmente se utilizan o son llamados desde cualquier
otro procedimiento público o privado (siempre y cuando ambos se encuentren cargados en
memoria, es decir, cuando ambas pantallas que los contengan se encuentren en ejecución);
si el procedimiento se describe dentro de la pantalla de código de alguno de nuestros
formularios, todos los controles u objetos dentro del formulario podrán utilizarlo, con su
evento respectivo, permitiendo ahorrar líneas de código con tan sólo nombrarlo. Observe el
siguiente ejemplo, en el que se describe como un procedimiento el formato que debe tener
un FlexGrid.
Public Sub P_FormatoGrid()
With flxClientes
.Cols = 3
.Rows = 1
.Row = 0
.Col = 0
.Text = "Clave"
.ColWidth(0) = 600
.Col = 1
.Text = "Nombre"
.ColWidth(1) = 3500
.Col = 2
.Text = "R.F.C."
.ColWidth(2) = 1600
End With
End Sub
Al cargarse el formulario en cuestión, el objeto flxClientes, referido en el procedimiento
P_FormatoGrid(), deberá mostrarse con las características descritas; a continuación vea
como es llamado este procedimiento desde el Private Sub Form_Load.
Private Sub Form_Load()
P_FormatoGrid
End Sub
Igualmente será posible declarar un procedimiento Sub en algún Módulo (o módulo
estándar) del proyecto. Los módulos son archivos especiales con extensión .bas que
contienen las variables y procedimientos que se desean compartir para todas las formas y
controles del proyecto. Esto permite reducir líneas de código de programación y evita
duplicar el código. Cada módulo puede contener: Declaraciones; es decir constantes y
variables globales y Procedimientos generales. Los procedimientos que se encuentran en un
módulo estarán disponibles en todo momento mientras se ejecuta nuestro programa (estarán
n memoria todo el tiempo). Todos los procedimientos de un módulo, pueden ser llamados
desde el código. Ejemplo:
Código en el módulo:
Sub P_Bienvenida()
MsgBox "Bienvenido al Sistema de Administración Empresarial"
End Sub
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 7
Pr oc e d im ie nt o s
Uso de este procedimiento en los menús del formulario principal en una aplicación:
Private Sub mnuClientes_Click()
frmClientes.Show
P_Bienvenida
End Sub
Private Sub mnuProductos_Click()
frmProductos.Show
P_Bienvenida
End Sub
Private Sub mnuVentas_Click()
frmVentas.Show
P_Bienvenida
End Sub
Como se sugiere en el código para cada menú, al abrirse los formularios respectivos, se
llama al procedimiento P_Bienvenida, que en pantalla mostrará el mensaje: "Bienvenido al
Sistema de Administración Empresarial", que se ha descrito en el Msgbox del Sub
P_Bienvenida, creado en el módulo.
Es común también desarrollar procedimientos dentro del módulo principal del proyecto, que
sean válidos para el arranque de la aplicación en uso, pudiera tratarse por ejemplo, del
procedimiento en el que se detalla la información concerniente a la conexión del programa
con una Base de Datos y tal vez la invocación de la primera pantalla que se mostraría al
ejecutarse.
Por ejemplo:
Sub Main()
Dim cntConexion As New ADODB.Connection
With cntConexion
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=C:\Visual Basic\Ejercicios\Empresa.mdb"
.Open
strConexion = .ConnectionString
.Close
End With
Set cntConexion = Nothing
mdiPrincipal.Show
End Sub
FUNCIONES (Function)
Una función puede retornar un valor y deberá utilizarse como parte de una expresión; la
sintaxis habitual de una función es la siguiente;
Function NombreFunción (ArgList) [As tipo]
Declaraciones
End Function
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 8
Pr oc e d im ie nt o s
Las Function, pueden declararse como Private o Public, tal y como sucede con los
procedimientos Sub. Las Private Function pueden ser utilizadas dentro de un formulario, y
por uno o varios controles en el mismo, mientras que las Public Function ofrecen la
posibilidad de ser llamadas desde cualquier pantalla o control de la aplicación.
Se puede utilizar la siguiente Private Function, definida como booleana, para exigir la
captura de datos en una caja de texto llamada txtNombre.Text dentro de un formulario.
Private Function F_ValidarDatos() As Boolean
F_ValidarDatos = False
If txtNombre.text = “” Then
Msgbox “Debe capturar un nombre en la caja de texto”
txtNombre.SetFocus
Exit Function
End if
F_ValidarDatos = True
End Function
Ahora bien, la función F_ValidarDatos tiene que llamarse desde otro procedimiento dentro
del código del formulario donde se ha creado, para así ejecutarse; en nuestro ejemplo, en
una pantalla de captura, si el usuario no ha registrado el dato requerido en la caja de texto
indicada en la función, al intentar aceptar la información, el programa exigirá la escritura de
los datos requeridos antes de continuar con la secuencia de instrucciones codificadas en el
procedimiento que invoca a la función:
Private Sub cmdAceptar_Click()
If Not F_ValidarDatos Then Exit Sub
Msgbox “Los datos son válidos”
Unload me
frmSiguiente.Show
End Sub
Al describir alguna Function dentro de los módulos, ésta podrá invocarse desde cualquier
forma o control del proyecto. Observe el desarrollo de la siguiente función:
Public Function F_ClaveConsecutiva(astrTabla As String, astrCampo As String) As Long
Dim rstConsecutiva As New ADODB.RecordSet
Dim strSql As String
strSql = “SELECT “& astrCampo & “ FROM “ & astrTabla & “ ORDER BY “ & astrCampo
rstConsecutiva.Open strSql, strConexion, AdOpenStatic, AdLockReadOnly
If rstConsecutiva.RecordCount = 0 Then
F_ClaveConsecutiva = 1
Else
rstConsecutiva.MoveLast
F_ClaveConsecutiva = rstConsecutiva(0) + 1
End If
Set rstConsecutiva = Nothing
End Function
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 9
Pr oc e d im ie nt o s
Tal y como ocurre con una Private Function, toda Public Function debe invocarse para ser
ejecutada. Recuerde que las Function son parte de una expresión, y no pueden devolver un
valor por sí solas. Observe cómo la función anterior (F_ClaveConsecutiva) se utiliza en el
código de un procedimiento Sub.
Private Sub cmdAceptar_Click()
Dim cntClientes As New ADODB.Conection
Dim strSql As String
If intInstruccion = Agregar Then
If Not F_ValidarDatos Then Exit Sub
strSql = “INSERT INTO Clientes “
strSql = strSql & “(Clie_Clave, Clie_Nombre, Clie_Rfc) ”
strSql = strSql & VALUES („“
strSql = strSql & F_ClaveConsecutiva (“Clientes”, “Clie_Clave”) & “‟, „”
strSql = strSql & txtNombre.Text & “„, „”
strSql = strSql & txtRfc.Text & ”‟)”
With cntClientes
.ConnectionString = strConexion
.Open
.Execute (strSql)
.Close
End with
Msgbox “El registro se agregó correctamente”
intInstrucción = Inactivo
P_ActualizarGrid
P_Inicial
End If
End Sub
ARGUMENTOS
Un procedimiento puede obtener datos externos necesarios para su propia ejecución. Esta
información se contiene en variables que se cargan o transfieren al procedimiento cuando es
invocado. Para ello se utilizan los argumentos.
En el apartado de la sintaxis de los procedimientos Sub y Function se menciona el término
Arglist, que no es otra cosa más que la lista de argumentos que emplea cada
procedimiento, separados por comas (,) si hay más de uno, o bien vacío si no se considera
necesario incluirlos.
La sintaxis de un argumento es:
([ByRef|ByVal] Nombre_de_variable As Tipo)
Tipos de datos
Los argumentos de los procedimientos tienen el tipo de dato Variant de forma
predeterminada, es decir que puede asumir prácticamente cualquier tipo de dato reconocido
en Visual Basic. Sin embargo, es posible declarar otros tipos de datos para los argumentos,
según se requiera, como se deja ver en los ejemplos siguientes:
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 10
Pr oc e d im ie nt o s
Public Function F_ClaveConsecutiva(astrTabla As String, strCampo As String) As Long
Dim rstConsecutiva As New ADODB.RecordSet
Dim strSql As String
strSql = “SELECT “& astrCampo & “ FROM “ & astrTabla & “ ORDER BY “ & astrCampo
rstConsecutiva.Open strSql,strConexion,AdOpenStatic,AdLockReadOnly
If rstConsecutiva.RecordCount = 0 Then
F_ClaveConsecutiva = 1
Else
rstConsecutiva.MoveLast
F_ClaveConsecutiva = rstConsecutiva(0) + 1
End If
Set rstConsecutiva = Nothing
End Function
En este ejemplo, astrTabla y astrCampo son los argumentos, definidos ambos con String
como el tipo de dato. Su uso se muestra en otro procedimiento dentro de la aplicación:
Private Sub cmdAceptar_Click()
Dim cntClientes As New ADODB.Conection
Dim strSql As String
If intInstruccion = Agregar Then
If Not F_ValidarDatos Then Exit Sub
strSql = “INSERT INTO Clientes “
strSql = strSql & “(Clie_Clave, Clie_Nombre, Clie_Rfc) ”
strSql = strSql & VALUES („“
strSql = strSql & F_ClaveConsecutiva (“Clientes”, “Clie_Clave”) & “‟, „”
strSql = strSql & txtNombre.Text & “„, „”
strSql = strSql & txtRfc.Text & ”‟)”
With cntClientes
.ConnectionString = strConexion
.Open
.Execute (strSql)
.Close
End with
Msgbox “El registro se agregó correctamente”
intInstrucción = Inactivo
P_ActualizarGrid
P_Inicial
End If
End Sub
En este caso la expresión F_ClaveConsecutiva (“Clientes”, “Clie_Clave”), describe con
claridad la información que contendrán las variables, en cuyo caso hacen referencia al
nombre de una tabla y al nombre de un campo de la misma, respectivamente.
Sub P_Calculo (asngPrecio As Single, aintCantidad As Integer)
lblTotal.Caption = asngPrecio * aintCantidad
End Sub
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 11
Pr oc e d im ie nt o s
En donde asngPrecio y aintCantidad son los nombres de los argumentos; y Single e Integer
determinan el tipo de dato al que se refiere cada variable. La siguiente tabla muestra los
distintos tipos de datos que podrán asignarse a las variables en Visual Basic.
Nombre
Integer (entero)
Descripción
Numérico, entero
Rango de valores
de -32768 a 32767
Espacio requerido
16 bits (2 bytes)
Long (largo)
Numérico, entero
de -21474836 48 a 2147483647
32 bits (4 bytes)
texto
de 0 a 65500 caracteres aprox.
8 bits (1 byte) por
String (cadena)
carácter
Currency
(moneda)
Numérico, decimal de -922337203685477,5807 a
fijo
64 bits (8 bytes)
9223372036854777,5807
Single (simple)
Numérico real
45
38
de +- 1.40x10 a +-3.40x10
32 bits (4 bytes)
Double (doble)
Numérico, real
324
308
de +- 4.94x10
a +- 1.79x10
64 bits (8 bytes)
Byte
Carácter
0 a 255
1 byte
Boolean
Boleano
True False
2 bytes
1/01/100 al 31/12/9999
8 bytes
Cualquiera de los anteriores
Depende del valor
Date
Variant
Fecha/Hora
Adaptable
(variable)
Paso de argumentos como valor: ByVal
ByVal es una expresión clave que indica a Visual Basic que debe gestionar una copia del
argumento original y devolverlo sin modificar cuando el procedimiento termina, aún cuando
durante la ejecución del mismo el valor de la variable haya sido actualizado; el cambio
afecta sólo a la copia y no a la variable original. La forma predeterminada de pasar valores
en Visual Basic es por valor.
ByVal se utiliza dentro de una lista de argumentos tal y como se muestra en el ejemplo:
Private Function Operacion(ByVal adblIncremento As Double)
adblIncremento = adblIncremento * 1.05
adblIncremento = adblIncremento / 2
Operación = adblIncremento
End Function
Al terminar, la variable que se haya utilizado como argumento contendrá el valor original
sin sufrir ningún cambio.
Paso de argumentos por referencia: ByRef
Al pasar argumentos por referencia se permite al procedimiento el acceso al contenido real
de la variable en su dirección de memoria (ByRef significa por referencia, esta referencia
es hacia la ubicación de la variable original en la memoria). Como resultado, el
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 12
Pr oc e d im ie nt o s
procedimiento al que se haya pasado la variable como argumento, puede modificar el valor
de la misma.
Esta expresión se empelará cuando sea necesario actualizar el valor de una variable al
ejecutarse un procedimiento.
Function F_OpcionCombo(ByRef acboCombo As ComboBox, alngIndice As Long)
Dim intContador As Integer
For intContador = 0 To acboCombo.ListCount – 1
With acboCombo
If .ItemData(intContador) = alngIndice Then
F_OpcionCombo = intContador
Exit For
End If
End With
Next
End Function
Si el argumento no estuviera definido ByRef, no se realizarían los cambios en el combo.
COMENTARIOS
En Visual Basic el apóstrofe (‘) se utiliza para agregar líneas de comentario, las cuales
generalmente contendrán notas explicativas. El hecho de incluir comentarios en el código de
un programa permite describir la función que cumplen las sentencias más importantes; estas
notas no se procesan durante la ejecución de los procedimientos, simplemente facilitan la
relectura y revisión del código en sesiones posteriores. En la pantalla de Visual se distinguen
además por mostrarse en color verde. Ejemplo:
Public Function F_ClaveConsecutiva(Astr_Tabla As String, Astr_Campo As String) As Long
'se dimensiona el RecordSet
Dim RSTConsecutiva As New ADODB.Recordset
'se dimensiona la variable SQL
Dim strsql As String
'instrucción que extraerá información desde la base de datos
strsql = "SELECT " & Astr_Campo & " FROM " & Astr_Tabla & " ORDER BY " &
Astr_Campo
'expresión que crea el RecordSet
RSTConsecutiva.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
'el siguiente If determina el número consecutivo con el que un nuevo registro se agregará
a la base de datos
If RSTConsecutiva.RecordCount = 0 Then
F_ClaveConsecutiva = 1
Else
RSTConsecutiva.MoveLast
F_ClaveConsecutiva = RSTConsecutiva(0) + 1
End If
Set RSTConsecutiva = Nothing
End Function
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 13
Pr oc e d im ie nt o s
ESTRUCTURAS DE CONTROL
Como ya se ha descrito al comienzo de este primer módulo, al activarse un evento o suceso,
Visual Basic responde llamando al procedimiento asociado con el objeto que reconoce tal
evento. La orientación a eventos, característica de los programas desarrollados en Visual
Basic, se traduce en que la mayoría de las operaciones disponibles en las aplicaciones,
serán ejecutadas mediante procedimientos de eventos. El código permite procesar la entrada
de datos, el cálculo de nuevos valores y la salida de información, entre otras tareas. Podrá
crear procedimientos capaces de responder a cualquier situación en la medida en que
conozca y aplique las estructuras de control: las estructuras de decisión, que se utilizan
para comparar variables, propiedades y valores, y los bucles, que nos dan la posibilidad de
ejecutar un grupo de sentencias una y otra vez un número determinado de veces o hasta que
se cumpla una condición
Expresión condicional
Una de las herramientas más útiles en el procesamiento de información es la expresión
condicional, que forma parte de una sentencia de programa que realiza preguntas que
requieren respuestas del tipo True o False sobre una propiedad o variable en el código del
programa. La siguiente expresión condicional:
Precio = 180
Resultará verdadera si la variable precio contiene un valor similar a 180, en caso contrario
resultará falsa. En este tipo de expresiones se utilizan los operadores de comparación que se
muestran a continuación:
OPERADOR DE
COMPARACIÓN
SIGNIFICADO
=
Igual que…
<>
Distinto de…
>
Mayor que…
<
Menor que…
>=
Mayor o igual que…
<=
Menor o igual que…
BETWEEN
Entre… (intervalos)
Estructura de decisión IF… THEN
La estructura If… Then permite evaluar una condición en el programa y llevar a cabo una
serie de instrucciones, según sea el resultado de dicha condición. La sintaxis habitual en esta
estructura es la siguiente:
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 14
Pr oc e d im ie nt o s
IF <<condición>> THEN
<<instrucciones>> (verdadero)
ELSE
<<instrucciones>> (falso)
END IF
Estructura de decisión SELECT CASE
Funciona de manera similar a la estructura anterior, pero resulta más conveniente cuando se
debe evaluar la bifurcación de una variable clave en varias cláusulas. La sintaxis empleada
se muestra en la página siguiente.
SELECT CASE <<objeto>>
CASE x
<<instrucciones>>
CASE y
<<instrucciones>>
CASE z
<<instrucciones>>
CASE ELSE
<<instrucciones>>
END SELECT
Estructura de decisión DO
Permite ejecutar un grupo de sentencias hasta que cierta condición del bucle o ciclo sea
verdadera; los bucles con DO se utilizan cuando no se conoce con exactitud el número de
ocasiones en las que se repetirá el conjunto de instrucciones. La sintaxis habitual es la
siguiente:
DO WHILE <<condición>>
<<instrucciones>>
LOOP
Estructura de decisión FOR… NEXT
Permite crear bucles para ejecutar un conjunto de sentencias contenidas en un
procedimiento un número determinado de veces.
FOR <<contador>> inicial TO final
<<instrucciones>>
NEXT
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 15
G es t i ó n
de
B a s e
d e
Da tos
MÓDULO II. GESTIÓN DE BASES DE DATOS
Visual Basic es compatible con una gran variedad de formatos de bases de datos, pues
permite utilizar gestores tales como Access, FoxPro, Paradox, Dbase o SQL Server. Con las
potentes herramientas que posee Visual Basic, podrá mejorar la presentación de la
información contenida en sus bases de datos y simplificar, simultáneamente, la
administración de la misma.
CONEXIONES CLIENTE – SERVIDOR
Los sistemas Cliente-Servidor, se refieren elementalmente a aquellos equipos de cómputo
que contienen al mismo tiempo bases de datos (servidores) y la o las aplicaciones que
utilizan precisamente esas bases de datos (clientes). En una red, el concepto ClienteServidor hace alusión a la conexión entre estaciones de trabajo (clientes) y un servidor de
archivos (bases de datos, aplicaciones); en este caso cada conexión permite un enlace
individual entre ambos. (Como recomendación por demás necesaria, cuando desarrolle una
aplicación que tenga acceso a una base de datos remota, debe implementar un modelo
relacional bien diseñado).
Antes de tomar la decisión final sobre el modelo de programación que va a implementar,
debe tener en cuenta una serie de aspectos que afectan al diseño independientemente del
modelo: para tener acceso a un servidor remoto, su aplicación tiene que establecer una
conexión. Esta conexión crea un vínculo de comunicaciones en la red entre el servidor y el
cliente. A su aplicación se le pasa un controlador de esta conexión. Una vez creada, la
conexión proporciona acceso a un servidor específico, a una de las bases de datos del
servidor y a cualquiera de los objetos temporales específicos de la conexión que su
aplicación cree en el servidor.
ODBC (CONECTIVIDAD ABIERTA A BASES DE DATOS)
La tecnología ODBC (Conectividad abierta a bases de datos) proporciona una interfase
común para acceder bases de datos heterogéneas basadas en SQL. ODBC esta basado en
el lenguaje Estructurado de consultas (SQL) como una norma para acceder a los datos. Esta
interfase proporciona interoperabilidad al máximo: no solo la aplicación puede acceder bases
de datos de diferentes Sistemas basados en SQL, a través de un juego común de código.
Esto le permite a un diseñador construir y distribuir una aplicación cliente/servidor sin tener
un DBMS específico. Se agregan drivers para unir la aplicación, a la base de datos destino,
con el fin de que el usuario elija el DBMS deseado.
ODBC es un intermediario entre bases de datos y aplicaciones, cuya tarea es sostener una
conversación de preguntas y respuestas entre dos "sujetos" que no hablan el mismo idioma y
que gestionan sus recursos de forma diferente, esto es una abstracción de un concepto muy
tecnificado. Concretando, puedes tener un CAD, una hoja de calculo, un editor de texto, etc.,
cuyas finalidades son las que quieras, menos gestionar datos en la forma que lo hace un
sistema de base de datos; estas aplicaciones no saben como se obtienen y se guardan datos
en, por ejemplo, un archivo MDB de Microsoft Access, o en un DBF, o en SQL Server, o en
algún otro. Por otra parte, pero en lo mismo, que tal si un usuario de Paradox quiere extraer
información de SQL Pato, un nuevo sistema de lo más avanzado que nadie conoce pero que
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 16
G es t i ó n
de
B a s e
d e
Da tos
alguien uso para guardar información que resulta necesaria (no sabes cuántas veces
sucede), ambos son sistemas de bases de datos, Paradox conoce la forma de leer los
archivos de los sistemas conocidos, pero no los de SQL Pato.
En el ambiente Windows, Microsoft creó la tecnología ODBC pensando en este problema. No
es una solución de la comunidad informática del orbe, es de Microsoft, y por eso se basa en
los impulsos estomacales del corazón de Microsoft; esto quiere decir que no se esta
recomendando esta tecnología, sino que mientras sea en Windows, hay que usarla cuando
no hay algo mejor, punto. ODBC es una utilería que alberga controladores. La utilería sirve
para gestionar los controladores, y los controladores son los que saben "hablar" con las
bases de datos. Entonces el "acuerdo" entre Microsoft y los fabricantes de software para
Windows fue: "Ustedes, que hacen software no especifico para bases de datos, enseñen, si
quieren, a sus aplicaciones a comunicarse con el armatoste llamado ODBC; y ustedes,
fabricantes de bases de datos, hagan controladores de sus sistemas para ponerlos en la
utilería, si quieren que otras aplicaciones puedan acceder su información".
Así Excel puede leer una base de datos en Access o SQL Server, incluso SQL Pato (si es
que alguien fabricó un controlador de ODBC). Siendo sinceros, esas no son todas las
razones ni los intereses por los que ODBC fue implementado, hay cierta oscuridad por ahí.
En ODBC no se tiene que hacer gran cosa, es una simple tarea, se llama crear un origen de
datos, otros le denominan fuente en vez de origen. Un origen o fuente de datos consiste en el
nombre, el controlador y la base de datos. Por ejemplo, si un usuario quiere tener acceso a
una base de datos de Access, digamos que se llama Negocio.mdb, desde una hoja de
cálculo de Excel para consultar su volumen de ventas por país, este usuario crea un nuevo
origen de datos en ODBC llamado Volumen_Ventas (este es, pues, el nombre), después
selecciona un controlador para Microsoft Access e indica el archivo de base de datos está en
"c:\LaEmpresa\Administración\Negocio.mdb". Eso es básicamente de lo que se trata.
ESTABLECIMIENTO DE CONEXIONES CLIENTE-SERVIDOR
Dependiendo del modelo de programación cliente-servidor de acceso a datos que elija,
puede establecer una conexión con un servidor remoto desde el código con los siguientes
métodos descritos.
En Visual Basic, existen tres formas de acceso a datos: ActiveX Data Objects (ADO), Remote
Data Objects (RDO) y Data Access Objects (DAO). Una interface de acceso a datos es un
modelo de objetos que representan una forma de accesar datos desde una BD. La última
versión de conexión es ADO, que resulta simple y muy flexible, además de que contiene la
facilidad de uso de DAO y la robustes de RDO.
DAO - Data Access Objects (Objetos de Acceso a Datos) es el método anterior (VB 5) para
programar bases de datos. DAO usa la antigua tecnología OLE para conectarse con las
bases de datos.
RDO - Remote Data Objects (Objetos de Datos Remotos) es el método usado para conectar
PC‟s con bases de datos remotas en un ambiente cliente-servidor (por ejemplo una base de
datos Oracle en un equipo remoto Unix), Usa la ODBC (Open Data Base Conectivity, o
Conectividad Abierta de Bases de Datos), puesto que los controladores OBDC son el método
que emplea en general Windows 9x para conectarse con bases de datos externas.
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 17
G es t i ó n
de
B a s e
d e
Da tos
ADO - Activex Data Object (Objetos de Datos Activos) ADO es un elemento de la API
(Application Program Interface) de Microsoft que le permite escribir aplicaciones para
Windows que acceden a bases de datos relacionales y no-relacionales provenientes tanto de
Microsoft como de cualquier otro proveedor. Una aplicación para ADO es por ejemplo cuando
se tiene una Sitio WEB y se desea tener una base de datos que los usuarios puedan
examinar y actualizar. Si la página posee una archivo de tipo IBM DB2 o de Oracle entonces
podremos escribir un programa con instrucciones en ADO dentro del archivo HTML que lo
identifique como un ASP (Active Server Page). Cuando el usuario haga la petición de la
página ASP, ésta devolverá los datos pedidos por el usuario por medio de las Instrucciones
en ADO.
Al igual que otras interfaces de Microsoft, ADO esta orientado a objetos y es parte de una
estrategia de Microsoft llamada UDA (Universal Data Access) que consiste en intentar crear
un puente entre los diferentes formatos de archivos de los Sistemas Manejadores de Bases
de Datos para lograr una estandarización de la información y a su vez crear nuevos drivers
para los formatos de archivos venideros.
En este curso aprenderemos a manejar conexiones con bases de datos utilizando la interfase
ADO, para lo cual describiremos los procedimientos necesarios para crear la referencia
conveniente, la definición de la conexión con sus características básicas, y la ejecución y
cierre de la base de datos mientras el programa esté en uso.
ActiveX Data Object: ADO
Para crear la referencia a ADO, es decir activar la disponibilidad de las funciones y
propiedades de esta interfase, deberá llevar a cabo el siguiente procedimiento:
1. Menú Project
2. Opción References
3. Seleccionar de la lista Microsoft ActiveX Data
Objects 2.5 Library (o la versión disponible)
4. Presionar OK
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 18
G es t i ó n
de
B a s e
d e
Da tos
Una vez que se ha referenciado la librería ADO, será posible dimensionar la conexión, para
ello considere la ubicación de la base de datos; ésta puede localizarse en servidor, en la
misma ruta de la aplicación que se está desarrollando, o bien, en un directorio distinto al de
la aplicación dentro del equipo de cómputo.
Al crear la conexión con la base de datos tendrá que determinar si la conexión permanecerá
abierta permanentemente o si estará disponible sólo cuando la aplicación necesite de acudir
a la base de datos para gestionar
la información de la misma
(actualizar, agregar, consultar,
eliminar… registros). Por defecto,
la aplicación reconocerá la
conexión con la base de datos al
haber sido definida en el módulo
principal, desde el arranque de la
misma, siempre que no haya
olvidado establecer como objeto
inicial al procedimiento principal.
(Startup Object: Sub Main)
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 19
G es t i ó n
de
B a s e
d e
Da tos
1. CONEXIONES PERMANENTES
a. EN EL MISMO EQUIPO Y UBICACIÓN
En primer lugar deberá dimensionar una variable global que identifique la nueva conexión,
como nueva conexión ADO, dentro del módulo principal del proyecto.
Global CNTventas As ADODB.Connection
Enseguida creará el procedimiento en el que se instancie o active la nueva conexión,
definiendo las propiedades principales para la misma, como son: el motor del gestor de la
base de datos y la ruta del origen de datos.
Sub Main()
Set CNTventas = New ADODB.Connection
With CNTventas
.Provider = "Microsoft.jet.oledb.4.0"
.ConnectionString = "Data Source=" & App.Path & "\BD_Procedimientos.mdb"
.Properties(15) = "PASSWORD"
.Open
End With
End Sub
La propiedad .Provider permite establecer el motor del DBMS, en este caso
Microsoft.Jet.Oledb.4.0 que es el motor de Microsoft Access XP, por lo cual recomendamos
utilizar tal versión de Access para verificar los ejercicios incluidos en este material.
.ConnectionString nos da la posibilidad de establecer la ubicación en disco de la base de
datos; Data Source = App.Path sugiere que el archivo de base de datos se localiza en el
mismo directorio que el proyecto desarrollado en Visual Basic (App = Application). Por último,
se incluye el nombre del archivo de base de datos, BD_Procedimientos.mdb.
Si ha definido algún password para ingresar al archivo de base de datos (recomendable),
deberá indicarlo en Visual Basic, utilizando la propiedad 15, describiendo el password
correspondiente, .properties(15) = “password”.
Finalmente, abra la conexión declarando la sentencia .open. Será necesario después de
establecer la conexión, determinar qué formulario se mostrará en pantalla al iniciar su
aplicación.
b. EN EL MISMO EQUIPO Y DISTINTA UBICACIÓN
Lo único que deberá hacer es redireccionar la propiedad .ConnectionString, eliminando la
cadena App.Path y describiendo en su lugar la ruta completa que define la ubicación de la
base de datos y su nombre:
.ConnectionString = "Data Source=C:\Visual Basic\Mis Proyectos\Empresa.mdb"
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 20
G es t i ó n
de
B a s e
d e
Da tos
c. CONEXIÓN A SERVIDOR
Para establecer una conexión permanente a servidor (DNS), bastará con modificar también
la propiedad .ConnectionString, de la siguiente forma:
.ConnectionString = "Data Source” & “\\Servidor\Carpeta1\Carpeta2\Archivo.mdb"
2. CONEXIONES PURAS (recomendadas)
Cuando ha establecido una conexión permanente, la carga de la aplicación en memoria se
torna pesada y como usted sabe, la velocidad de respuesta de su programa se reduce y si lo
que pretendemos es simplificar y agilizar la operación de aplicaciones, entonces tendríamos
que establecer un tipo de conexión que se abra y cierre sólo cuando exista la necesidad de
consultar o actualizar la base de datos.
Hacer esto implica posiblemente más líneas de código en Visual Basic, pero más eficiencia
en el tiempo de respuesta del programa desarrollado.
Dimensione en el módulo principal una variable global como cadena de texto, que servirá
posteriormente para identificar la ruta de la base de datos.
Global STRconexion As String
Ahora dimensione, instancie y abra la nueva conexión ADO dentro del procedimiento
principal en el módulo, señalando las propiedades principales.
Sub main()
Dim CNTconexion As New ADODB.Connection
With CNTconexion
.Provider = "Microsoft.jet.oledb.4.0"
.ConnectionString = "Data Source=” & App.Path & “\Empresa.mdb"
.Properties(15) = "PASSWORD"
.Open
Después de abrir la conexión asigne la variable que definió para identificar la ruta de la base
de datos y cierre la conexión.
STRconexion = .ConnectionString
.Close
End With
En último lugar desactive la conexión y finalice el procedimiento.
Set CNTconexion = Nothing
End Sub
Una vez concluido el procedimiento, la definición de la nueva conexión ADO se vería de la
siguiente forma:
Sub main()
Dim CNTconexion As New ADODB.Connection
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 21
G es t i ó n
de
B a s e
d e
Da tos
With CNTconexion
.Provider = "Microsoft.jet.oledb.4.0"
.ConnectionString = "Data Source=” & App.Path & “\Empresa.mdb"
.Properties(15) = "PASSWORD"
.Open
STRconexion = .ConnectionString
.Close
End With
Set CNTconexion = Nothing
End Sub
La sentencia Dim CNTconexion As New ADODB.Connection, permite simultáneamente
dimensionar e instanciar la nueva conexión ADO. Ahorramos una de las siguientes líneas de
código…
Global CNTconexion As ADODB.Connection
Set CNTconexion = New ADODB.Connection
El control FlexGrid en la gestión de datos
El FlexGrid (rejilla flexible en español) es uno de los controles ActiveX que posee Visual
Basic, que se utilizan con el propósito de añadir nuevas funciones a los programas que
desarrollamos para el ambiente Windows. Con este control podremos administrar datos en
una especie de tabla o rejilla de celdas, de manera similar a como se visualizan en una hoja
de trabajo en Excel… Observe los grids siguientes:
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 22
G es t i ó n
de
B a s e
d e
Da tos
Cada vez que abre un nuevo proyecto, Visual Basic muestra un conjunto básico de controles
de la interfaz en el cuadro de herramientas; el control FlexGrid constituye una herramienta
avanzada y por tal razón debe habilitarla mediante el siguiente procedimiento:
1. Menú Project
2. Opción Components
3. Activar de la lista de Controls la casilla de Microsoft FlexGrid Control 6.0 o la versión
existente y Aceptar.
En el cuadro de herramientas se mostrará un icono similar a este
. A partir de entonces
tendremos la posibilidad de insertar en los formularios del proyecto en uso, los FLexGrid que
sean convenientes y comenzar a gestionar la información contenida en nuestra base de
datos: mostrar los registros de alguna tabla, agregar registros, buscar registros, eliminar
registros, consultar o exportar información. Al trazarse sobre el formulario, todos los FlexGrid
mostrarán solamente y por defecto dos columnas y dos filas en la esquina superior izquierda
del mismo.
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 23
G es t i ó n
de
B a s e
d e
Da tos
Defina el formato de un FlexGrid tomando como ejemplo la descripción de código que a
continuación se muestra.
Sub P_FormatoGrid()
With FLX_nombre
.Cols = 3
.Rows = 1
.Row = 0
.Col = 0
.Text = "CLAVE"
.ColWidth(0) = 600
.Col = 1
.Text = "NOMBRE"
.ColWidth(1) = 3500
.Col = 2
.Text = "R.F.C."
.ColWidth(2) = 1600
End With
End Sub
Las propiedades descritas se refieren a los siguientes elementos:
.cols
.rows
.row
.col
.text
.colwidth
„determina el número de columnas en el grid
„fija el número de filas
„posiciona el cursor en el número de columna especificado
„posiciona el cursor en el número de fila indicado
„sugiere el texto que contendrá la columna como encabezado
„determina el ancho de la columna
Objeto Recordset
En Visual Basic un Recordset es un objeto que representa el bloque de información de una
base de datos con la que se está trabajando en el programa en un momento determinado. El
objeto Recordset posee propiedades y métodos con los cuáles es posible buscar, ordenar,
agregar y eliminar registros. Algunas de las propiedades que manejará de un Recordset en
el desarrollo de los proyectos contemplados en este material son:
.close (cierra el Recordset)
.movefirst (se mueve al primer registro)
.movelast (se mueve al último registro)
.movenext (se mueve al siguiente registro)
.moveprevious (se mueve al registro anterior)
.open (abre el Recordset)
.recordcount (cuenta el número de registros que contiene el Recordset)
Cuando se disponga a utilizar el Recordset, deberá dimensionarlo e instanciarlo, ejemplos:
Dim rst_nombre As ADODB.Connection
Set rst_nombre = New ADODB.Recordset
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 24
G es t i ó n
de
B a s e
d e
Da tos
O bien, ahorre una línea de código…
Dim rst_nombre As New ADODB.Recordset
Después de haber creado el Recordset podrá cargar en él la información que contenga la
base de datos, comenzando con una sentencia como la siguiente:
rst_nombre.open Strsql,Cnt_conexion,AdOpenStatic,AdLockReadOnly
…en donde rst_nombre describe el nombre del Recordset y la expresión .open indica la
apertura del mismo; en seguida se muestra la cadena Strsql (vea el apartado de
instrucciones SQL) que invoca las operaciones que se llevarán a cabo con la instrucción SQL
empleada en el Recordset y que además define el origen o fuente de datos; Cnt_conexion,
que señala el nombre de la conexión activa; AdOpenStatic, que define el Recordset como
estático y AdLockReadOnly, utilizado para activar la propiedad de sólo lectura.
Al finalizar la definición del Recordset y al asegurarse también de que la gestión de la
información de la base de datos ha concluido en el desarrollo del procedimiento, tendrá que
cerrarlo…
Rst_nombre.close
Y destruirlo:
Set Rst_nombre = Nothing
Verifique el manejo del Recordset en este procedimiento:
Sub P_ActualizaGrid()
Dim RSTClientes As ADODB.Recordset
Dim strsql As String
Dim IntFila As Integer
Set RSTClientes = New ADODB.Recordset
strsql = "SELECT * FROM CLIENTES"
RSTClientes.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
If RSTClientes.RecordCount = 0 Then Exit Sub
RSTClientes.MoveFirst
IntFila = 1
Do Until RSTClientes.EOF = True
With FLXClientes
.Rows = IntFila + 1
.Row = IntFila
.Col = 0
.Text = RSTClientes("CLIE_CLAVE")
.Col = 1
.Text = RSTClientes("CLIE_NOMBRE")
.Col = 2
.Text = RSTClientes("CLIE_RFC")
End With
IntFila = IntFila + 1
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 25
G es t i ó n
de
B a s e
d e
Da tos
RSTClientes.MoveNext
Loop
RSTClientes.Close
Set RSTClientes = Nothing
End Sub
Instrucciones SQL en Visual Basic
SQL, Structured Query Language, es un lenguaje interactivo que permite realizar consultas a
bases de datos. Actualmente es el protocolo para gestión de bases de datos en la mayoría
de las plataformas y proporciona diversas ventajas, tanto para la administración de las bases
de datos y la interacción con éstas mismas, como en el desarrollo de sistemas de
información con bases de datos.
El SQL nació como un lenguaje para usuario final, aunque con las facilidades gráficas
actuales, existen herramientas aún más intuitivas que “ocultan” al usuario final los comandos
SQL involucrados. Puede ser considerado como un lenguaje de programación y puede ser
infiltrado en algún otro lenguaje como Visual Basic, Java, C++, etc.
SQL es un lenguaje no sólo para consultas sino para definición y administración de bases de
datos. También provee de las facilidades para el control a los datos par parte de varios
usuarios en un ambiente de transacciones concurrentes.
Las cuatro sentencias principales de manejo de datos son: Select, Insert, Update, Delete.
S e l e c t . Es un comando que consulta los registros de una o varias tablas y que puede
enviar los resultados de la misma directamente a una matriz. Sintaxis:
SELECT campo1, campo2... FROM tabla1, tabla2…
WHERE condición 1, condición2… ORDER BY campo1, campo2…
En donde campo1, campo2… hacen referencia al nombre de las columnas que contienen la
información a consultar; si se desean todos los campos de una tabla se escribe asterisco (*)
delante de SELECT.
Tabla1, tabla2… señala el nombre de las tablas de la base de datos desde donde serán
extraídos los registros.
Condición1, condición2… definen los criterios de selección de los registros en la tabla. Los
registros seleccionados serán aquellos registros que cumplan la condición especificada con
WHERE; si se omite WHERE, se retornan todos los registros.
CAMPO
X
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
OPERADORES DE
COMPARACIÓN
VALOR DEL CAMPO
=
<=
>=
<>
>
<
LIKE
X
PÁGINA 26
G es t i ó n
de
B a s e
d e
Da tos
OPERADORES DE
COMPARACIÓN
CAMPO
VALOR DEL CAMPO
BETWEEN
OPERADORES LÓGICOS
NOT
OR
AND
La cláusula ORDER BY permite al usuario especificar si requiere los registros ordenados por
algún campo en particular, de manera ascendente o descendente utilizando los operadores
de modo ASC y DESC.
Ejemplo:
strsql = "SELECT * FROM CLIENTES"
I n s e r t . Anexa un registro al final de una tabla que contiene los valores de campo
especificados. Sintaxis:
INSERT INTO nombre_dbf [(fnombre1 [, fnombre2, ...])]
VALUES (eExpresión1 [, eExpresión2,...])
Ejemplo:
strsql = "INSERT INTO CLIENTES"
strsql = strsql & "(CLIE_CLAVE, CLIE_NOMBRE, CLIE_RFC)"
strsql = strsql & "VALUES ('"
strsql = strsql & F_ClaveConsecutiva("CLIENTES", "CLIE_CLAVE") & "', '"
strsql = strsql & TXTNombre.Text & "', '"
strsql = strsql & TXTRfc.Text & "')"
U p d a t e . Actualiza registros de una tabla con nuevos valores. Sintaxis:
UPDATE [NombreBaseDatos1!]NombreTabla1
SET Nombre_Columna1 = eExpresión1
[, Nombre_Columna2 = eExpresión2 ...]
WHERE CondiciónFiltro1 [AND | OR CondiciónFiltro2 ...]]
Ejemplo:
strsql = "UPDATE CLIENTES "
strsql = strsql & "SET CLIE_NOMBRE = '" & TXTNombre.Text & "', "
strsql = strsql & "CLIE_RFC = '" & TXTRfc.Text & "' "
strsql = strsql & "WHERE CLIE_CLAVE =" & TXTClave.Text
D e l e t e . Marca registros para eliminarlos. Sintaxis:
DELETE FROM [NombreBaseDatos!]NombreTabla
[WHERE CondiciónFiltro1 [AND | OR CondiciónFiltro2 ...]]
Ejemplo:
strsql = "DELETE FROM CLIENTES WHERE CLIE_CLAVE = " & TXTClave.Text
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 27
G es t i ó n
de
B a s e
d e
Da tos
Exportación de Datos
Se pueden generar informes por medio de los distintos reporteadores hechos
específicamente para ese propósito, sin embargo, también podemos reportear hacia
herramientas poderosas tales como Word o Excel.
Por medio de objetos en Visual Basic podemos ejecutar Word o Excel (entre otros), crear o
abrir archivos, modificarlos y guardarlos, todo a través de código.
EXPORTAR DATOS A WORD:
En primer lugar tenemos que hacer la referencia:
1. Menú Project
2. Opción Referentes
3. Seleccionar de la lista Microsoft Word 11.0 Object Library (o la versión disponible)
4. Presionar OK
Creamos e instanciamos el objeto que nos permitirá manipular a Word como una aplicación.
Dim docInforme as New Word.Application
Set docInforme = CreateObject("Word.Application")
Se recomienda crear un documento en Word que sirva como plantilla, puede protegerlo
contra escritura. Teniendo esto en cuenta, abrimos el archivo con la siguiente instrucción:
.Application.Documents.Open "\\Servidor\Carpeta1" & "\Archivo.doc"
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 28
G es t i ó n
de
B a s e
d e
Da tos
La siguiente instrucción permite colocar datos en un marcador predefinido llamado MARCA:
docInforme.Documents(1).Bookmarks("MARCA").Range.Text = “Dato”
Esto escribe la palabra Dato, recordando que cualquier texto entre comillas lo toma
directamente como cadena. Se puede colocar en vez del texto entrecomillado, también una
variable, o un elemento de un Recordset, o una función, etc.
La siguiente instrucción permite colocar texto en una celda de una tabla creada previamente
en el archivo:
docInforme.Documents(1).Tables(1).Cell(2, 1).Range.Text = “Dato”
Coloca en la fila 2, columna 1 la palabra Dato, teniendo en cuenta las mismas opciones de la
instrucción anterior.
La siguiente instrucción agrega una fila en la tabla:
docInforme.Documents(1).Tables(1).Rows.Add
La siguiente instrucción hace visible la aplicación:
docInforme .Application.Visible = True
El usuario podrá guardar el archivo utilizando las herramientas propias de Word.
EXPORTAR DATOS A EXCEL:
Hacemos la referencia:
1. Menú Project
2. Opción Referentes
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 29
G es t i ó n
de
B a s e
d e
Da tos
3. Seleccionar de la lista Microsoft Excel 11.0 Object Library (o la versión disponible)
4. Presionar OK
En este caso necesitamos dos objetos principales, el objeto que manejará a la aplicación, y
el objeto que utilizaremos para manipular la hoja:
Dim xlsApp As Object
Dim xlsSheet As Object
Luego instanciamos el objeto para la aplicación:
Set xlsApp = CreateObject("Excel.Application")
La siguiente instrucción abre un archivo de Excel creado previamente, puede protegerse
contra escritura:
xlsApp.Workbooks.Open FileName:="" & "\\Servidor\Carpeta1" & "\Archivo.xls", ReadOnly:=True
Luego instanciamos el objeto para la hoja:
Set xlsSheet = xlsApp.Worksheets(1)
La siguiente instrucción, coloca texto en una celda:
xlsSheet.Cells(2, 1).Value = “Dato”
Esto escribe la palabra Dato en la celda “A2”, recordando que cualquier texto entre comillas
lo toma directamente como cadena. Se puede colocar en vez del texto entrecomillado,
también una variable, o un elemento de un Recordset, o una función, etc.
La siguiente instrucción hace visible la aplicación:
xlsApp.Visible = True
El usuario podrá guardar el archivo utilizando las herramientas propias de Excel.
Ejemplo de exportación de datos a Excel:
Private Sub CMDExportar_Click()
Dim XlsAplicacion As Object
Dim XlsHoja As Object
Dim IntFila As Integer
Dim IntFactura As Integer
Screen.MousePointer = vbHourglass
FLXFacturas.Row = 1
Set XlsAplicacion = CreateObject("Excel.Application")
XlsAplicacion.Workbooks.Open FileName:="" & App.Path & "\Reporte1.XLS", ReadOnly:=True
Set XlsHoja = XlsAplicacion.Worksheets(1)
XlsAplicacion.Range("A2", "G1000") = ""
IntFila = 2
For IntFactura = 1 To FLXFacturas.Rows - 1
With XlsHoja
FLXFacturas.Col = 0
.Cells(IntFila, 1).Value = FLXFacturas.Text
FLXFacturas.Col = 1
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 30
G es t i ó n
de
B a s e
d e
Da tos
.Cells(IntFila, 2).Value = FLXFacturas.Text
FLXFacturas.Col = 2
.Cells(IntFila, 3).Value = FLXFacturas.Text
FLXFacturas.Col = 3
.Cells(IntFila, 4).Value = FLXFacturas.Text
End With
IntFila = IntFila + 1
If IntFactura <> FLXFacturas.Rows - 1 Then FLXFacturas.Row = IntFactura + 1
Next
Screen.MousePointer = vbDefault
XlsAplicacion.Visible = True
Set XlsAplicacion = Nothing
End Sub
Formato del archivo de reporte generado en Excel:
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 31
Pr o yec t o
Pr i nc i pa l
PROYECTO PRINCIPAL
FORMULARIOS Y PROGRAMACIÓN EN VISUAL BASIC
FORMULARIO PRINCIPAL (FORMULARIO MDI)
CÓDIGO PARA LOS MENÚS EN EL FORMULARIO INICIAL
Private Sub MNUClientes_Click()
FRMclientes.Show
P_Bienvenida
End Sub
Private Sub MNUProductos_Click()
FRMProductos.Show
P_Bienvenida
End Sub
Private Sub MNUVentas_Click()
FRMVentas.Show
P_Bienvenida
End Sub
MÓDULO PRINCIPAL
DECLARACIONES
Global INTINSTRUCCION As Integer
Global STRCONEXION As String
Global Const AGREGAR = 1
Global Const MODIFICAR = 2
Global Const BUSCAR = 3
Global Const INACTIVO = 0
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 32
Pr o yec t o
Pr i nc i pa l
PROCEDIMIENTO DE ARRANQUE DE LA APLICACIÓN (CONEXIÓN CON LA BASE DE
DATOS Y EJECUCIÓN DE LA PANTALLA PRINCIPAL)
Sub main()
Dim CNTCONEXION As New ADODB.Connection
With CNTCONEXION
.Provider = "Microsoft.jet.oledb.4.0"
.ConnectionString = "Data Source=" & App.Path & "\Base de Datos.mdb"
.Properties(15) = "PASSWORD"
.Open
STRCONEXION = .ConnectionString
.Close
End With
Set CNTCONEXION = Nothing
MDIPrincipal.Show
End Sub
FUNCIÓN QUE INSERTARÁ CLAVES CONSECUTIVAS EN LAS TABLAS DE LA BASE
DE DATOS AL AGREGAR NUEVOS REGISTROS
Public Function F_ClaveConsecutiva(Astr_Tabla As String, Astr_Campo As String) As Long
Dim RSTConsecutiva As New ADODB.Recordset
Dim strsql As String
strsql = "SELECT " & Astr_Campo & " FROM " & Astr_Tabla & " ORDER BY " & Astr_Campo
RSTConsecutiva.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
If RSTConsecutiva.RecordCount = 0 Then
F_ClaveConsecutiva = 1
Else
RSTConsecutiva.MoveLast
F_ClaveConsecutiva = RSTConsecutiva(0) + 1
End If
Set RSTConsecutiva = Nothing
End Function
FUNCIÓN QUE LOCALIZARÁ EL REGISTRO QUE CUMPLA CON EL CRITERIO
INDICADO EN UN CUADRO COMBINADO
Function F_OpcionCombo(ByRef CboCombo As ComboBox, LngIndice As Long)
Dim IntContador As Integer
For IntContador = 0 To CboCombo.ListCount - 1
With CboCombo
If .ItemData(IntContador) = LngIndice Then
F_OpcionCombo = IntContador
Exit For
End If
End With
Next
End Function
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 33
Pr o yec t o
Pr i nc i pa l
PROCEDIMIENTO DEFINE EL MENSAJE DE BIENVENIDA A CADA VENTANA
Sub P_Bienvenida()
MsgBox "Ha iniciado el sistema de administración empresarial"
End Sub
FORMULARIO DE CLIENTES (FORMULARIO SDI)
PROCEDIMIENTO QUE SE EJECUTA AL CARGARSE EL FORMULARIO CLIENTES
Private Sub Form_Load()
P_FormatoGrid
P_ActualizaGrid
P_INICIAL
End Sub
PROCEDIMIENTO QUE DEFINE EL FORMATO DEL FLEXGRID DE CLIENTES
Sub P_FormatoGrid()
With FLXClientes
.Cols = 3
.Rows = 1
.Row = 0
.Col = 0
.Text = "CLAVE"
.ColWidth(0) = 600
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 34
Pr o yec t o
Pr i nc i pa l
.Col = 1
.Text = "NOMBRE"
.ColWidth(1) = 3500
.Col = 2
.Text = "R.F.C."
.ColWidth(2) = 1600
End With
End Sub
PROCEDIMIENTO QUE ACTUALIZA EL CONTENIDO DEL FLEXGRID DE CLIENTES DE
ACUERDO A LA BASE DE DATOS
Sub P_ActualizaGrid()
Dim RSTClientes As ADODB.Recordset
Dim strsql As String
Dim IntFila As Integer
Set RSTClientes = New ADODB.Recordset
strsql = "SELECT * FROM CLIENTES"
RSTClientes.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
If RSTClientes.RecordCount = 0 Then Exit Sub
RSTClientes.MoveFirst
IntFila = 1
Do Until RSTClientes.EOF = True
With FLXClientes
.Rows = IntFila + 1
.Row = IntFila
.Col = 0
.Text = RSTClientes("CLIE_CLAVE")
.Col = 1
.Text = RSTClientes("CLIE_NOMBRE")
.Col = 2
.Text = RSTClientes("CLIE_RFC")
End With
IntFila = IntFila + 1
RSTClientes.MoveNext
Loop
RSTClientes.Close
Set RSTClientes = Nothing
End Sub
PROCEDIMIENTO QUE DEFINE EL ESTADO INICIAL DE LOS CONTROLES EN EL
FORMULARIO CLIENTES
Sub P_INICIAL()
TXTClave.Text = ""
TXTNombre.Text = ""
TXTRfc.Text = ""
TXTNombre.Enabled = False
TXTRfc.Enabled = False
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 35
Pr o yec t o
Pr i nc i pa l
CMDAceptar.Enabled = False
CMDAceptar.Visible = False
CMDCancelar.Enabled = False
CMDCancelar.Visible = False
CMDAgregar.Enabled = True
CMDAgregar.Visible = True
CMDModificar.Enabled = False
CMDModificar.Visible = True
CMDEliminar.Enabled = True
CMDEliminar.Visible = True
FLXClientes.Enabled = True
End Sub
PROCEDIMIENTO DEFINIDO AL EJECUTARSE EL EVENTO DOBLE CLICK SOBRE
ALGUNO DE LOS REGISTROS EN EL FLEXGRID
Private Sub FLXClientes_DblClick()
Dim strsql As String
Dim RSTClieSel As New ADODB.Recordset
FLXClientes.Col = 0
strsql = "SELECT * FROM CLIENTES WHERE CLIE_CLAVE= " & FLXClientes.Text
RSTClieSel.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
TXTClave.Text = RSTClieSel("CLIE_CLAVE")
TXTNombre.Text = RSTClieSel("CLIE_NOMBRE")
TXTRfc.Text = RSTClieSel("CLIE_RFC")
Set RSTClieSel = Nothing
P_CONSULTA
End Sub
PROCEDIMIENTO DE CONSULTA QUE DEFINE EL ESTADO DE LOS CONTROLES EN
EL FORMULARIO
Sub P_CONSULTA()
TXTNombre.Enabled = False
TXTRfc.Enabled = False
CMDAceptar.Enabled = False
CMDAceptar.Visible = False
CMDCancelar.Enabled = False
CMDCancelar.Visible = False
CMDAgregar.Enabled = True
CMDAgregar.Visible = True
CMDModificar.Enabled = True
CMDModificar.Visible = True
CMDEliminar.Enabled = True
CMDEliminar.Visible = True
P_ActualizaGrid
FLXClientes.Enabled = True
End Sub
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 36
Pr o yec t o
Pr i nc i pa l
INSTRUCCIONES CODIFICADAS AL PRESIONAR EL BOTÓN AGREGAR
Private Sub CMDAgregar_Click()
INTINSTRUCCION = AGREGAR
P_CAMBIOS
TXTNombre.SetFocus
End Sub
PROCEDIMIENTO CAMBIOS QUE MODIFICA EL ESTADO DE LOS CONTROLES AL
AGREGAR O MODIFICAR UN REGISTRO
Sub P_CAMBIOS()
If INTINSTRUCCION = AGREGAR Then
TXTClave.Text = ""
TXTNombre.Text = ""
TXTRfc.Text = ""
End If
TXTNombre.Enabled = True
TXTRfc.Enabled = True
CMDAceptar.Enabled = True
CMDAceptar.Visible = True
CMDCancelar.Enabled = True
CMDCancelar.Visible = True
CMDAgregar.Enabled = False
CMDAgregar.Visible = False
CMDModificar.Enabled = False
CMDModificar.Visible = False
CMDEliminar.Enabled = False
CMDEliminar.Visible = False
FLXClientes.Enabled = False
End Sub
FUNCIÓN QUE ESTABLECE COMO REQUERIDOS LOS DATOS NOMBRE DE CLIENTE
Y RFC PARA ACTUALIZAR CORRECTAMENTE LA BASE DE DATOS
Private Function F_ValidaDatos() As Boolean
F_ValidaDatos = False
If TXTNombre.Text = "" Then
MsgBox "escriba un nombre en el campo cliente"
TXTNombre.SetFocus
Exit Function
End If
If TXTRfc.Text = "" Then
MsgBox "escriba el RFC del cliente"
TXTRfc.SetFocus
Exit Function
End If
F_ValidaDatos = True
End Function
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 37
Pr o yec t o
Pr i nc i pa l
INSTRUCCIONES CODIFICADAS AL PRESIONAR EL BOTÓN MODIFICAR
Private Sub CMDModificar_Click()
INTINSTRUCCION = MODIFICAR
P_CAMBIOS
End Sub
INSTRUCCIONES DEL PROCEDIMIENTO CAMBIOS, QUE DEFINE EL ESTADO DE LOS
CONTROLES AL AGREGAR O MODIFICAR REGISTROS
Sub P_CAMBIOS()
If INTINSTRUCCION = AGREGAR Then
TXTClave.Text = ""
TXTNombre.Text = ""
TXTRfc.Text = ""
End If
TXTNombre.Enabled = True
TXTRfc.Enabled = True
CMDAceptar.Enabled = True
CMDAceptar.Visible = True
CMDCancelar.Enabled = True
CMDCancelar.Visible = True
CMDAgregar.Enabled = False
CMDAgregar.Visible = False
CMDModificar.Enabled = False
CMDModificar.Visible = False
CMDEliminar.Enabled = False
CMDEliminar.Visible = False
FLXClientes.Enabled = False
End Sub
PROCEDIMIENTO DEL EVENTO CLICK EN EL BOTÓN ACEPTAR QUE ACTUALIZARÁ
LA BASE DE DATOS, AL AGREGAR O MODIFICAR ALGÚN REGISTRO
Private Sub CMDAceptar_Click()
Dim CNTCLIENTES As New ADODB.Connection
Dim strsql As String
If INTINSTRUCCION = AGREGAR Then
If Not F_ValidaDatos Then Exit Sub
strsql = "INSERT INTO CLIENTES"
strsql = strsql & "(CLIE_CLAVE, CLIE_NOMBRE, CLIE_RFC)"
strsql = strsql & "VALUES ('"
strsql = strsql & F_ClaveConsecutiva("CLIENTES", "CLIE_CLAVE") & "', '"
strsql = strsql & TXTNombre.Text & "', '"
strsql = strsql & TXTRfc.Text & "')"
With CNTCLIENTES
.ConnectionString = STRCONEXION
.Open
.Execute (strsql)
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 38
Pr o yec t o
Pr i nc i pa l
.Close
End With
MsgBox "el registro se agregó correctamente"
INTINSTRUCCION = INACTIVO
P_ActualizaGrid
P_INICIAL
End If
If INTINSTRUCCION = MODIFICAR Then
strsql = "UPDATE CLIENTES "
strsql = strsql & "SET CLIE_NOMBRE = '" & TXTNombre.Text & "', "
strsql = strsql & "CLIE_RFC = '" & TXTRfc.Text & "' "
strsql = strsql & "WHERE CLIE_CLAVE =" & TXTClave.Text
With CNTCLIENTES
.ConnectionString = STRCONEXION
.Open
.Execute (strsql)
.Close
End With
Set CNTCLIENTES = Nothing
INTINSTRUCCION = INACTIVO
P_ActualizaGrid
P_INICIAL
End If
End Sub
CÓDIGO QUE SE EJECUTA AL CANCELAR LA INSERCIÓN DE UN NUEVO REGISTRO
O LA EDICIÓN DE UNO EXISTENTE EN EL FLEXGRID
Private Sub CMDCancelar_Click()
P_INICIAL
End Sub
CÓDIGO QUE SE EJECUTA AL ELIMINAR UN REGISTRO
Private Sub CMDEliminar_Click()
Dim CNTCLIENTES As New ADODB.Connection
Dim strsql As String
Dim IntRespuesta As Integer
If TXTClave.Text = "" Then
MsgBox "selecciona un registro para eliminar"
Exit Sub
End If
IntRespuesta = MsgBox("¿deseas dar de baja al cliente?", vbYesNo)
If IntRespuesta = vbYes Then
strsql = "DELETE FROM CLIENTES WHERE CLIE_CLAVE = " & TXTClave.Text
With CNTCLIENTES
.ConnectionString = STRCONEXION
.Open
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 39
Pr o yec t o
Pr i nc i pa l
.Execute (strsql)
.Close
End With
Set CNTCLIENTES = Nothing
P_ActualizaGrid
P_INICIAL
End If
End Sub
FORMULARIO DE PRODUCTOS (FORMULARIO SDI)
DECLARACIÓN DE VARIABLE GESTIONABLE EN EL FORMULARIO DE PRODUCTOS Y
SUS CONTROLES
Dim CLAPROD As Integer
PROCEDIMIENTO AL CARGARSE EL FORMULARIO
Private Sub Form_Load()
P_FormatoGrid
P_ActualizaGrid
P_INICIAL
End Sub
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 40
Pr o yec t o
Pr i nc i pa l
PROCEDIMIENTO QUE DEFINE EL FORMATO DEL FLEXGRID DE PRODUCTOS
Sub P_FormatoGrid()
With FLXProductos
.Cols = 3
.Rows = 1
.Row = 0
.Col = 0
.Text = "CLAVE"
.ColWidth(0) = 600
.Col = 1
.Text = "DESCRIPCIÓN"
.ColWidth(1) = 3500
.Col = 2
.Text = "PRECIO $"
.ColWidth(2) = 1000
End With
End Sub
PROCEDIMIENTO QUE ACTUALIZA LA INFORMACIÓN DEL FLEXGRID PRODUCTOS
Sub P_ActualizaGrid()
Dim RSTArticulos As ADODB.Recordset
Dim strsql As String
Dim IntFila As Integer
Set RSTArticulos = New ADODB.Recordset
strsql = "SELECT * FROM PRODUCTOS"
RSTArticulos.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
If RSTArticulos.RecordCount = 0 Then Exit Sub
RSTArticulos.MoveFirst
IntFila = 1
Do Until RSTArticulos.EOF = True
With FLXProductos
.Rows = IntFila + 1
.Row = IntFila
.Col = 0
.Text = RSTArticulos("PROD_CLAVE")
.Col = 1
.Text = RSTArticulos("PROD_NOMBRE")
.Col = 2
.Text = RSTArticulos("PROD_PRECIO")
End With
IntFila = IntFila + 1
RSTArticulos.MoveNext
Loop
RSTArticulos.Close
Set RSTArticulos = Nothing
End Sub
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 41
Pr o yec t o
Pr i nc i pa l
PROCEDIMIENTO QUE DETERMINA EL ESTADO INICIAL DE LOS CONTROLES
Sub P_INICIAL()
TXTArticulo.Text = ""
TXTPrecio.Text = ""
TXTArticulo.Enabled = False
TXTPrecio.Enabled = False
CMDAceptar.Enabled = False
CMDAceptar.Visible = False
CMDCancelar.Enabled = False
CMDCancelar.Visible = False
CMDAgregar.Enabled = True
CMDAgregar.Visible = True
CMDModificar.Enabled = False
CMDModificar.Visible = True
CMDEliminar.Enabled = True
CMDEliminar.Visible = True
FLXProductos.Enabled = True
End Sub
PROCEDIMIENTO DEFINIDO AL EJECUTARSE EL EVENTO DOBLE CLICK SOBRE
ALGUNO DE LOS REGISTROS EN EL FLEXGRID
Private Sub FLXProductos_DblClick()
Dim strsql As String
Dim RSTProdSel As New ADODB.Recordset
FLXProductos.Col = 0
CLAPROD = FLXProductos.Text
Strsql = "SELECT * FROM PRODUCTOS WHERE PROD_CLAVE= " & FLXProductos.Text
RSTProdSel.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
TXTArticulo.Text = RSTProdSel("PROD_NOMBRE")
TXTPrecio.Text = RSTProdSel("PROD_PRECIO")
Set RSTProdSel = Nothing
P_CONSULTA
End Sub
ESTADO DE LOS CONTROLES AL EFECTUAR LA CONSULTA DE ALGÚN REGISTRO
Sub P_CONSULTA()
TXTArticulo.Enabled = False
TXTPrecio.Enabled = False
CMDAceptar.Enabled = False
CMDAceptar.Visible = False
CMDCancelar.Enabled = False
CMDCancelar.Visible = False
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 42
Pr o yec t o
Pr i nc i pa l
CMDAgregar.Enabled = True
CMDAgregar.Visible = True
CMDModificar.Enabled = True
CMDModificar.Visible = True
CMDEliminar.Enabled = True
CMDEliminar.Visible = True
P_ActualizaGrid
FLXProductos.Enabled = True
End Sub
PROCEDIMIENTO CORRESPONDIENTE AL BOTÓN AGREGAR
Private Sub CMDAgregar_Click()
INTINSTRUCCION = AGREGAR
P_CAMBIOS
TXTArticulo.SetFocus
End Sub
PROCEDIMIENTO QUE DETERMINA EL ESTADO DE LOS CONTROLES AL AGREGAR
O MODIFICAR UN REGISTRO
Sub P_CAMBIOS()
If INTINSTRUCCION = AGREGAR Then
TXTArticulo.Text = ""
TXTPrecio.Text = ""
End If
TXTArticulo.Enabled = True
TXTPrecio.Enabled = True
CMDAceptar.Enabled = True
CMDAceptar.Visible = True
CMDCancelar.Enabled = True
CMDCancelar.Visible = True
CMDAgregar.Enabled = False
CMDAgregar.Visible = False
CMDModificar.Enabled = False
CMDModificar.Visible = False
CMDEliminar.Enabled = False
CMDEliminar.Visible = False
FLXProductos.Enabled = False
End Sub
PROCEDIMIENTO EN EL BOTÓN ACEPTAR QUE ACTUALIZARÁ LA BASE DE DATOS,
AL AGREGAR O MODIFICAR ALGÚN REGISTRO
Private Sub CMDAceptar_Click()
Dim CNTPRODUCTOS As New ADODB.Connection
Dim strsql As String
If INTINSTRUCCION = AGREGAR Then
If Not F_ValidaDatos Then Exit Sub
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 43
Pr o yec t o
Pr i nc i pa l
strsql = "INSERT INTO PRODUCTOS"
strsql = strsql & "(PROD_CLAVE, PROD_NOMBRE, PROD_PRECIO)"
strsql = strsql & "VALUES ('"
strsql = strsql & F_ClaveConsecutiva("PRODUCTOS", "PROD_CLAVE") & "', '"
strsql = strsql & TXTArticulo.Text & "', '"
strsql = strsql & TXTPrecio.Text & "')"
With CNTPRODUCTOS
.ConnectionString = STRCONEXION
.Open
.Execute (strsql)
.Close
End With
MsgBox "el registro se agregó correctamente"
INTINSTRUCCION = INACTIVO
P_ActualizaGrid
P_INICIAL
End If
If INTINSTRUCCION = MODIFICAR Then
strsql = "UPDATE PRODUCTOS "
strsql = strsql & "SET PROD_NOMBRE = '" & TXTArticulo.Text & "', "
strsql = strsql & "PROD_PRECIO = '" & TXTPrecio.Text & "' "
strsql = strsql & "WHERE PROD_CLAVE =" & CLAPROD
With CNTPRODUCTOS
.ConnectionString = STRCONEXION
.Open
.Execute (strsql)
.Close
End With
Set CNTPRODUCTOS = Nothing
MsgBox "los datos del artículo se han modificado"
INTINSTRUCCION = INACTIVO
P_ActualizaGrid
P_INICIAL
End If
End Sub
CÓDIGO QUE SE EJECUTA AL CANCELAR LA INSERCIÓN DE UN NUEVO PRODUCTO
O LA MODIFICACIÓN DE UN REGISTRO EXISTENTE
Private Sub CMDCancelar_Click()
P_INICIAL
End Sub
CÓDIGO QUE SE EJECUTA AL ELIMINAR UN PRODUCTO
Private Sub CMDEliminar_Click()
Dim CNTPRODUCTOS As New ADODB.Connection
Dim strsql As String
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 44
Pr o yec t o
Pr i nc i pa l
Dim IntRespuesta As Integer
If TXTArticulo.Text = "" Then
MsgBox "SELECIONA UN ARTÍCULO PARA ELIMINAR"
Exit Sub
End If
IntRespuesta = MsgBox("¿REALMENTE DESEA ELIMINAR EL ARTÍCULO?",
vbYesNo)
If IntRespuesta = vbYes Then
strsql = "DELETE FROM PRODUCTOS WHERE PROD_CLAVE = " & CLAPROD
With CNTPRODUCTOS
.ConnectionString = STRCONEXION
.Open
.Execute (strsql)
.Close
End With
Set CNTPRODUCTOS = Nothing
P_ActualizaGrid
P_INICIAL
End If
End Sub
FORMULARIO DE VENTAS (FORMULARIO SDI)
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 45
Pr o yec t o
Pr i nc i pa l
VARIABLE DESCRITA EN EL BLOQUE GENERAL DE LA VENTANA DE CÓDIGO
Dim IntFila As Integer
ACCIONES AL CARGARSE EL FORMULARIO
Private Sub Form_Load()
Dim strsql As String
Dim RSTCOMBO As New ADODB.Recordset
P_INICIAL
strsql = "SELECT CLIE_CLAVE, CLIE_NOMBRE FROM CLIENTES"
RSTCOMBO.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
If RSTCOMBO.RecordCount <> 0 Then
Do Until RSTCOMBO.EOF = True
With cbocliente
.AddItem RSTCOMBO("CLIE_NOMBRE")
.ItemData(.NewIndex) = RSTCOMBO("CLIE_CLAVE")
End With
RSTCOMBO.MoveNext
Loop
End If
RSTCOMBO.Close
strsql = "SELECT PROD_CLAVE, PROD_NOMBRE FROM PRODUCTOS"
RSTCOMBO.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
If RSTCOMBO.RecordCount <> 0 Then
Do Until RSTCOMBO.EOF = True
With cboproducto
.AddItem RSTCOMBO("PROD_NOMBRE")
.ItemData(.NewIndex) = RSTCOMBO("PROD_CLAVE")
End With
RSTCOMBO.MoveNext
Loop
End If
RSTCOMBO.Close
Set RSTCOMBO = Nothing
End Sub
PROCEDIMIENTO QUE DEFINE EL ESTADO INICIAL DE LOS CONTROLES
Sub P_INICIAL()
txtfactura.Enabled = False
txtfactura.Visible = True
txtfactura.Text = ""
cmdbuscar.Enabled = True
cmdbuscar.Visible = True
cbocliente.Enabled = False
cbocliente.Visible = True
cbocliente.ListIndex = -1
cboproducto.Enabled = False
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 46
Pr o yec t o
Pr i nc i pa l
cboproducto.Visible = True
cboproducto.ListIndex = -1
txtcantidad.Enabled = False
txtcantidad.Visible = True
txtcantidad.Text = ""
cmdmas.Enabled = False
cmdmas.Visible = True
flxproductos.Enabled = False
flxproductos.Visible = True
cmdnueva.Enabled = True
cmdnueva.Visible = True
cmdmodificar.Enabled = False
cmdmodificar.Visible = True
cmdeliminar.Enabled = True
cmdeliminar.Visible = True
cmdaceptar.Enabled = False
cmdaceptar.Visible = False
cmdcancelar.Enabled = False
cmdcancelar.Visible = False
cmdquitar.Enabled = False
cmdquitar.Visible = True
P_FormatoGrid
End Sub
PROCEDIMIENTO QUE DEFINE EL FORMATO DEL GRID EN VENTAS
Sub P_FormatoGrid()
With flxproductos
.Rows = 1
.Cols = 5
.Row = 0
.Col = 0
.Text = "CLAVE"
.Col = 1
.Text = "PRODUCTO"
.Col = 2
.Text = "PRECIO"
.Col = 3
.Text = "CANTIDAD"
.Col = 4
.Text = "SUBTOTAL"
.ColWidth(0) = 50
.ColWidth(1) = 3000
.ColWidth(2) = 1000
.ColWidth(3) = 1000
.ColWidth(4) = 1000
End With
End Sub
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 47
Pr o yec t o
Pr i nc i pa l
PROCEDIMIENTO QUE DEFINE AL BOTÓN DE COMANDO NUEVA VENTA
Private Sub cmdnueva_Click()
INTINSTRUCCION = AGREGAR
P_CAMBIOS
End Sub
PROCEDIMIENTO CAMBIOS (DEFINE EL ESTADO DE LOSCONTROLES AL PEDIR UNA
NUEVA VENTA)
Sub P_CAMBIOS()
If INTINSTRUCCION = AGREGAR Then
txtfactura.Text = ""
'listindex=-1 limpia el combobox
cbocliente.ListIndex = -1
lblrfc.Caption = ""
cboproducto.ListIndex = -1
lblprecio.Caption = ""
txtcantidad.Text = ""
P_FormatoGrid
End If
txtfactura.Enabled = False
txtfactura.Visible = True
cmdbuscar.Enabled = False
cmdbuscar.Visible = False
cbocliente.Enabled = True
cbocliente.Visible = True
cboproducto.Enabled = True
cboproducto.Visible = True
txtcantidad.Enabled = True
txtcantidad.Visible = True
cmdmas.Enabled = True
cmdmas.Visible = True
flxproductos.Enabled = True
flxproductos.Visible = True
cmdnueva.Enabled = False
cmdnueva.Visible = False
cmdmodificar.Enabled = False
cmdmodificar.Visible = False
cmdeliminar.Enabled = False
cmdeliminar.Visible = False
cmdaceptar.Enabled = True
cmdaceptar.Visible = True
cmdcancelar.Enabled = True
cmdcancelar.Visible = True
cmdquitar.Enabled = True
cmdquitar.Visible = True
End Sub
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 48
Pr o yec t o
Pr i nc i pa l
PROCEDIMIENTO QUE CARGA AL COMBO CLIENTE
Private Sub cbocliente_Click()
Dim strsql As String
Dim RSTClientes As New ADODB.Recordset
strsql = "SELECT CLIE_RFC FROM CLIENTES WHERE CLIE_CLAVE = " &
cbocliente.ItemData(cbocliente.ListIndex)
RSTClientes.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
lblrfc.Caption = RSTClientes("CLIE_RFC")
Set RSTClientes = Nothing
End Sub
PROCEDIMIENTO QUE CARGA AL COMBO PRODUCTO
Private Sub cboproducto_Click()
Dim strsql As String
Dim RSTPRODUCTOS As New ADODB.Recordset
strsql = "SELECT PROD_PRECIO FROM PRODUCTOS WHERE PROD_CLAVE = " &
cboproducto.ItemData(cboproducto.ListIndex)
RSTPRODUCTOS.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
lblprecio.Caption = RSTPRODUCTOS("PROD_PRECIO")
Set RSTPRODUCTOS = Nothing
End Sub
PROCEDIMIENTO QUE DEFINE AL BOTÓN MÁS (AGREGAR EL PRODUCTO
SELECCIONADO AL FLEXGRID)
Private Sub cmdmas_Click()
Dim SNGSUBTOTAL As Single
Select Case INTINSTRUCCION
Case AGREGAR
If cboproducto.ListIndex = -1 Then
MsgBox "SELECCIONA UN PRODUCTO"
Exit Sub
End If
If txtcantidad.Text = "" Then txtcantidad.Text = 1
With flxproductos
.Rows = .Rows + 1
.Row = .Rows - 1
.Col = 0
.Text = cboproducto.ItemData(cboproducto.ListIndex)
.Col = 1
.Text = cboproducto.Text
.Col = 2
.Text = lblprecio.Caption
.Col = 3
.Text = txtcantidad.Text
.Col = 4
SNGSUBTOTAL = CSng(lblprecio.Caption) * CInt(txtcantidad.Text)
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 49
Pr o yec t o
Pr i nc i pa l
.Text = SNGSUBTOTAL
End With
cboproducto.Text = ""
lblprecio.Caption = "0.00"
txtcantidad.Text = ""
Case BUSCAR
If cboproducto.ListIndex = -1 And txtcantidad.Text = "" Then
MsgBox "SELECCIONE UN PRODUCTO O ESCRIBA UNA CANTIDAD"
cboproducto.SetFocus
Exit Sub
End If
With flxproductos
.Rows = .Rows + 1
.Row = .Rows - 1
.Col = 0
If cboproducto.ListIndex <> -1 Then
.Text = cboproducto.ItemData(cboproducto.ListIndex)
.Col = 1
.Text = cboproducto.Text
.Col = 2
.Text = lblprecio.Caption
End If
If txtcantidad.Text <> "" Then
.Col = 3
.Text = txtcantidad.Text
End If
End With
cboproducto.Text = ""
lblprecio.Caption = "0.00"
txtcantidad.Text = ""
End Select
End Sub
PROCEDIMIENTO QUE DEFINE AL BOTÓN QUITAR (ELIMINAR UN PRODUCTO DEL
FLEXGRID)
Private Sub cmdquitar_Click()
On Error GoTo ManejaError
flxproductos.RemoveItem (IntFila)
cmdquitar.Enabled = False
Exit Sub
ManejaError:
Select Case Err.Number
Case 30015
P_FormatoGrid
Case Else
MsgBox "ERROR :" & Err.Number & " " & Err.Description & Chr(13) & _
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 50
Pr o yec t o
Pr i nc i pa l
"CONSULTE AL PROVEEDOR DEL SISTEMA"
End Select
End Sub
ACCIONES QUE OCURREN AL SITUAR EL CURSOR EN EL FLEXGRID
Private Sub flxproductos_GotFocus()
cmdquitar.Enabled = True
IntFila = flxproductos.Row
End Sub
PROCEDIMIENTO QUE DEFINE AL BOTÓN CANCELAR
Private Sub CMDCancelar_Click()
Unload Me
End Sub
FUNCIÒN QUE EXIGE LA CAPTURA DE DATOS ANTES DE GRABAR LA VENTA
Private Function F_Validaventa() As Boolean
F_Validaventa = False
If cbocliente.ListIndex = -1 Then
MsgBox "selecciona un cliente"
cbocliente.SetFocus
Exit Function
End If
If flxproductos.Rows < 2 And txtcantidad.Text = "" Then
MsgBox "selecciona un producto, si omites la cantidad, se asignará el valor 1"
cboproducto.SetFoc0us
Exit Function
End If
F_Validaventa = True
End Function
PROCEDIMIENTO QUE DEFINE AL BOTÓN ACEPTAR
Private Sub CMDAceptar_Click()
Dim CNTCARGAR As New ADODB.Connection
Dim strsql As String
Dim CurTOTAL As Currency
Dim IntCuentaproducto As Integer
Dim LngClaveFactura As Long
Dim RSTConsulta As New ADODB.Recordset
Select Case INTINSTRUCCION
Case AGREGAR
If Not F_Validaventa Then Exit Sub
LngClaveFactura = F_ClaveConsecutiva("FACTURAS", "FAC_CLAVE")
strsql = "INSERT INTO FACTURAS"
strsql = strsql & "(FAC_CLAVE, CLIE_CLAVE, FAC_TOTAL, FAC_FECHA) "
strsql = strsql & "VALUES ('" & LngClaveFactura & "', '"
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 51
Pr o yec t o
Pr i nc i pa l
strsql = strsql & cbocliente.ItemData(cbocliente.ListIndex) & "', '"
flxproductos.Col = 4
For IntCuentaproducto = 1 To flxproductos.Rows - 1
flxproductos.Row = IntCuentaproducto
CurTOTAL = CurTOTAL + CCur(flxproductos.Text)
Next
strsql = strsql & CurTOTAL & "', #"
strsql = strsql & Format(Now, "DD/MM/YY HH:NN:SS") & "# )"
With CNTCARGAR
.Open STRCONEXION
.Execute (strsql)
.Close
End With
For IntCuentaproducto = 1 To flxproductos.Rows - 1
flxproductos.Row = IntCuentaproducto
strsql = "INSERT INTO VENTAS"
strsql
=
strsql
&
"(VENTA_CLAVE,
FAC_CLAVE,
PROD_CLAVE,
VENTA_CANTIDAD) "
strsql = strsql & "VALUES ('" & F_ClaveConsecutiva("VENTAS", "VENTA_CLAVE") &
"', '"
strsql = strsql & LngClaveFactura & "', '"
flxproductos.Col = 0
strsql = strsql & flxproductos.Text & "', '"
flxproductos.Col = 3
strsql = strsql & flxproductos.Text & "')"
With CNTCARGAR
.Open STRCONEXION
.Execute (strsql)
.Close
End With
Next
MsgBox "la factura y venta(s) correspondiente(s) se han registrado en la BD"
cbocliente.Text = ""
P_FormatoGrid
Case BUSCAR
Load FRMBusquedas
strsql = "SELECT DISTINCT FACTURAS.FAC_CLAVE, CLIE_NOMBRE,
FAC_TOTAL, FAC_FECHA "
strsql = strsql & "FROM FACTURAS, VENTAS, CLIENTES "
strsql = strsql & "WHERE FACTURAS.FAC_CLAVE=VENTAS.FAC_CLAVE "
strsql = strsql & "AND FACTURAS.CLIE_CLAVE = CLIENTES.CLIE_CLAVE "
If txtfactura <> "" Then
strsql = strsql & "AND FACTURAS.FAC_CLAVE= " & txtfactura.Text & " "
End If
If cbocliente.ListIndex <> -1 Then
strsql
=
strsql
&
"AND
FACTURAS.CLIE_CLAVE
=
"
&
cbocliente.ItemData(cbocliente.ListIndex) & " "
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 52
Pr o yec t o
Pr i nc i pa l
End If
If flxproductos.Rows <> 1 Then
strsql = strsql & "AND (("
For IntCuentaproducto = 1 To flxproductos.Rows - 1
With flxproductos
.Row = IntCuentaproducto
.Col = 0
If .Text <> "" Then
strsql = strsql & "PROD_CLAVE = " & .Text & " "
End If
.Col = 3
If .Text <> "" Then
strsql = strsql & "AND VENTA_CANTIDAD = " & .Text & " "
End If
If IntCuentaproducto <> flxproductos.Rows - 1 Then
strsql = strsql & ") OR ("
Else
strsql = strsql & "))"
End If
End With
Next
End If
RSTConsulta.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
If RSTConsulta.RecordCount = 0 Then
MsgBox "NO SE ENCONTRÓ FACTURA CON ESOS CRITERIOS"
RSTConsulta.Close
Else
Do Until RSTConsulta.EOF
With FRMBusquedas.FLXFacturas
'aumenta una fila
.Rows = .Rows + 1
'se coloca en la última fila
.Row = .Rows - 1
.Col = 0
.Text = RSTConsulta("FAC_CLAVE")
.Col = 1
.Text = RSTConsulta("CLIE_NOMBRE")
.Col = 2
.Text = RSTConsulta("FAC_TOTAL")
.Col = 3
.Text = Format(RSTConsulta("FAC_FECHA"), "DD/MM/YY HH:NN:SS:")
End With
RSTConsulta.MoveNext
Loop
End If
Set RSTConsulta = Nothing
FRMBusquedas.Show
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 53
Pr o yec t o
Pr i nc i pa l
End Select
End Sub
PROCEDIMIENTO QUE DEFINE AL BOTÓN BUSCAR
Private Sub cmdbuscar_Click()
INTINSTRUCCION = BUSCAR
P_CRITERIOS
End Sub
PROCEDIMIENTO CRITERIOS (ESTABLECE EL ESTADO DE LOS CONTROLES
DURANTE LA BÙSQUEDA)
Sub P_CRITERIOS()
txtfactura.Enabled = True
txtfactura.Visible = True
txtfactura.Text = ""
cmdbuscar.Enabled = True
cmdbuscar.Visible = False
cbocliente.Enabled = True
cbocliente.Visible = True
cbocliente.ListIndex = -1
cboproducto.Enabled = True
cboproducto.Visible = True
cboproducto.ListIndex = -1
txtcantidad.Enabled = True
txtcantidad.Visible = True
txtcantidad.Text = ""
cmdmas.Enabled = True
cmdmas.Visible = True
flxproductos.Enabled = True
flxproductos.Visible = True
cmdnueva.Enabled = False
cmdnueva.Visible = False
cmdmodificar.Enabled = False
cmdmodificar.Visible = False
cmdeliminar.Enabled = False
cmdeliminar.Visible = False
cmdaceptar.Enabled = True
cmdaceptar.Visible = True
cmdcancelar.Enabled = True
cmdcancelar.Visible = True
cmdquitar.Enabled = True
cmdquitar.Visible = True
P_FormatoGrid
End Sub
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 54
Pr o yec t o
Pr i nc i pa l
FORMULARIO DE RESULTADOS DE BÚSQUEDA
INSTRUCCIONES AL CARGARSE EL FORMULARIO
Private Sub Form_Load()
P_FormatoGrid
End Sub
PROCEDIMIENTO QUE DEFINE EL FORMATO DEL GRID DE CONSULTAS
Public Sub P_FormatoGrid()
With FLXFacturas
.Rows = 1
.Cols = 4
.Row = 0
.Col = 0
.Text = "FACTURA N°"
.Col = 1
.Text = "NOMBRE DEL CLIENTE"
.Col = 2
.Text = "TOTAL"
.Col = 3
.Text = "FECHA"
.ColWidth(0) = 1000
.ColWidth(1) = 2500
.ColWidth(2) = 1000
.ColWidth(3) = 1000
End With
End Sub
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 55
Pr o yec t o
Pr i nc i pa l
PROCEDIMIENTO QUE DEFINE EL FORMATO DEL GRID DE CONSULTAS
Private Sub FLXFacturas_DblClick()
Dim RSTBuscar As New ADODB.Recordset
Dim strsql As String
With FLXFacturas
.Col = 0
strsql = "SELECT * FROM VENTAS, FACTURAS, PRODUCTOS WHERE
FACTURAS.FAC_CLAVE = VENTAS.FAC_CLAVE AND VENTAS.PROD_CLAVE =
PRODUCTOS.PROD_CLAVE "
strsql = strsql & "AND VENTAS.FAC_CLAVE = " & .Text
RSTBuscar.Open strsql, STRCONEXION, adOpenStatic, adLockReadOnly
End With
FRMVentas.txtfactura.Text = RSTBuscar("FACTURAS.FAC_CLAVE")
FRMVentas.cbocliente.ListIndex
=
F_OpcionCombo(FRMVentas.cbocliente,
RSTBuscar("CLIE_CLAVE"))
FRMVentas.P_FormatoGrid
Do Until RSTBuscar.EOF = True
With FRMVentas.FLXProductos
.Rows = .Rows + 1
.Row = .Rows - 1
.Col = 0
.Text = RSTBuscar("PRODUCTOS.PROD_CLAVE")
.Col = 1
.Text = RSTBuscar("PROD_NOMBRE")
.Col = 2
.Text = RSTBuscar("PROD_PRECIO")
.Col = 3
.Text = RSTBuscar("VENTA_CANTIDAD")
.Col = 4
.Text = CSng(RSTBuscar("PROD_PRECIO")) * CInt(RSTBuscar("VENTA_CANTIDAD"))
End With
RSTBuscar.MoveNext
Loop
Unload Me
FRMVentas.Show
FRMVentas.CMDModificar.Visible = True
FRMVentas.CMDModificar.Enabled = True
End Sub
PROCEDIMIENTO QUE DEFINE AL BOTÒN EXPORTAR
Private Sub CMDExportar_Click()
Dim XlsAplicacion As Object
Dim XlsHoja As Object
Dim IntFila As Integer
Dim IntFactura As Integer
Screen.MousePointer = vbHourglass
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 56
Pr o yec t o
Pr i nc i pa l
FLXFacturas.Row = 1
Set XlsAplicacion = CreateObject("Excel.Application")
XlsAplicacion.Workbooks.Open FileName:="" & App.Path & "\REPORTE1.XLS",
ReadOnly:=True
Set XlsHoja = XlsAplicacion.Worksheets(1)
XlsAplicacion.Range("A2", "G1000") = ""
IntFila = 2
For IntFactura = 1 To FLXFacturas.Rows - 1
With XlsHoja
FLXFacturas.Col = 0
.Cells(IntFila, 1).Value = FLXFacturas.Text
FLXFacturas.Col = 1
.Cells(IntFila, 2).Value = FLXFacturas.Text
FLXFacturas.Col = 2
.Cells(IntFila, 3).Value = FLXFacturas.Text
FLXFacturas.Col = 3
.Cells(IntFila, 4).Value = FLXFacturas.Text
End With
IntFila = IntFila + 1
If IntFactura <> FLXFacturas.Rows - 1 Then FLXFacturas.Row = IntFactura + 1
Next
Screen.MousePointer = vbDefault
XlsAplicacion.Visible = True
Set XlsAplicacion = Nothing
End Sub
ARCHIVO DE EXPORTACIÓN A EXCEL (DE SÓLO LECTURA)
PROCEDIMIENTO QUE DEFINE AL BOTÒN SALIR
Private Sub Cmdsalir_click()
Unload me
End
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
Sub
PÁGINA 57
No tas
F i na l es
Notas Finales
Deseamos que el presente material de apoyo le haya facilitado el aprendizaje de los temas que componen cada
módulo de este evento y que le sea útil para futuras consultas. Le felicitamos por haber concluido este curso de
capacitación, continúe practicando; recuerde que su habilidad dependerá del manejo cotidiano de esta
paquetería. También le reiteramos que el equipo de Instructores estará en la mejor disposición de apoyarle con
cualquier asesoría en Informática, y le invitamos a que consulte el calendario de cursos y continúe con este
proceso de capacitación, según sus necesidades, en el puesto que desempeña. Las puertas del Centro
Nacional de Capacitación y Calidad estarán siempre abiertas para brindarle el servicio en Informática que
requiera.
Bibliografía: Microsoft Visual Basic 6.0 Enterprise, Michael Halvorson y Michael Young, Mc Graw Hill
Microsoft Visual Basic 6.0 paso a paso, Halvorson Kinata, Mc Graw Hill
Registrado ante la Secretaria de Educación Publica
Obra Literaria
Registró en Trámite
CENTRO NACIONAL DE CAPACITACIÓN Y CALIDAD
Coordinación de Informática
PÁGINA 58
Descargar