Você está na página 1de 192

Prefacio

Bienvenidos a Visual Basic 6.0; este texto presenta la mejor manera de aplicar Visual
Basic al desarrollo de bases de datos. Durante mucho tiempo los usuarios han estado
tratando con textos donde al finalizar su lectura no tienen las herramientas para
desarrollar aplicaciones para bases de datos, lo cual viene a engrosar las filas de
decepcionantes en lo que se refiere a textos.
Con este texto usted aprender los conceptos necesarios para desarrollar aplicaciones
para bases de datos; desde el primer captulo se definen las pautas a seguir, y se va
desarrollando un ejercicio , la Ficha de datos de los empleados de una empresa, que
inicia con la captura de datos con sus diferentes conceptos de mantenimiento como ser
agregar un registro a una tabla, as como la edicin del mismo; eliminacin de un registro
y modificacin de datos. Contina con el concepto de consulta de datos, bsqueda de
informacin en la tabla. Luego se entra al concepto de reportes, utilizando como
herramienta de generacin de reportes Cristal report 7.0. En los ltimos captulos se
desarroll un ejercicio complejo sobre tablas cuyo ndice est compuesto por mas de un
campo, como es la planilla de una empresa.
El escritor de este texto, el Sr. Roger Pavn es un Analista de Sistemas de Informtica
desde hace un poco mas de veinte aos; y con su amplia experiencia como programador
y desarrollador de aplicaciones para bases de datos, pone a su disposicin todos sus
conocimientos para ayudarle en la fascinante tarea del desarrollo de sistemas.
El Sr. Pavn es escritor de otros textos como Macromedia MX, SQL para programadores,
Programacin Estructurada y otros; en cada unos de sus diferentes textos encontrar el
mismo principio: aprender desarrollando.
Al final de cada captulo encontrar una serie de ejercicios que usted debe desarrollar
para poder aplicar lo aprendido en el captulo. Tiene usted en sus manos uno de los
textos mas apreciados en el mercado por los desarrolladores de aplicaciones; son
muchos los programadores en otras herramientas que han aprendido con este texto.
Agradecemos a todos aquellos que hicieron posible la publicacin de este texto, en
especial a Berenice,Diego y Anita, y a usted amable lector por tener esta obra en sus
manos.

INDICE
Captulo No. 1 Introduccin al Visual Basic
1. Generalidades del Visual Basic
2. Entrando al Visual Basic
3. Pantalla de trabajo de Visual Basic
4. Iniciando un nuevo proyecto
5. Partes de la Pantalla de Visual Basic
6. Controles y componentes
7. Gua de trabajo Captulo No.1

1
1
1
1
2
3
4
6

Captulo No. 2 Formularios


1. Qu es un formulario
2. Cmo agrandar el tamao del formulario
3. Cmo correr y ejecutar un formulario
4. Salvar el formulario dentro de un proyecto nuevo
5. Propiedades
6. Creacin de nuevos formularios en un proyecto
7. Cambiando de un formulario a otro
8. Eliminar un formulario
9. Gua de trabajo Captulo No. 3

7
7
7
8
8
9
12
13
14
15

Captulo No. 3 Tabbed Dialog


1. Cmo abrir un formulario
2. Qu es un Tabbed Dialog
3. Propiedades del Tabbed Dialog
4. Gua de trabajo Captulo No. 3

16
16
16
18
20

Captulo No. 4 Command Button


1. Qu es un Command Button
2. Propiedades del Command Button
3. Programando dentro de un botn
4. Imgenes para botones creados en programas grficos
5. Gua de trabajo Captulo No. 4

21
21
22
26
27
29

Captulo No. 5 Label y Textbox


1. Qu es un label
2. Propiedades de los Label
3. Qu es un textbox
4. Propiedades de los textbox
5. Gua de trabajo Captulo No. 5

30
30
30
33
33
37

Captulo No. 6 Fechas, Barras de Estado y Eventos


1. Qu es un Maskededit
2. Propiedades del Maskededit
3. Qu es un Statusbar
4. Propiedades del Statusbar
5. Eventos

40
40
40
41
42
43

6. Evento Gotfocus
7. Evento keyprees
8. Efecto de iluminado Sendkeys
9. Gua de trabajo Captulo No. 6

43
46
47
48

Captulo No. 7 Combobox, OptionButton y Checkbox


1. Combobox
2. Frame
3. OptionButton
4. Checkbox
5. Gua de trabajo Captulo No. 7

49
49
52
53
55
57

Captulo No. 8 ODBC


1. Qu es un ODBC
2. Creacin de un ODBC
3. Referencias(Remote Data Object); DLL
4. Variables de conexin y Mdulos
5. Gua de trabajo Captulo No. 8

59
59
60
64
67
68

Captulo No. 9 Lectura de Tabla de Datos


1. Lectura de una tabla (Instruccin Select)
2. Variables RdoResultset
3. Lectura de tablas usando Parmetros
4. Gua de trabajo Captulo No. 9

69
69
71
72
76

Captulo No. 10 Subrutinas, Inicializando datos y Agregar Registro


1. Crear Subrutinas (Private Sub)
2. Subrutina Inicializar datos
3. Programacin Botn Cancelar
4. Programacin Botn Agregar (Insert)
5. Instruccin Con.Committrans
6. Gua de trabajo Captulo No. 10

77
77
78
81
82
86
87

Captulo No. 11 Datos numricos, programacin de teclas y validacin


De Datos
1. Casillas numricas
2. Salto de una casilla a otra con la tecla enter
3. Validaciones
4. Datos numricos no pueden grabarse en blanco (empty)
5. Validar la repeticin del registro a grabarse
6. Gua de trabajo Captulo No. 11

90
90
92
93
98
99
100

Captulo No. 12 Edicin de Datos, Eliminacin y Modificacin


1. Edicin de datos
2. Eliminacin de Registro
3. Modificacin de Registro
4. Gua de trabajo Captulo No. 12

103
103
107
109
111

Captulo No. 13 Navegacin en una Tabla de Datos


1. Navegacin

112
112

2. Primer Registro
3. Ultimo Registro
4. Registro anterior
5. Registro siguiente
6. Gua de trabajo Captulo No. 13

113
114
115
116
118

Captulo No. 14 Presentacin de datos por columnas


1. Consulta de datos
2. Control VsFlexgrid
3. Control Remote Data Control
4. Conexin entre el VsFlexgrid y el Remote Data Control
5. Seleccionando un registro de la pantalla de consulta
6. Ttulos y Anchuras de columnas
7. Gua de trabajo Captulo No. 14

119
119
119
120
121
122
123
127

Captulo No. 15 Pantallas de ayuda para enlace con tablas


1. Creando un formulario de ayuda
2. Gua de trabajo Captulo No. 15

128
128
133

Captulo No. 16 Manejo de Fotografa


1. Agregar un campo a la captura de datos
2. Sistema Buscador de Fotografa
3. Gua de trabajo Captulo No.16

134
134
136
140

Captulo No. 17 Mejorando la Consulta


1. Busca de datos en la consulta
2. Ordenar datos
3. Interface entre Visual Basic y SQL
4. Gua de trabajo Captulo No. 17

141
141
143
144
146

Captulo No. 18 Programa Men


1. Programa Men
2. Hora dinmica en un men
3. Menu editor
4. Comando Shell
5. Gua de trabajo Captulo No. 18

147
147
148
149
153
155

Captulo No. 19 Cristal Report Parte I


1. Qu es Cristal Report
2. Generando nuestro primer reporte
3. Gua de trabajo Captulo No. 19

156
156
156
161

Captulo No. 20 Cristal Report Parte II


1. Cmo correr un reporte de Cristal Report desde Visual Basic
2. Reporte con mas de una tabla
3. Variables y clculos
4. Condiciones Simples
5. Condiciones anidadas
6. Gua de trabajo Captulo No. 20

162
162
163
165
167
168
169

Captulo No. 21 Cristal Report parte III


1. Subtotal y rupturas de control; reportes agrupados
2. Reportes Totalizados
3. Grficas
4. Gua de trabajo Captulo No. 21

170
170
172
173
175

Captulo No. 22 Cristal Report Parte IV


1. InputBox
2. Parmetros
3. Rangos de fecha
4. Gua de trabajo Captulo No. 22

176
176
177
179
180

Captulo 1
Introduccin al Visual Basic 6.0
I.

Objetivo General
Conocer los conceptos bsicos del Visual Basic; cmo es su presentacin, la pantalla
de trabajo y sus secciones.

II.

Objetivos especficos
Conocer de manera detallada las secciones de Visual Basic, y poder identificar
las diferentes componentes y controles que se ofrecen.

III.

Contenido
1.
2.
3.
4.
5.

Generalidades de Visual Basic


Entrando a Visual Basic
Pantalla de Trabajo de Visual Basic
Iniciando un Nuevo Proyecto
Partes de la Pantalla de Visual Basic

6. Controles y Componentes
7. Gua de trabajo
1. Generalidades de Visual Basic
Visual Basic es una herramienta para desarrollo de aplicaciones en ambiente Windows.
Pertenece a la familia de Microsoft, y es una de las herramientas de programacin ms
populares en todo el mundo. Al igual que la mayora de las herramientas visuales est
orientada a objetos y eventos, conceptos que sern explicados mas adelante. Visual Basic
ha experimentado cambios de versiones, mejorando algunos aspectos en cada una de
ellas; entre las versiones mas destacadas se encuentran la 4.0, 5.0, 6.0 y Net, que es la
mas reciente; en este texto estudiaremos la versin 6.0
VB, como lo llamaremos de aqu en adelante, tiene la ventaja de poder trabajar con
cualquier base de datos, entre las cuales mencionaremos: Acces(MS), Oracle, SQL Server
(MS), SQL Base, Informix, Pradox, DB2 del AS-400, y otros. Lo anterior nos conduce a
elegir VB como nuestra herramienta de desarrollo. En aos anteriores, los programadores
desarrollaban aplicaciones en lenguajes que quedaban amarrados a la plataforma de
manejo de datos; si la institucin cambiaba de plataforma de datos tambin tena que
cambiar de aplicacin; con VB la institucin puede iniciar manejando sus datos con una
plataforma no muy robusta o pequea, como el caso de Access, y si mas adelante cambia
a una plataforma mas robusta como Oracle, siempre le sirve la misma aplicacin de VB.
2. Entrando al Visual Basic
En cada computadora habr una forma peculiar de hacerlo; dependiendo de la forma en
que se ha instalado, as ser de diferente la forma de entrar, pero en su mayora ser de la
siguiente forma:
Inicio (Windows) / Programas / Visual Studio 6.0 / Visual Basic 6.0

3. Pantalla de trabajo de Visual Basic


Al entrar a Visual Basic le aparecer la siguiente pantalla:

Figura 1.1
Haga clic en el botn Cancelar
4. Iniciando un Nuevo Proyecto
Para poder ver la pantalla de trabajo con todas sus secciones debemos decirle a VB que
inicie un nuevo proyecto; note que en la parte superior de su pantalla hay un men de
opciones con las siguientes opciones: File, Edit, View, Project, Format, Debug, Run,
Query, Diagram, Tools, Add-ins, Windows, Help
Para crear un nuevo proyecto haga clic en la opcin del men que dice File; le aparecer
otro men del cual debe seleccionar la opcin que dice Project; le aparecer la siguiente
pantalla:

Figura 1.2
En esta pantalla le aparecen las diferentes opciones para crear un nuevo proyecto;
tenemos una gran variedad, entre ellas Standard EXE, Actives EXE, Activex EXE, Actives
EXE Control, VB Application Wizard y otras. Cada una de ellas tiene su propia funcin ,
pero la que usaremos en este texto como plataforma de trabajo ser la opcin o cono que

dice Standard EXE; debe asegurarse que esta opcin este seleccionada; en caso
contrario haga clic una vez sobre este cono.
Estando seguro que se encuentra seleccionado Standard EXE, haga clic en el botn OK y
le aparecer la siguiente pantalla

Figura 1.3
A partir de este momento usted est listo para desarrollar un sistema en VB; esto es lo que
llamamos Pantalla de trabajo de VB o Formulario; esta es la parte donde se pegan todos
los objetos a utilizar en el diseo de un sistema; es nuestra plataforma de diseo.
5. Partes de la Pantalla de Visual Basic
La pantalla de VB tiene bsicamente cuatro partes o secciones
a. Seccin de Controles

Figura 1.4
Esta es la parte donde se encuentran los diferentes objetos que se pueden usar en un
diseo; no son todos, mas adelante veremos cmo incluir en esta seccin otros controles;
la puede ver en la parte izquierda de su pantalla.
Para pegar un control en el formulario haga clic en cualquier control, luego haga clic en
cualquier parte del formulario y teniendo presionado el mouse haga un remarcado sobre el
formulario, luego suelte el botn del mouse; intente pegar varios componentes; para borrar
un componente del formulario, haga clic sobre el componente que desea borrar, y presione
la tecla Supr o delete.

b. Seccin del men de opciones

Figura 1.5
Es la parte donde se encuentran las opciones del men principal, as como los botones de
acceso rpido; se encuentra en la parte inferior de la pantalla. Esta seccin como puede
ver tiene dos partes: la lnea donde estn las opciones del men y la lnea con los
botones de acceso rpido; un botn de acceso rpido tiene la misma funcin de una
opcin del men, solo que si ejecuta la tarea con el men posiblemente har mas de dos
pasos, mientras que con el botn de acceso rpido har un solo paso. No todas las
opciones del men tienen su botn de acceso rpido, solo las de mayor uso.
c. Seccin del Explorador

Figura 1.6
Es la parte donde se encuentran los diferentes formularios de nuestro proyecto; esta
seccin est usualmente por la derecha de su pantalla.
d. Seccin de Atributos o Propiedades

Figura 1.7
Es la parte donde podemos elegir algunas propiedades que queremos dar a un
determinado control u objeto como ser color, altura, anchura, textura, etc. Usualmente se
encuentra en la parte inferior derecha de su pantalla.
6. Controles y Componentes
Regresemos al concepto de Controles; los controles que se pueden ver en la seccin de
controles no son todos los controles que se pueden utilizar en VB; de hecho no son todos
los que utilizaremos en este texto.

Para incorporar otro control a la seccin de controles haremos lo siguiente:


a. En la seccin del men de opciones haga clic en la opcin Project
b. Le aparece un men; haga clic en la opcin Components y le aparecer la
siguiente pantalla

Figura 1.8

c. Todos los controles de esta pantalla estn ordenados en orden alfabtico para que
de esa manera sea mas fcil localizar el control sabiendo su nombre; con la flechas
de direccin de su teclado usted puede desplazarse por esta pantalla; al ubicar el
control que desea incorporar a la seccin de controles haremos clic en la casilla
(cuadrito blanco) del control que queremos incorporar a la seccin de controles; al
hacer clic le aparece sobre la casilla un chequeo; puede seleccionar varios
controles si lo desea.
d. Ya finalizado el proceso haga clic en el botn Aceptar.
Cada control incorporado puede generar una o varias figuras de objetos; haremos el
siguiente ejercicio: Incorpore a la seccin de controles un control llamado: Microsoft
Windows Common Controls 5.0 (SP2)
Cuntas figuras de objetos le gener este nuevo Control? ______
Cul sera el proceso para quitar las figuras de objetos que gener la incorporacin de un
nuevo control?
Podemos quitar las figuras de un objeto de un nuevo control de la seccin de controles
siempre y cuando no hayamos pegado una de estas figuras en el formulario. El proceso
sera el mismo que el que se hizo para incorporarlo con la diferencia de que en el inciso c
del proceso lo que debemos hacer es quitarle el chequeo de la casilla que se encuentra a
la izquierda del nombre del control.

Gua de trabajo Captulo No. 1


1. Qu tipo de programa es Visual Basic
2. Qu versiones de Visual Basic se conocen
3. Qu ventaja le proporciona Visual Basic a los programadores
4. Cules son las partes de la pantalla de Visual Basic
5. Qu es la seccin de controles
6. A qu se le llama botones de acceso rpido
7. Qu es el explorador de VB
8. El color, tamao, textura son aspectos que se definen en qu seccin
9. En qu partes de la seccin de herramientas hay que hacer clic para ver la pantalla
en dnde podemos seleccionar otros controles

Captulo 2
Formularios
I.

Objetivo General
Conocer la funcin de los Formularios

II.

Objetivos especficos
Disear formularios y conocer las propiedades de los mismos

III.

Contenido
1.
2.
3.
4.
5.
6.
7.
8.

Qu es un formulario
Cmo agrandar el tamao de un formulario
Cmo correr o ejecutar un formulario
Salvar el formulario dentro de un proyecto nuevo
Propiedades
Creacin de nuevos formularios en un proyecto
Cambiando de un formulario a otro
Eliminar un formulario

9. Gua de trabajo
1. Qu es un formulario
Como se indic en el captulo 1, el formulario es donde se pegan los diferentes componentes a
usar en nuestro diseo de pantalla. Al entrar a VB, y crear un proyecto nuevo, la imagen que le
aparece es la del Formulario:

Figura 2.1
Si tuvisemos que dar una descripcin jerrquica al formulario, diramos que es la unidad bsica
de un proyecto; sin el formulario no es posible desarrollar nada en VB.
2. Como agrandar el tamao del formulario
Note usted que tanto por debajo como a la derecha del formulario se ven unos puntos o cuadritos
azules; haga clic en cualquiera de estos puntos, y teniendo presionado el botn del mouse
arrstrelo en la direccin deseada. Por favor agrande su formulario tanto hacia la derecha como
hacia abajo, de tal manera que le quede en forma rectangular, mas ancho que alto.

3. Cmo correr o ejecutar un formulario


Usted est en modalidad de diseo, y no de ejecucin; para ejecutar un formulario tenemos dos
opciones:
a. Correrlo sin compilar errores
Presione la tecla F5; esta modalidad ejecuta su formulario aun teniendo errores su
programa.
b. Correrlo compilando errores
Presione la tecla la combinacin de las teclas Control (ctrl.) y F5; esta modalidad ejecuta
su formulario, pero si existe un error en su programa, el proceso se trunca, y solo podr
correrlo hasta que el programa est limpio de errores.
En este curso, correremos nuestros formularios con la opcin b, y en ningn momento lo haremos
con la opcin a.
Al correr su formulario para regresar a la modalidad de diseo, cierre su formulario en ejecucin,
haciendo clic en la x del encabezado de su formulario (parte superior derecha de su formulario)
4. Salvar el formulario dentro de un proyecto nuevo
Este es el mejor momento para crear nuestro proyecto nuevo; salvaremos nuestro formulario
dentro de un proyecto nuevo; siga los siguientes pasos:
a. Haga clic en el men en la opcin File
b. Le aparece otro men; haga clic en la opcin: Save project as (salvar proyecto como)
c. Le aparecer la siguiente pantalla:

Figura 2.2
Nuestro proyecto lo salvaremos en el subdirectorio Winsystem as que cambie de subdirectorio.
d. Primero nos dice que salvar el formulario; escriba el nombre del formulario: Frmemple
y si ya est simplemente djelo as
e. Haga clic sobre el botn Guardar
f. Ahora le aparece una pantalla pidiendo el nombre del proyecto; escriba como
nombre: Sistema
g. Haga clic sobre el botn Guardar
h. Si le aparecer lo siguiente:

Figura 2.3
Haga clic en el botn: No
Este proceso tan largo se hace solo una vez; de aqu en adelante para salvar haga clic en la
figura de un diskette (ver parte superior)

5. Propiedades
Las propiedades del formulario estn en la seccin de las propiedades; a continuacin
conoceremos las diferentes propiedades que se aplican a los formulario, y su funcin; si nota las
propiedades en la seccin de propiedades, ver las siguientes:

Figura 2.4
a. (Name)
Esta propiedad es para dar nombre al formulario; note que VB le asign como nombre al
formulario: Form1; usted puede cambiar este nombre en la propiedad (Name); a este formulario
que estamos trabajando le daremos como nombre: Frmemple; este ser el formulario para los
datos de empleados de la aplicacin que desarrollaremos.
b. Backcolor
Esta propiedad sirve para darle color al formulario; dele al formulario un color amarillo, el mas
claro que encuentre. Ubquese en la propiedad Backcolor; por la derecha ver un combo o lista
men donde debe hacer clic; le aparecer lo siguiente:

Figura 2.5
Haga clic sobre la gua que dice Palette y le aparecer la paleta de colores:

Figura 2.6
Elija un color amarillo, el amarillo mas suave que encuentre.
Corra su formulario (ctrl. F5)
c. Propiedad moveable
Esta propiedad sirve para que el usuario pueda darle al formulario la caracterstica de poderse
mover con el mouse o para quitarle tal caracterstica; si usted corre su formulario podr moverlo
haciendo clic sobre el ttulo del formulario y arrastrarlo en cualquier direccin.
Corra su formulario y compruebe lo anterior.
Ahora ubquese en la propiedad moveable y ver que est en True; True significa que el
formulario tiene la caracterstica de poder moverse; se recomienda que los formularios estn
estticos, as que entre al combo lista men y seleccione la opcin False.
d. Propiedad Borderstyle
Esta propiedad sirve para habilitar o inhabilitar la condicin de minimizar y maximizar el
formulario; al correr su formulario usted habr notado que en el formulario por la esquina superior
derecha tiene lo siguiente:

Figura 2.7
Si usted hace clic sobre el guin, el formulario se minimiza; si usted hace clic sobre el rectngulo,

el formulario se maximiza; en ambos casos implica movimiento y es lo que no queremos; para


quitar estas opciones al formulario vaya a la propiedad BorderStyle y haga clic sobre el combo
lista men; le aparecen varias opciones de las cuales usted debe seleccionar la que dice: Fixed
Single.
e. Propiedades Heigth y Width
La propiedad Heigth es para darle la altura al formulario; queremos que todos los formularios
tengan la siguiente altura: 7500.
La propiedad Width es para darle la anchura al formulario; queremos que todos los formularios
tengan la siguiente anchura: 11000
f. StartUpPosition
Esta propiedad nos servir para centrar el formulario en la pantalla; ubquese en esta propiedad y
haga clic sobre el combo lista men; le aparecer varias opciones, y la que debe seleccionar es
la No. 2 que dice: CenterScreen. Corra su formulario
g. Propiedades Left y Top.
Estas propiedades sirven para ubicar el formulario en cierta posicin de la pantalla; sucede que a
veces no queremos centrar un formulario, sino ubicarlo en un determinado punto, para el caso, en
la esquina inferior derecha; cambiemos los valores de estas propiedades de tal manera que
consigamos nuestro objetivo de ubicarlo en la esquina inferior derecha; en la propiedad Left
escriba el N 1000 y en la propiedad top escriba tambin el N 1000
Corra su formulario
Despus de probar las propiedades anteriores, centre su formulario en la pantalla
h. Propiedad Caption
Esta Propiedad sirve para escribir el ttulo que queramos al formulario; VB escribe como ttulo del
formulario: Form1; vaya a esta propiedad y en lugar de Form1 escriba: Mantenimiento Tabla
Datos de Empleado
i. Propiedad Picture
Esta propiedad sirve para pegar una imagen en el formulario como fondo del mismo; vaya a esta
propiedad y haga clic en el botn que le aparece por la derecha; le aparece lo siguiente:

Figura 2.8

Debe seleccionar el subdirectorio donde se encuentra la figura que va a pegar en el


formulario; ubquese en el subdirectorio: C:\winsystem\imgenes; usted encontrar varios
archivos de imgenes; haga doble clic sobre el archivo: imagen1.
Corra su formulario
Son casos muy especiales donde pegaremos una imagen en el formulario, casos que
miraremos mas adelante; ahora queremos que quite la imagen del formulario; en la
misma propiedad Picture encontrar la palabra Bitmap; haga doble clic sobre esta palabra
y luego presione la tecla Delete.
j. Propiedad Icon
Esta propiedad sirve para pegar en el encabezado del formulario una figura como cono; VB le da
ya un cono, que es el siguiente:

Vamos a cambiar este cono que propone VB por otra mas llamativa; vaya a esta propiedad y
haga clic en el botn que le aparece por la derecha; le aparece lo siguiente:

Figura 2.9
Debe seleccionar el subdirectorio donde se encuentra la figura que va a pegar en el
formulario; ubquese en el subdirectorio: C:\winsystem\imgenes; usted encontrar varios
archivos de imgenes; haga doble clic sobre el archivo: icono
Corra su formulario
Por ahora estas sern todas las propiedades del formulario que veremos en este captulo.
6. Creacin de nuevos formularios en un proyecto
Una de las actividades que el programador de visual Basic tendr que realizar es crear nuevos
formularios, ya que no es posible hacer toda una aplicacin en un solo formulario; una aplicacin
completa llevar entre 20 a 30 formularios como mnimo, y en otras aplicaciones se podra
duplicar este nmero. Para crear un nuevo formulario debe hacer clic en el men en la opcin:
Project y le aparecer el siguiente men:

Figura 2.10
De este nuevo men debe seleccionar la opcin: Add Form y le aparecer la siguiente pantalla:

Figura 2.11
En esta pantalla ya le aparece seleccionada la opcin: Form; haga clic sobre el botn Abrir.
De nuevo regresamos al formulario que de inicio nos present VB. Ahora bien, note lo que pasar
ahora: corra su formulario.
Si bien es cierto que en pantalla tiene el nuevo formulario, el que corri VB fue el anterior; esto se
debe al hecho de que hay una manera de indicarle a VB qu formulario debe correr.
7. Cambiando de un formulario a otro
Usted tiene dos formularios en este momento: frmemple y el formulario nuevo; para indicar a VB
qu formulario debe correr debe hacer lo siguiente: haga clic en el men en la opcin: Project y en
el men que le aparezca seleccione la opcin: Project 1 Properties y le aparecer lo siguiente:

Figura 2.12

Note que en el combo lista men, ya le aparece el nombre del formulario Frmemple; entre a esta
lista y seleccione el formulario nuevo; inmediatamente despus haga clic en el botn Aceptar
(OK).
Corra su formulario
Note que ahora se corre el formulario que tiene en pantalla; usted siempre debe tener en pantalla
el formulario de desea correr; haga los pasos necesarios para correr el formulario frmemple.
Ahora tenemos el inconveniente de que se corre el formulario que no tenemos en pantalla; en la
seccin del explorer de VB haga doble clic sobre el formulario Frmemple.
8. Eliminar un formulario
Eliminaremos el formulario nuevo; en el explorer haga clic sobre el formulario nuevo; presione el
clic derecho del mouse y le aparecer lo siguiente:

Figura 2.13
Haga clic sobre la opcin Remove Form2
Corra su formulario

Gua de trabajo Captulo No. 2


1. Qu es un formulario
2. Cmo debemos correr un formulario
3. Indique qu propiedad del formulario hace cada uno de los siguientes enunciados:
Nombre ___________________________________
Color _____________________________________
Que se pueda mover o no _____________________
Que se pueda minimizar o maximizar ____________
Altura _____________________________________
Anchura___________________________________
Centrar____________________________________
Escribir un ttulo_____________________________
Cambiar cono______________________________
Poner una imagen como fondo_________________
4. Haga un nuevo formulario que se llamar Frmcli con las mismas caractersticas del
formulario Frmemple
Caption= Mantenimento Tabla Datos de Clientes
5. Haga un nuevo formulario que se llamar Frmart con las mismas caractersticas del
formulario Frmemple
Caption= Mantenimento Tabla Datos de Artculos
6. Haga un nuevo formulario que se llamar Frmfac con las mismas caractersticas del
formulario Frmemple
Caption= Mantenimento Tabla Datos de Facturas

Captulo 3
Tabbed Dialog
I.

Objetivo General
Conocer la funcin de los Tabbed dialog

II.

Objetivos especficos
Disear en los formularios los Tabbed dialog necesarios y conocer sus propiedades

III.

Contenido
1. Cmo abrir un proyecto
2. Qu es un Tabbed dialog
3. Propiedades de un Tabbed dialog

1. Cmo abrir un proyecto


Lo primero que haremos ser abrir el proyecto llamado sistema, el cual se inici en Captulo N1;
los pasos para abrir un proyecto son los siguientes:
a. Haga clic en el men en la opcin File
b. Le aparece otro men; haga clic en la opcin: Open project
c. Le aparecer la siguiente pantalla

Figura 3.1
Debe ubicarse en el subdirectorio winsystem, que es donde salv el proyecto Sistema; cuando se
ubique en el subdirectorio winsystem, haga clic en el archivo Sistema. Vbp.
d. Haga clic en el botn Abrir
2. Qu es un Tabbed dialog
Un tabbed dialog es un control que nos ayuda a aprovechar el espacio del formulario, pues en el
mismo espacio del formulario puedo crear dos o mas pantallas para trabajar; en cualquier
aplicacin de Windows se estila usar este tipo de control; para que lo podamos identificar
vayamos a una parte del Visual Basic donde se usa este control; haga clic en el men en la opcin
Project, y luego en la opcin Project Properties; le aparecer esta pantalla:

Figura 3.2
Si usted hace clic en las diferentes guas o tabuladores (General, Make, Compile, Component,
debugging), notar que le aparecen distintas pantallas en el mismo espacio, sin tener que cambiar
de pantalla. En cada pantalla de cada gua o tabulador hay diferentes cosas o actividades que se
pueden hacer; este mismo control podemos utilizar en nuestro diseo de nuestra aplicacin.
El control Tabbed dialog no se encuentra disponible en la seccin de controles, as que hay que
insertarlo; en el captulo 1 aprendimos cmo insertar un nuevo control a la seccin de controles,
as que bastar con pedirle que inserte un nuevo control llamado: Microsoft Tabbed Dialog
Control 6.0. (ver captulo 1 pgina 4).
Si hizo correctamente el proceso de la insercin del control Microsoft Tabbed Dialog Control
6.0, debe aparecerle en la seccin de controles la siguiente figura:

Note que el nombre para este control es SStab; Pegue un SStab en el formulario y hgalo tan
grande que cubra casi todo el espacio del formulario, dejando un espacio por la derecha, y otro
por debajo. Debe quedarle de la siguiente manera:

Figura 3.3

3. Propiedades de un Tabbed dialog


Las propiedades del Tabbed dialog estn en la seccin de las propiedades; a continuacin
conoceremos las diferentes propiedades que se aplican a los Tabbed dialog; debe tener el
cuidado de tener seleccionado el tabbed dialog, o de lo contrario estar viendo en la seccin de
propiedades las propiedades del formulario; siempre que trabajemos una propiedad haga clic
sobre el tabbed dialog para asegurarse que est trabajando con l.
a) Propiedad (Name)
Esta propiedad es para asignarle nombre al Sstab; note que VB le asign como nombre al SStab
es Sstab1; usted puede cambiar este nombre en la propiedad (Name); a este SStab que estamos
trabajando le daremos como nombre: Tabla; de aqu en adelante haremos referencia a este
componente en nuestro diseo con el nombre: Tabla.
b) Propiedades Tabs y TabsPerRow
Estas propiedades son para indicar el No. de guas o tabuladores; note que en estas propiedades
est el No. 3; en nuestra aplicacin solo necesitamos dos guas o tabuladores, as que en estas
dos propiedades escriba el no. 2
c) Propiedad Style
Esta propiedad indica el estilo de las guas o tabuladores; VB ya nos da un estilo, y es el de
tabuladores grandes; pero este no es el estilo de Windows; mas bien el estilo de Windows son
tabuladores pequeos; si usted hace doble clic en esta propiedad notar cmo se cambia de un
estilo a otro; dejemos el estilo convencional de Windows. Cambiando el estilo de los tabuladores
deben verse as:

d) Propiedad Caption
Esta propiedad es para asignarle un determinado texto a cada tabulador; note que el primer
tabulador tiene como texto: Tab 0 y el segundo Tab1; para cambiar texto a un tabulador primero
debe hacer clic sobre l, y luego ir a la propiedad Caption y escribir el texto que se desea. Haga
que los tabuladores tengan lo siguientes textos:
Primer tabulador: Datos Generales
Segundo tabulador: Consulta
Al cambiar los textos de los tabuladores deben verse de la siguiente manera:

e) Propiedad Backcolor
Esta propiedad es para cambiar el color de la parte del Sstab que contiene tabuladores (ver parte
superior); no es posible cambiar el color del Sstab; usted siempre lo tendr de color gris; se
acostumbra a dejar el color de la parte que no tiene guas o tabuladores del mismo color que el
formulario; vaya a la propiedad backcolor y asigne el mismo color del formulario, el amarillo mas
suave que encuentre; la forma de manejar este color es igual que la forma que lo hizo en el
captulo 2 cuando le cambi color al formulario ( ver captulo 2 pgina 9). Al cambiar color debe
verse de la siguiente manera:

Corra su formulario
Debe verse de la siguiente manera:

Figura 3.4

Gua de trabajo Captulo No. 3


1. Qu es un Tabbed dialog
2. Cul es el nombre que VB le asigna a un Tabbed dialog cuando se pega en el formulario
3. Indique qu propiedad del Tabbed dialog hace cada uno de los siguientes enunciados:
Nombre _______________________________________
Color _________________________________________
El No. de guas o tabuladores______________________
Textos o rtulos a las guas o tabuladores ____________
4. Pegue un Tabbed dialog en el formulario Frmcli con las mismas caractersticas del tabbed
dialog del formulario Frmemple
5. Pegue un Tabbed dialog en el formulario Frmart con las mismas caractersticas del tabbed
dialog del formulario Frmemple
6. Pegue un Tabbed dialog en el formulario Frmfac con las mismas caractersticas del tabbed
dialog del formulario Frmemple

Captulo 4
Command Button
I.

Objetivo General
Conocer la funcin de los Command Button

II.

Objetivos especficos
Disear en los formularios los Botones necesarios y conocer las
propiedades del Command Button

III.

Contenido
1. Qu es un Command Button
2. Propiedades de los Command Button
3. Programando dentro de un botn
4. Imgenes para botnes creadas en programas grficos

1. Qu es un Command Button
En toda aplicacin en ambiente Visual (Windows) se requieren de objetos llamados
botones que llaman procedimientos o ejecutan acciones como salvar informacin,
imprimir, eliminar datos, etc. En Visual Basic los botones se hace con el control Command
Button y puede identificarlo por la siguiente figura en la seccin de controles:

Antes le pedimos que ample por la derecha el espacio entre el Tabbed Dialog y el
formulario, de tal manera que le quede as.

Ahora pegue un Command Button en la parte superior del espacio dejado por la derecha:

2. Propiedades de los Command Button


a. Propiedad Name
Esta propiedad sirve para dar nombre al botn; Vaya a la propiedad Name, y escriba:
Salvar
b. Propiedad Caption
Esta propiedad sirve para escribir un texto en el botn; Vaya a la propiedad caption, y
escriba: Salvar; debe quedarle as:

c. Propiedad Style
Esta propiedad sirve para indicar el estilo del botn; vaya a esta propiedad y entre al
combo que le aparece:
Usted notar que le aparecen dos opciones:

Si usted selecciona Graphical podr por medio de la propiedad Picture asignar una
imagen al botn.
Si usted selecciona Standard no podr asignar ninguna imagen al botn.
Le pedimos que seleccione Graphical
Usted no notar ningn cambio, el efecto se mira hasta que asignamos una imagen con la
propiedad picture.

c. Propiedad Picture
Esta propiedad sirve para pegar una imagen en un botn; no tiene caso trabajar esta
propiedad si en la propiedad Style no se seleccion Graphical; vaya a esta propiedad y
haga clic en el botn que le aparece en la propiedad:

Le aparece la siguiente pantalla:

En esta pantalla usted debe buscar la imagen que desea pegar en el botn; en la parte superior
de esta pantalla (Buscar en), usted debe entrar al combo y ubicarse en el subdirectorio donde se
encuentran las imgenes; las imgenes que necesitamos se encuentran en el subdirectorio
C:\Winsystem\imagenes.

Al ubicarse en el subdirectorio de imgenes usted ver en pantalla las imgenes que


puede seleccionar:

En nuestro caso seleccionaremos la imagen: Grabar; haga clic sobre esta imagen y luego haga
clic sobre el botn Abrir (ver parte inferior derecha de la pantalla).

El botn debe quedarle as:

d. Propiedad Tooltiptext
Esta propiedad sirve para asignar al botn un texto de etiqueta; al correr la aplicacin,
esta etiqueta se mostrar al sobreponer el puntero del mouse sobre el botn sin tener que
hacer clic.
Vaya a esta propiedad y escriba lo siguiente: Agregar registro
Al correr su aplicacin y sobreponer el puntero del mouse sobre el botn notar lo
siguiente:

EJERCICIO
Haga lo siguientes botones:
1.Name:
Caption:
Style:
Picture:
Tooltiptext:

Modificar
Modificar
Graphical
Grabar
Modificar registro

2.Name:
Caption:
Style:
Picture:
Tooltiptext:

Cancelar
Cancelar
Graphical
Cancelar
Cancelar operacin

3.Name:
Caption:
Style:
Picture:
Tooltiptext:

Eliminar
Eliminar
Graphical
Eliminar
Eliminar registro

4.Name:
Caption:
Style:
Picture:
Tooltiptext:

Salirse
Salirse
Graphical
Salirse
Salirse de esta pantalla

Al finalizar debe tener los botones de esta manera

e. Propiedad Enabled
Esta propiedad sirve para habilitar o inhabilitar un botn; al ir a esta propiedad usted
puede entrar al combo que le aparece y ver dos opciones:

Si selecciona True, el botn queda habilitado


Si selecciona False, el botn queda inhabilitado
Si inhabilita un botn el efecto lo ver solo al correr su aplicacin; en nuestro ejercicio los
botones Modificar y Eliminar deben aparecer de entrada inhabilitados; inhabilite estos dos
botones; al correr su aplicacin ver los botones inhabilitados de la siguiente manera:

El resto de propiedades del command button se vern en la medida que se usen, lo cual
ser en captulos siguientes
3. Programando dentro de un botn
La idea de hacer botones es que al hacer clic en ellos se ejecute una determinada accin;
en tal caso es necesario crear lneas de programacin (lneas de cdigo); para el caso
vamos a programar que al hacer clic en el botn salir; el programa haga una salida; los
pasos serian los siguientes:
1. Ubquese en el botn salirse
2. Haga doble clic
3. Debe aparecerle lo siguiente

Esto es lo que se llama subrutina; la subrutina inicia con la palabra Private y termina
con las palabras: End Sub; en el espacio que hay entre el inicio y fin de la subrutina se
escriben las lneas de programacin que sern ejecutadas:
Como lo que queremos es hacer una salida, utilizaremos la frase: Unload me
Esta frase significa: Salirse del formulario donde actualmente me encuentro
4. Escriba: Unload me
5. Slgase de esta pantalla

Nota: para salirse de la pantalla de cdigo, presione el clic derecho del mouse y le
aparecer la siguiente pantalla:

Seleccione la opcin: Hide


Corra su formulario; slgase de su aplicacin presionando el botn Salirse
4. Imgenes para botn creadas en programas grficos
Existe una forma de manejar imgenes en un botn diferente al procedimiento usado
hasta este momento, y es crear sus propias imgenes en un programa de manejo de
imgenes como Photoshop, Fireworks, u otros; en este caso no se escribe el texto en la
propiedad Caption, sino que se disea como parte de la imagen; para trabajar de esta
manera usted tiene que conocer uno de estos programas para tratar imgenes; en el
subdirectorio de imgenes usted encontrar las siguientes imgenes:
Imagen-agregar
Imagen-modificar
Imagen-Cancelar
Imagen-Eliminar
Imagen-Salirse
Si para cada botn hubiese usado estas imgenes, se vera su aplicacin de la siguiente
manera:

Este procedimiento es mas atractivo desde el punto de vista que podemos hacer mas
personalizado nuestro sistema.

Gua de trabajo Captulo No. 4


1. Qu es un Command Button
2. Indique qu hacen las siguientes propiedades del command button:
Name
Caption
Style
Picture
Enabled
3. Haga en el formulario Frmcli los mismos botones que hizo en el formulario Frmemple
4. Haga en el formulario Frmart los mismos botones que hizo en el formulario Frmemple
5. Haga en el formulario Frmfac los mismos botones que hizo en el formulario Frmemple

Captulo 5
Label y Textbox
I.

Objetivo General
Conocer la funcin de los Label y Textbox

II.

Objetivos especficos
Disear en los formularios los Label y Textbox necesarios y conocer las
propiedades

III.

Contenido
1. Qu es un Label
2. Propiedades de los Label
3. Qu es un textbox
4. Propiedades de los textbox

1. Qu es un Label
Sirve para hacer etiquetas o simular contenedores de controles; puede identificar este
control porque su dibujo es una letra A

En nuestro caso los label o etiquetas las haremos sobre el tabbed dialog (tabla); pegue un
Label en la pantalla, exactamente en la parte superior del tabbed dialog, de la siguiente
manera:

2. Propiedades de los Label


a. Propiedad Name
Esta propiedad sirve para dar nombre al label; Vaya a la propiedad Name, y encontrar
que el nombre asignado por visual Basic es: Label1; los nombres de

los label no sern cambiados, al menos ese es el criterio en nuestro curso; pero usted
puede asignarle un nombre como a cualquier otro objeto.
b. Propiedad Caption
Esta propiedad sirve para cambiar el texto del label; Vaya a la propiedad caption, y
escriba: Cdigo del empleado; debe quedarle as:

c. Propiedad Borderstyle
Esta propiedad sirve para darle al label una apariencia de hundimiento; vaya a la
propiedad borderstyle; entre al combo que le aparece y ver dos opciones:

Si selecciona None el label queda en forma plana


Si selecciona Fixed Single el label queda en apariencia hundida, de la siguiente manera:

En nuestro caso lo dejaremos con la opcin None.


d. Propiedad Font
Esta propiedad sirve para dar al texto caractersticas especiales como tipo de letra,
tamao, negrita y otros. Vaya a la propiedad Font, y haga clic en el botn que se
encuentra en la lnea de esta propiedad:

Le aparecer la siguiente pantalla:

Despus de indicar las caractersticas que le desea dar al texto debe presionar el botn
aceptar. Esta opcin de la propiedad Font la usaremos cuando manejemos ttulos u otros
textos; por ahora dejaremos los textos sin ninguna caracterstica que nos proporciona esta
pantalla, excepto el label: Cdigo del empleado; dele a este label la caracterstica de letra
negrita.
Ejercicio
Haga las siguientes etiquetas; recuerde que no debe cambiar el nombre de la etiqueta
que es asignado por Visual Basic:
-

Nombre del Empleado

Direccin

Fecha de Ingreso

Sueldo Mensual

Telfono

Estado Civil (1,2,3,4,5)

Sexo (F,M)

Departamento

Sucursal

Sindicato

Al terminar su ejercicio y correr su aplicacin debe verse de la siguiente manera:

3. Qu es un Textbox
Sirve para hacer casillas de entrada de datos; puede identificar este control porque su
dibujo es el siguiente:

Los textbox se harn a la par de cada label o etiqueta, siempre sobre el tabbed dialog
(tabla); pegue un textbox en la pantalla, exactamente a la par de la etiqueta: Cdigo del
empleado, de la siguiente manera:

4. Propiedades de los Textbox


a. Propiedad Name

Esta propiedad sirve para dar nombre al textbox; vaya a la propiedad Name, y encontrar
que el nombre asignado por visual Basic es: Text1; los nombres de los textbox que
usaremos sern los mismos que tiene en la tabla de datos de nuestra base de datos, la
cual conoceremos en captulos siguientes; agregaremos al nombre las letras TXT; el
texbox para el cdigo del empleado le llamaremos: TXTCODIGO.
b. Propiedad Text
Esta propiedad sirve para asignar al textbox un rtulo previo; en nuestro caso los textbox
irn en blanco; vaya a la propiedad Text y borre el rtulo o palabra que encuentre:
Corra su aplicacin e ingrese datos a la casilla del cdigo del empleado; si ya lo hizo
usted notar que necesitamos de una propiedad que nos permita limitar el No. de
caracteres a ingresar.
c. Propiedad Maxlen
Esta propiedad sirve para indicar el No. caracteres permitidos en un textbox; vaya a la
propiedad Maxlen y encontrar que tiene el No. 0, lo cual indica que no tiene lmite de
caracteres; usted escriba el No. 10 (esta es la longitud del campo nombre en la tabla
Empleados)
Corra su aplicacin y trate de ingresar al cdigo del empleado mas de 10 caracteres:
d. Propiedad Appearance
Esta propiedad sirve para indicar el tipo de casilla (plana o 3D); vaya a esta propiedad y
entre al combo lista y le aparece lo siguiente:

Si selecciona 0 Flat tendr una casilla plana


Si selecciona 1 3D tendr una casilla en 3D
Seleccione 0 Flat y corra su aplicacin; note la diferencia:

En el medio informtico es bastante comn cualquiera de los dos estilos, as que le


dejamos a usted decidir en qu estilo desea trabajar; solo queremos pedirle que en este
curso use una sola forma de hacer las casillas.
e. Propiedad Tabindex
Esta propiedad sirve para indicar el orden de posicionamiento del cursor al correr la
aplicacin; al correr la aplicacin queremos que el cursor aparezca en la casilla
TXTCODIGO; vaya a esta propiedad y escriba el No. 0, lo cual har lo que queremos;
corra su aplicacin y notar que el cursor aparece en primer lugar en la casilla
TXTCODIGO.
f. Propiedad Alignment
Esta propiedad sirve para indicar el alineamiento en la casilla; vaya a esta y entre al
combo que le aparece y tendr las siguientes opciones:

0 Alineamiento a la izquierda
1 Alineamiento a la derecha
2 Centrado
Nota: los datos de tipo numrico deben alinearse a la derecha
EJERCICIO
Para cada etiqueta menos Fecha, haremos los siguientes texbox:

Nombre del Empleado:

Direccin

Sueldo Mensual

Telefono

Estado civil

Propiedad
Nombre:
Maxlen
Tabindex
Nombre
Maxlen
Tabindex
Nombre
Maxlen
Tabindex
Nombre
Maxlen
Tabindex
Nombre
Maxlen
Tabindex

TXTNOMBRE
40
1
TXTDIRECCION
150
2
TXTSUELDO
10
3
TXTTELEFONO
20
4
TXTESTADOCIVIL
1
5

Sexo

Departamento

Sucursal

Sindicato

Nombre
Maxlen
Tabindex
Nombre
Maxlen
Tabindex
Nombre
Maxlen
Tabindex
Nombre
Maxlen
Tabindex

TXTSEXO
1
6
TXTDEPARTAMENTO
2
7
TXTSUCURSAL
2
8
TXTSINDICATO
1
9

En cada nuevo textbox la propiedad Text debe ir en blanco


En el textbox TXTSUELDO debe trabajarse la propiedad Alignment e indicar alineamiento
a la derecha por ser un dato numrico.
Al terminar el ejercicio, su pantalla debe verse de la siguiente manera:

El resto de propiedades del control textbox se vern a medida avancemos en los


siguientes captulos.

Gua de trabajo Captulo No. 5


1. Qu es un Label
2. Indique qu hacen las siguientes propiedades del command button:
Name
Caption
BorderStyle
Font
3. Qu es un Textbox
4. Indique qu hacen las siguientes propiedades del command button:
Name
Text
Maxlen
Appearance
Tabindex
Alignment
5. Haga en el formulario Frmcli los siguientes label:
Cdigo del cliente
Nombre del cliente
Contacto
Direccin
Fecha
Crdito Mximo
Tipo de cliente
Telfono
Paga impuesto S/N
Vendedor
Categora
Area
6. Para los label del inciso 5 haga los siguientes textbox: (N)= numrico

Cdigo del cliente


Nombre del cliente
Contacto

Name
TXTCODCLI
TXTNOMCLI
TXTCONTACTO

Maxlen
10
50
50

Tabindex
0
1
2

Direccin
Fecha
Crdito Mximo
Tipo de cliente
Telfono
Paga impuesto S/N
Vendedor
Categora
Area

TXTDIRECCION

150

TXTCREDITOMAX
TXTTIPOCLIENTE
TXTTELEFONO
TXTPAGAIMPUESTO
TXTVENDEDOR
TXTCATEGORIA
TXTAREA

10
1
20
1
10
1
1

5
6
7
8
9
10
11

(N)

7. Haga en el formulario Frmart los siguientes label:


Cdigo del Artculo
Nombre del Artculo
Fecha
Existencia
Mximo
Mnimo
Precio Unitario
Costo Unitario
Paga impuesto S/N
Lnea
Unidad
Tipo de producto
Tipo de proveedor
8. Para los label del inciso 7 haga los siguientes textbox: (N)= numrico

Cdigo del Artculo


Nombre del Artculo
Fecha
Existencia
Mximo
Mnimo
Precio Unitario
Costo Unitario
Paga impuesto S/N
Lnea
Unidad
Tipo de producto
Tipo de proveedor

Name
TXTCODIGO
TXTNOMBRE

Maxlen
10
100

Tabindex
0
1

TXTEXISTENCIA
TXTMAXIMO
TXTMINIMO
TXTPRECIO
TXTCOSTO
TXTPAGAIMPUESTOP
TXTLINEA
TXTUNIDAD
TXTTIPOPRODUCTO
TXTTIPOPROVEEDOR

10
10
10
10
10
1
4
4
1
1

3
4
5
6
7
8
9
10
11
12

9. Haga en el formulario Frmfac los siguientes label:


No. Factura
Fecha
Cliente
Vendedor
Sucursal
Tipo de Factura

(N)
(N)
(N)
(N)
(N)
(N)

Paga Impuesto S/N


Subtotal
Descuento
Impuesto
Total
Plazo
Tarjeta de crdito
10. Para los label del inciso 9 haga los siguientes textbox: (N)= numrico

No. Factura
Fecha
Cliente
Vendedor
Sucursal
Tipo de Factura
Paga Impuesto S/N
Subtotal
Descuento
Impuesto
Total
Plazo
Tarjeta de crdito

Name
TXTFACTURA

Maxlen
10

Tabindex
0

TXTCLIENTE
TXTVENDEDOR
TXTSUCURSAL
TXTTIPOFACTURA
TXTPAGAIMPUESTO
TXTSUBTOTAL
TXTDESCUENTO
TXTIMPUESTO
TXTTOTALNETO
TXTPLAZO
TXTTARJETACREDITO

10
10
2
2
1
10
10
10
10
10
1

2
3
4
5
6
7
8
9
10
11
12

(N)
(N)
(N)
(N)
(N)

Captulo 6
Fechas, Barras de Estado y Eventos
I.

Objetivo General
Conocer la funcin de los Masked edit, Statusbar y Eventos

II.

Objetivos especficos
Disear en los formularios los Masked edit para las casillas de fechas,
las barras de estado necesarios y conocer las propiedades de ambos
as como iniciar el estudio del concepto de eventos.

III.

Contenido
1. Qu es un Masked edit
2. Propiedades de los Masked edit
3. Qu es un Statuslbar
4. Propiedades de los Statusbar
5. Eventos
6. Evento Gotfocus
7. Evento Keyprees
8. Efecto de iluminado - Sendkeys

1. Qu es un Masked edit
Este control sirve para manejar casillas con determinado formato; en nuestro caso lo
usaremos para manejar las fechas. No est disponible en la seccin de controles por lo
tanto es necesario integrarlo a la seccin de controles: haga los pasos pertinentes para
integrar el componente Microsoft Masked edit Control 6.0
Al estar este control en la seccin de controles usted lo puede reconocer por la siguiente
figura:

Pegue un masket Edit a la par del label: fecha de ingreso


2. Propiedades del Masked edit
a. Propiedad Name
Esta propiedad sirve para dar nombre al Masked edit; vaya a la propiedad Name, y
escriba como nombre: TXTFECHAINGRESO

b. Propiedad Mask
Esta propiedad sirve para dar un formato a la casilla; como se trata de una fecha le
daremos un formato de fecha larga; vaya a esta propiedad y escriba lo siguiente: ##/##/
#### (no hay espacios intercalados). Al escribir el formato presione la tecla enter; la
casilla debe verse as:

Al correr su aplicacin debe verse de esta manera:

c. Propiedad Heigth
Esta propiedad sirve para dar una anchura determinada a la casilla; si usted nota la casilla
de la fecha de ingreso no tiene la misma anchura que las otras casillas; para dejar la
misma anchura a la casilla Fecha de ingreso, vaya a la propiedad Height de cualquier otra
casilla y anote el No. que encuentre, y ese mismo No. introdzcalo en la propiedad Height
de la casilla Fecha de inghreso.
3. Qu es un Statusbar
Este control sirve para crear barras de estado. En toda aplicacin para Windows se tiene
barras de estado para indicar mensajes, la hora, la fecha y otros. Este control no est
disponible en la seccin de controles por lo tanto es necesario integrarlo a la seccin de
controles: haga los pasos pertinentes para integrar el componente Microsoft Windows
common controls 6.0; este componente genera varias figuras y entre ellas est el
Statusbar; usted puede reconocerlo por la siguiente figura:

Pegue un Statusbar en la parte inferior de su formulario (no sobre el tabbed dialog); basta
con que haga un pequeo remarcado y automticamente cubre a lo largo del formulario;
al correr su aplicacin debe quedarle as:

4. Propiedades del Statusbar


a. Propiedad Name
Esta propiedad sirve para dar nombre al Statusbar; vaya a la propiedad Name, y escriba
como nombre: BARRAESTADO
Un statusbar est compuesto por paneles (divisiones de la barra de estado);
automticamente le aparece un solo panel, pero usted puede agregar mas paneles; en la
leccin donde el tema sea el men principal de la aplicacin se necesitar agregar mas de
un panel; por ahora solo necesitamos uno; ya que usaremos un solo panel, queremos que
el panel cubra el ancho de la barra de estado; para ampliar el ancho del panel haga clic
derecho sobre el statusbar y le aparecer la siguiente pantalla:

Haga clic en la opcin Properties; le aparecer esta otra pantalla:

Haga clic en la gua o tabulador: Panels; cambiar a esta pantalla:

Cambie el valor 1440.00 por 11500.00, luego presione el botn Aceptar.


Su statusbar debe verse as:

Nota: si todava el panel no cubre el ancho de su status bar, repita el procedimiento


anterior y en vez de 11500, pruebe con un valor mayor.
5. Eventos
Son rutinas especificas de programacin, las cuales se ejecutan cuando se da cierta
situacin:
Tipos de eventos
Tenemos los siguientes eventos:
Gotfocus: Se activa cuando el cursor se posiciona en un objeto
Lostfocus: Se activa cuando el cursor abandona un objeto
Change: Se activa en el momento que se esta tecleando sobre el objeto cuando este
recibe datos
Click: Se activa en el momento que se hace clic sobre el objeto
Dblclick: Se activa en el momento que se hace doble clic sobre el objeto
No todos los objetos tienen los mismos eventos, pero en su mayora tienen mas menos el
60% los mismos ventos.
6. Evento GotFocus
Se activa cuando el cursor se posiciona en un objeto; necesitamos de este evento para
lograr nuestro siguiente objetivo: queremos que cada vez que el cursor salta a una casilla
aparezca un mensaje especfico en la barra de estado.

Ejercicio: queremos que cuando el cursor est en la casilla TXTCODIGO (Cdigo del
empleado) aparezca en la barra de estado el siguiente mensaje:
Cdigo del empleado: teclee 10 caracteres como mximo
Siga los siguientes pasos:
a. Haga doble clic sobre la casilla Cdigo del empleado; le aparecer la siguiente
pantalla:

El evento que le aparece es el evento Change; pero el evento que necesitamos es el


evento GotFocus; para cambiar de evento abra el combo que tiene la palabra Change:
(ver parte superior derecha)

Al abrir el combo le aparece una lista con los diferentes eventos:

Haga clic en la opcin que dice: Gotfocus; le aparecer lo siguiente:

b. Escriba lo siguiente:
BARRAESTADO.PANELS(1).TEXT= Cdigo del empleado: teclee 10 caracteres como mximo

Esta instruccin lo que hace es poner el rtulo: Cdigo del empleado: teclee 10
caracteres como mximo, en la propiedad text del primer panel del statusbar llamado
BARRAESTADO.
Slgase de esta pantalla y corra su aplicacin; al estar el cursor en la casilla Cdigo del
empleado, la barra de estado mostrar lo siguiente:

Ejercicio: queremos que cuando el cursor est en la casilla TXTNOMBRE (Nombre del
empleado) aparezca en la barra de estado el siguiente mensaje:
Nombre del empleado: teclee 40 caracteres como mximo; primero nombres, luego
apellidos
Siga los siguientes pasos:
a. Haga doble clic sobre la casilla Nombre del empleado del empleado; le
aparecer la siguiente pantalla:

El evento que le aparece es el evento Change; pero el evento que necesitamos es el


evento GotFocus; para cambiar de evento abra el combo que tiene la palabra Change:
(ver parte superior derecha)

Al abrir el combo le aparece una lista con los diferentes eventos:

Haga clic en la opcin que dice: Gotfocus; le aparecer lo siguiente:

b. Escriba lo siguiente:
BARRAESTADO.PANELS(1).TEXT= Nombre del empleado: teclee 40 caracteres como mximo; primero
nombres, luego apellidos

Esta instruccin lo que hace es poner el rtulo: Nombre del empleado: teclee 40
caracteres como mximo; primero nombres, luego apellidos, en la propiedad text del
primer panel del statusbar llamado BARRAESTADO.
Slgase de esta pantalla y corra su aplicacin; al estar el cursor en la casilla Nombre del
empleado, la barra de estado mostrar lo siguiente:

Nota: Haga para cada textbox o casilla de datos un mensaje en el evento Gotfocus; usted
elija qu mensaje desea escribir.
7. Evento Keyprees
Se activa cuando se teclea cualquier carcter en la casilla de datos (textbox); necesitamos
de este evento para lograr nuestro siguiente objetivo: queremos que en ninguna casilla se
acepte el apstrofe o comillas simples ni las comillas dobles; esto es porque ambos son
caracteres reservados de Visual Basic.
Ejercicio: queremos que la casilla TXTCODIGO (cdigo del empleado no permita el
apstrofe o comillas simples ni las comillas dobles.
Siga los siguientes pasos:
a. Abra el evento Keyprees de la casilla Cdigo del empleado; le aparecer la siguiente
pantalla:

b. Escriba lo siguiente:
If Keyascii = 39 or Keyascii = 34 then
Keyascii = 0
End If

Note que son tres lneas de programacin:


39 es el carcter ascii para el apstrofe o comilla simple ()
34 es el carcter ascii para la comilla doble ()
Keyascii = 0 lo que hace es inhabilitar el teclado; esto se hace cuando el carcter ascii
detectado es 39 (apstrofe) o 34 (comilla doble)
Nota: Este mismo bloque de programacin de tres lneas debe escribirse en todos los
eventos keyprees de todas las casillas.
8. Efecto de iluminado
Es cuando en una casilla se tiene datos y queremos que al posicionarnos en ella los datos
tengan el efecto de iluminado; en toda aplicacin para Windows las casillas de datos
tienen este efecto; note lo siguiente:

Note que el dato del cdigo del empleado tiene el efecto de iluminado; este efecto es muy
importante pues de querer eliminar el dato bastara con presionar la tecla Delete; o si
queremos cambiar el dato bastara con escribir sobre el dato iluminado.
Para conseguir nuestro objetivo debemos trabajar en el evento GotFocus; abra el evento
gotfocus de cada casilla, y agregue la siguiente lnea:
SendKeys {Home}+{End}
Cuando abra el evento gotfocus ya encontrar una lnea de cdigo; puede escribir la
nueva lnea de cdigo antes o despus de la que encuentre.

Gua de trabajo Captulo No. 6

1.-Aplique al formulario FRMCLI los siguientes aspectos:


-

Fecha: TXTFECHA Masked edit


Haga la barra de estado y escriba un mensaje para cada casilla de datos (evento
gotfocus)
Programe el evento keypress para evitar teclear el carcter apostrofe y las comillas
dobles
Para cada casilla de datos programe el efecto de iluminado para cada casilla de
datos (evento gotfocus)

2.-Aplique al formulario FRMARTIC los siguientes aspectos:


-

Fecha: TXTFECHA Masked edit


Haga la barra de estado y escriba un mensaje para cada casilla de datos (evento
gotfocus)
Programe el evento keypress para evitar teclear el carcter apostrofe y las comillas
dobles
Para cada casilla de datos programe el efecto de iluminado para cada casilla de
datos (evento gotfocus)

3.-Aplique al formulario FRMFAC los siguientes aspectos:


-

Fecha: TXTFECHA Masked edit


Haga la barra de estado y escriba un mensaje para cada casilla de datos (evento
gotfocus)
Programe el evento keypress para evitar teclear el carcter apostrofe y las comillas
dobles
Para cada casilla de datos programe el efecto de iluminado para cada casilla de
datos (evento gotfocus)

Captulo 7
Combobox, OptionButton y Checkbox
I.

Objetivo General
Conocer la funcin de los ComboBox, OptionButton y CheckBox

II.

Objetivos especficos
Disear en los formularios los combobox, Optionbox y Checkbox
necesarios y conocer sus propiedades

III.

Contenido
1. ComboBox
2. Frame
3. OptionButton
4. CheckBox

En este Captulo manejaremos el concepto visual en el diseo de pantallas o formularios.


Como siempre, trabajaremos con el formulario FRMEMPLE.
1. ComboBox
Este control sirve para hacer una lista de seleccin; puede reconocerlo en la seccin de
controles por la siguiente figura:

En nuestro caso, usaremos un combobox para el estado civil de la persona. Pegue un


combobox a la par del textbox TXTESTADOCIVIL; debe quedarle as:

Trataremos las siguientes propiedades:


Name:
Style

COMBOESTADOCIVIL
2-DROPDOWN

La propiedad Style con el valor 2 DropDown es para que los elementos de la lista del
combo no puedan modificarse ni borrarse.
Lista de elementos en un combobox

Para introducir elementos dentro de combo hacemos los siguientes pasos:


-

Vaya a la propiedad List

Entre al combo que nos aparece

Al entrar al combo nos aparece un pequeo recuadro en blanco

Escriba lo siguiente: Soltero


Presione la tecla enter
Repita el procedimiento para introducir los siguientes elementos a la lista:
Casado
Divorciado
Viudo
Otro

Corra su formulario
Ahora programaremos que al seleccionar un item del combo, la seleccin aparezca
reflejada en el textbox TXTESTADOCIVIL, es decir si seleccionamos Soltero, debe
aparecer un 1, si seleccionamos Casado, debe aparecer un 2 y as sucesivamente.
Entre al evento clic del combo (COMBOESTADOCIVIL) y escriba lo siguiente:
Select case COMBOESTADOCIVIL.listindex
Case 0
Txtestadocivil= 1
Case 1
Txtestadocivil= 2
Case 2
Txtestadocivil= 3
Case 3
Txtestadocivil= 4
Case 4
Txtestadocivil= 5
End Select

En este momento cabe explicar cmo se manejan los item en un combobox; Listindex
indica el elemento de la lista, y el primer elemento de la lista corresponde al listindex = 0;
esto indica que nuestros item tienen la siguiente asignacin:
Listindex = 0 Soltero
Listindex = 1 Casado
Listindex = 2 Divorciado
Listindex = 3 Viudo
Listindex = 4 Otro

Corra su formulario y seleccione cualquier estado civil


Ahora haremos la operacin inversa; cuando se introduzca el numero 1 en la casilla
TXTESTADOCIVIL debe aparecer el elemento Soltero en el combo; si introduce el
numero 2 en la casilla TXTESTADOCIVIL debe aparecer el elemento Casado en el
combo, y as sucesivamente con los dems elementos
Entre al evento Change de TXTESTADOCIVIL y escriba lo siguiente:
Select Case TXTESTADOCIVIL
Case 1
Comboestadocivil.ListIndex = 0
Case 2
Comboestadocivil.ListIndex = 1
Case 3
Comboestadocivil.ListIndex = 2
Case 4
Comboestadocivil.ListIndex = 3
Case 5
Comboestadocivil.ListIndex = 4
End Select
Ahora queremos que oculte la casilla TXTESTADOCIVIL, ya que el usuario debe tener
acceso solo al combo. Para ocultar un textbox vaya a la propiedad visible del textbox
(TXTESTADOCIVIL) y cambie el valor a False. Finalmente deje el combo al lado
izquierdo y el texbox al lado derecho, as:

Cuando la codificacin de los elementos de lista no son numricos


En nuestro ejercicio la codificacin del estado civil se maneja numrico, pero podra
manejarse por letras, de la siguiente manera:

Soltero = S
Casado = C
Divorciado = D
Viudo = V
Otro = O
La estructura de la programacin de los eventos no cambia, pero hay una pequea
diferencia.
La programacin del evento clic del combo sera la siguiente:
Select case COMBOESTADOCIVIL.listindex
Case 0
Txtestadocivil= S
Case 1
Txtestadocivil= C
Case 2
Txtestadocivil= D
Case 3
Txtestadocivil= V
Case 4
Txtestadocivil= O
End Select

La programacin del evento change del textbox sera la siguiente:


Select Case ucase(TXTESTADOCIVIL)
Case S
Comboestadocivil.ListIndex = 0
Case C
Comboestadocivil.ListIndex = 1
Case D
Comboestadocivil.ListIndex = 2
Case V
Comboestadocivil.ListIndex = 3
Case O
Comboestadocivil.ListIndex = 4
End Select
Note el agregado de la funcin Ucase; esta funcin convierte a mayscula; si se introduce
la S en minscula (s) se convierte a Mayscula, pues la comparacin se hace contra la S
mayscula (Case S)
2. Frame
Este control sirve para crear marcos que a la vez contendrn otros objetos; usualmente se
usan para enmarcar objetos llamados OptionButton; puede reconocer el frame por la
siguiente figura:

Pegue un frame a la par del textbox TXTSEXO.


Para este control solo manejaremos una propiedad; vaya a la propiedad Caption y borre la
palabra que encuentre; en otros casos lo que haremos ser cambiar la palabra que se
encuentre; finalmente debe quedarle de la siguiente manera:

3. Optionbutton
Este control sirve para manejar una lista de opciones visibles; a veces queremos que el
usuario pueda ver las diferentes opciones de las cuales dispone, y en tal caso el
combobox no nos ayuda; en nuestro caso el dato del sexo ser manejado con este
control, el cual puede reconocer en la seccin de controles por la siguiente figura:

Pegue un optionbutton a la par del textbox TXTSEXO, dentro del frame; debe quedarle
as:

Trabajaremos las siguientes propiedades:


Name
Caption

OPCIONM
Masculino

Pegue otro optionbuttom a la par del option que ya est puesto; debe quedarle as:

Trabajaremos las siguientes propiedades:


Name
Caption
Finalmente debe quedarle as:

OPCIONF
Femenino

Ahora programaremos que si hacemos clic en Masculino, debe aparecer una M


(mayscula) en la casilla TXTSEXO.
Entre el evento clic de OPCIONM y escriba lo siguiente:
Select Case Opcionm.Value
Case Is=true
Txtsexo= M
End Select
De igual manera programaremos que si hacemos clic en Femenino, debe aparecer una F
(mayscula) en la casilla TXTSEXO. Entre al evento clic de OPCIONF y escriba lo
siguiente:
Select Case OpcionF.Value
Case Is=True
Txtsexo= F
End Select

Corra su formulario y juegue seleccionando uno y otro


Note usted que los OptionButton son excluyentes entre ellos (Si uno est activo el otro
estar inactivo)
Ahora haremos la operacin inversa; cuando se introduzca la letra M en la casilla
TXTSEXO debe aparecer seleccionado Masculino, y cuando se introduzca la letra F en la
casilla TXTSEXO, debe aparecer seleccionado Femenino.
Entre al evento Change de TXTSEXO y escriba lo siguiente:
Select Case UCASE(TXTSEXO)
CASE M
OPCIONM.VALUE=TRUE
Case F
OPCIONF.VALUE=TRUE
End Select
Ahora queremos que oculte la casilla TXTSEXO, ya que el usuario debe tener acceso solo
a los optionbuttom. Para ocultar un textbox vaya a la propiedad visible y cambie el valor a
False. Finalmente deje los optionbutton al lado izquierdo y el textbox al lado derecho, as:

4. Checkbox
Este control sirve para hacer una caja de chequeo; puede reconocerlo en la seccin de
controles por la siguiente figura:

Lo utilizaremos para aquellos casos cuando la respuesta sea SI o NO; en nuestro caso lo
usaremos para Sindicato S/N.
Pegue un checkbox a la par del textbox TXTSINDICATO; debe quedarle as:

Trabajaremos las siguientes propiedades:


Name
Caption

CHSINDICATO
Dejarlo en Blanco

Ahora programaremos que si hacemos clic en el checkbox y lo dejamos con la marca de


chequeo, debe aparecer una S (mayscula) en la casilla de TXTSINDICATO; o si lo
dejamos sin la marca de chequeo, debe aparecer una N (mayscula) en la casilla
TXTSINDICATO. Entre al evento clic de CHSINDICATO y escriba lo siguiente:
Select Case CHSINDICATO.Value
Case 1
Txtsindicato= S
Case 0
Txtsindicato= N
End Select
Corra su formulario y juegue quitando y poniendo el chequeo
Ahora haremos la operacin inversa, cuando se introduzca la letra S en la casilla
TXTSINDICATO debe aparecer la marca de chequeo y cuando se introduzca la letra N en
la casilla TXTSINDICATO debe quitarse la marca de chequeo.
Entre al evento Change de TXTSINDICATO y escriba lo siguiente:

Select Case UCASE(TXTSINDICATO)


Case S
CHSINDICATO.VALUE=1
Case N
CHSINDICATO.VALUE=0
End Select
Corra su formulario y haga las pruebas para comprobar nuestro objetivo

Gua de trabajo Captulo No. 7


1. Aplique al formulario FRMCLI los siguientes aspectos
a. El Control Checkbox para: Paga Impuesto S/N
el checkbox debe llamarse: CHPAGAIMPUESTO
b. El Control OptionButton para: Tipo de cliente
Las opciones a manejar son las siguientes:
1 = Mayorista
2 = Detallista

==>
==>

OpcionM
OpcionD

c. El Control combobox para: Categora


La lista del combobox son las siguientes:
A = Excelente
B = Promedio
C = Malo
El combobox debe llamarse combocategoria
d. El Control combobox para: Area
La lista del combobox son las siguientes:
1 = Norte
2 = Centro
3 = Sur
El combobox debe llamarse comboarea
2. Aplique al formulario FRMART los siguientes aspectos
a. El Control Checkbox para: Paga Impuesto S/N
el checkbox debe llamarse: CHPAGAIMPUESTO
b. El Control OptionButton para: Tipo de Proveedor
Las opciones a manejar son las siguientes:
N = Nacional
E = Extranjero

==>
==>

OpcionN
OpcionE

c. El Control combobox para: Tipo de producto


La lista del combobox son las siguientes:
1 = Con vencimiento
2 = Sin Vencimiento
El combobox debe llamarse combotipoproducto
3. Aplique al formulario FRMFAC los siguientes aspectos
a. El Control Checkbox para: Paga Impuesto S/N
el checkbox debe llamarse: CHPAGAIMPUESTO
b. El Control OptionButton para: Tipo de Factura
Las opciones a manejar son las siguientes:
CR = Credito
CO = Contado

==>
==>

OpcionCR
OpcionCO

c. El Control combobox para: Tarjeta de credito


La lista del combobox son las siguientes:
1 = Credomatic
2 = Avalcard
El combobox debe llamarse combotarjetacredito

Captulo 8
ODBC
I.

Objetivo General
Conocer el concepto de ODBC

II.

Objetivos especficos
Crear la conexin ODBC y conectar los programas de nuestra aplicacin con
una base de datos

III.

Contenido
1. Qu es un ODBC
2. Creacin de un ODBC
3. Referencias (Remote Data Object); DLL
4. Variables de Conexin y Mdulos
5. Conexin a una base de datos

1. Qu es un ODBC
Un ODBC es la conexin a una base de datos; su nombre tiene el siguiente significado:
O
D
B
C

Object
Data
Base
Conexin

Objeto de Conexin de Base de Datos


Un ODBC debe compararse con un traductor; el OBDC se conecta a la base de datos y
nuestro programa se conecta al ODBC; funciona como el siguiente diagrama:
Aplicacin

ODBC

Base de Datos

Nunca nuestros programas se conectan con la base de datos, siempre lo hace por medio
del ODBC.
Esto tiene la gran ventaja de que el mismo programa (Visual Basic) puede trabajar con
cualquier base de datos si se tiene el ODBC adecuado; existe un ODBC distinto para
cada base de datos (Oracle, SQL Server, DB2 AS 400, Access, etc.)

Cada base de datos tiene una instalacin para el Servidor y otra para los clientes
(computadoras conectadas al servidor); cuando se instala la base de datos en el cliente,
se instala el ODBC de esa base de datos por si queremos usar un programa para
conectarse a la base de datos.
La programacin que se haga en Visual Basic debe ser una programacin con
instrucciones de SQL para que pueda trabajar en cualquier base de datos.
En nuestro caso nuestra base de datos en la que trabajaremos se encuentra en Access, y
el ODBC de Access se instala desde que se instala en la computadora cualquier versin
de Windows.
Debe tener bien claro que el concepto moderno de conexin es ODBC; los enlaces de
internet a bases de datos se hacen por medio de ODBC.
2. Creacin de un ODBC
Crearemos un ODBC para Access al que llamaremos Sistema el cual se conectar a una
base de datos llamada tambin Sistema que se encuentra en el subdirectorio Winsystem.
El nombre del ODBC no tiene que ser igual al nombre de la Base de Datos.
Para una mejor comprensin acerca de la creacin de un ODBC enumeraremos los
pasos:
a. Haga clic en Inicio (Windows)
b. Seleccione: Configuracin
c. Seleccione Panel de Control
d. Busque una lnea o cono que tenga la siguiente frase:
Fuente de Datos ODBC y haga doble clic sobre este cono

Nota: debe saber que si usted tiene un Windows 2000 profesional o XP,
Habr un paso antes del inciso d; debe entrar a una opcin que dice:
Herramientas de Administracin
Despus de hacer doble clic sobre el cono que dice Fuente de ODBC (ODBC Data
Sources), le aparecer la siguiente pantalla:

Figura 8.1
e. Debe presionar el botn Add (Agregar) para crear un ODBC; le aparecer la
siguiente pantalla

Figura 8.2

Note usted todos los tipos de ODBC que puede crear; el ODBC que crearemos es un ODBC de
Access, as que haga doble clic en la lnea que dice: Microsoft Access Driver.

Le aparecer la siguiente pantalla:

Figura 8.3
En esta pantalla tenemos dos casillas a las que introduciremos datos:

Data Source Name (Nombre del ODBC): escriba Sistema


Descripcin: esta casilla puede dejarla en blanco si desea, y no afecta; pero escriba lo
siguiente: ODBC para una aplicacin en Visual Basic
En esta misma pantalla presione el botn Select (seleccionar); esto es para seleccionar la
base de datos con la que conectaremos nuestro ODBC; debe aparecerle la siguiente
pantalla:

Figura 8.4

En el cuadro de dilogo de la derecha ubquese en el subdirectorio: c:\Winsystem;


automticamente le aparece en el cuadro de dilogo de la izquierda la base de datos:
Sistema

Figura 8.5
Ahora debe hacer dos cosas:

Haga clic sobre la base de datos para que quede seleccionada (no doble clic)
Presione el botn OK

Figura 8.6
Note que se regresa a la pantalla anterior, pero ya puede ver la base de datos con la
quedar conectada nuestro ODBC.
A partir de este momento presione cualquier botn que diga: OK o Aceptar
Nota: para crear un ODBC para otra base de datos algunos pasos cambiarn; cuando le
toque trabajar con otra base de datos debe investigar los pasos para crear el ODBC,
aunque debe saber que en una empresa grande donde se usa una base de datos robusta,
la creacin dl ODBC no le corresponde al programador sino al DBA (Administrador del
sistema).

3. Referencias (Remote Data Object); DLL


Existen en Visual Basic unos archivos llamados DLL, que sirven para poder realizar en
nuestra aplicacin determinadas tareas; por ejemplo, si queremos conectarnos a un
ODBC, necesitamos agregar a nuestro programa un archivo DLL llamado Microsoft
Remote Data Object.
Este archivo no se encuentra entre los componentes sino en la seccin de referencias; el
procedimiento para incorporar este archivo DLL es el siguiente:
a. En la seccin del Men de Visual Basic (ver parte superior) ingrese a la opcin:
Project
b. Le aparece un submen: ingrese a la opcin References; le aparecer la
siguiente pantalla:

Figura 8.7
En esta lista se encuentran todos los DLL de los que podemos disponer; busque en la
lista el archivo: Microsoft Remote Data Object 2.0; al encontrarlo mrquelo para
seleccin de la misma manera que selecciona un componente; luego presione el botn
Ok.
Lo que hemos activado, realmente es un tipo de conexin a un ODBC llamado RDO.
Existen otros dos tipos de conexin (DAO y ADO) pero son de menor efectividad.
4. Variables de Conexin y Mdulos
Una vez incorporado el DLL para trabajar con ODBC es necesario crear un par de
variables con las cuales haremos nuestra conexin. Para crear las variables de conexin
debemos crear un mdulo.

Qu es un mdulo

Es un archivo donde se crean las variables que sern usadas por la aplicacin desde
cualquier formulario (Globales).
En este punto debemos explicar el concepto de variables globales; las variables globales
a diferencia de la variables locales, pueden ser usadas desde cualquier punto de la
aplicacin; mientras que las variables locales (creadas en cada formulario) solo pueden
ser usadas en el formulario donde son creadas.
Cmo crear un Mdulo

a. En el men principal ingrese a Project


b. Ingrese a la opcin Add Module (Agregar mdulo); le aparecer la siguiente
pantalla:

Figura 8.8
c. Presione el botn Abrir (open) y le aparecer una pantalla en blanco; ya en este
momento el mdulo ha sido creado.
Para salirse de esta pantalla en blanco presione clic derecho y del men que le aparece
seleccione Hide.
Si usted nota, en la seccin del explorer ya le aparece el mdulo con el nombre: Module1

Ya creado el mdulo entramos a l (presione doble clic sobre el nombre del mdulo: Module1)

Le aparece de nuevo la pantalla en blanco; escriba lo siguiente:


Option explicit
Public Env As rdoenvironment
Public Con As rdoConnection
Al escribir las instrucciones slgase del mdulo.
Explicaremos cada instruccin:
- Option Explicit
Esta instruccin le indica al visual Basic que cada vez que se desee crear una variable,
sea definida con solo asignarle un valor. Para el caso si no usamos option Explicit, para
crear una variable numrica entera llamada Var1, tendramos que hacer lo siguiente:
Dim Var1 as integer
Var1 = 0
Al usar Option Explicit basta con escribir:
Var1 = 0
- Public Env As rdoenvironment
El nombre Env puede ser otro; esta variable nos ayuda a manejar los perifricos del
sistema (dispositivos de lectura y otros). Es una variable para manejar el medio ambiente
(del sistema)
- Public Con As rdoConnection
El nombre Con puede ser otro; esta variable nos ayuda a manejar la conexin con el
ODBC por medio de los perifricos que son controlados por la variable Env.

5. Conexin a una base de datos


Despus de crear las variables de conexin debemos hacer la conexin con la base de
datos; por ahora la conexin la haremos en el evento Load del formulario.
Evento Load del formulario
Si lo comparamos con la programacin tradicional diramos que es el inicio del programa;
cuando se corre un formulario, lo primero que se ejecuta es lo que se encuentra en el
evento Load del formulario.
Para entrar a este evento Load del formulario haga doble clic sobre un punto cualquiera
del formulario (no sobre el Tabbed dialog u otro objeto); le aparece el siguiente bloque:

Escriba las siguientes instrucciones:


Set Env = rdoEnvironments(0)
Set Con = Env.OpenConnection(Sistema,rddriverNoprompt)
Lo que est entre comillas es el nombre del ODBC, no el nombre de la base de datos.
Estas instrucciones de conexin deben estar en cada formulario; en el caso nuestro
deben estar en el evento Load de los formularios Frmcli, Frmart y Frmfac.
Si ha escrito correctamente las instrucciones anteriores y corre su programa notar que
se siente que se tarda un par de segundos, cosa que no suceda antes; esto es debido a
que al correr su aplicacin invierte tiempo en conectarse al ODBC.
En este momento cabe decir que el concepto del ODBC no es fcil asimilarlo; y se
complica mas por el hecho que el proceso de conectarse al ODBC se una sola vez y
nunca mas se repite, a menos que haga otra aplicacin.

Gua de trabajo Captulo No. 8


1. Que es un ODBC
2. Qu significa ODBC
3. Cree un ODBC llamado Datos conectado a la base de datos Contabilidad que
tambin se encuentra en el subdirectorio Winsystem
4. Cree un subdirectorio llamado Temp; dentro de este nuevo subdirectorio creen
en Visual Basic un nuevo proyecto al que llamar Prueba; en este nuevo
proyecto cree un formulario en blanco al que llamar PruebaODBC y conecte
este nuevo proyecto y formulario al ODBC Datos.
5. Qu es un mdulo
6. Qu significa la instruccin: Option Explicit
7. Qu es el evento Load del formulario
8. Qu es una variable Global
9. Qu es una variable local

Captulo 9
Lectura de Tablas de Datos
I.

Objetivo General
Conocer el concepto de Lectura de Tablas de datos

II.

Objetivos especficos
Leer una tabla de datos y manipular sus datos dentro de un formulario

III.

Contenido
1. Lectura de una tabla (Intruccin Select)
2. Variables RdoResultset
3. Lectura de tablas usando parmetros

1. Lectura de una tabla (Intruccin Select)


El objetivo de crear un ODBC es para poder accesar las tablas de la base de datos a la
que est conectado el ODBC; en nuestro caso la base de datos se llama SISTEMA; esta
base de datos es un conjunto de tablas necesarias para la administracin de una empresa
en lo referente a sus datos; en este libro tenemos como objetivo crear los programas y
reportes que controlen los siguientes aspectos: Recursos Humanos.
Con los conocimientos adquiridos en este curso usted debe ser capaz de hacer las
aplicaciones de Inventarios, Cuentas x Cobrar, Cuentas x Pagar, Contabiliad y Bancos, y
de esa manera tener un sistema completo que incluso se puede mercadear
Entre las tablas de la base de datos tenemos las siguientes:
Empleados:

Artculos:

Clientes:

Facturas:

En este curso aprenderemos instrucciones de SQL, que es el lenguaje de cualquier base


de datos.
La instruccin para leer los registros de una tabla es la instruccin Select. Para leer todos
los registros de la tabla empleados escribimos lo siguiente:
Select * from Empleados

El asterisco indica que se estn leyendo todas las columnas de la tabla. Tambin
podemos leer de la tabla solo ciertas columnas:
Select codigo,nombre from empleados
En esta instruccin solo estamos leyendo de la tabla las columnas o campos: codigo y
nombre.
Si queremos leer los datos slo del empleado con cdigo 006 escribimos:
Select * from Empleados where codigo=006
Nosotros podemos usar estas instrucciones e incorporarlas en Visual Basic; para
conseguir tal objetivo debemos conocer las variables de tipo RdoResultset
2. Variables RdoResultset
Una variable de tipo RdoResultset es una variable que sirve para leer tablas de datos;
este tipo de variables se crea de la siguiente manera:
Dim ZZ As RdoResultset
En donde ZZ es el nombre de la variable; una variable de tipo Rdoresultset es un arreglo
en dos dimensiones, columnas y filas; el No. de columnas que tendr ser de acuerdo a
las columnas que ha ledo de determinada tabla, y el No. filas depender de las filas o
registros ledos de la tabla.
Cmo indicamos qu tabla queremos que lea nuestra variable; para esto hacemos uso de
la clusula Set.
Si queremos que nuestra variable lea el codigo y nombre de la tabla empleados
escribimos lo siguiente:
Set ZZ = Con.Openresultset(Select codigo,nombre from Empleados, rdopenDynamic )

De esta instruccin debemos explicar varias cosas:


a. RdopenDynamic le indica al visual Basic que no abra la tabla de forma
exclusiva, es decir, que otros usuarios puedan leer la tabla al mismo tiempo.
Nuca lea una tabla sin esta instruccin; provocara que el programa se le
trunque al otro usuario que trata de leer la misma tabla.
b. La instruccin Select debe ir entre comillas dobles
c. La instruccin Select es enviada al ODBC por medio de la variable Con, que
como usted ya estudi en el captulo anterior nos conecta con el ODBC. Luego
el ODBC enva la instruccin a la base de datos; cuando el ODBC recibe de
vuelta los resultados estos son guardados en la variable ZZ.

En este momento cabe responder la siguiente pregunta: Cuntas columnas tiene la


variable ZZ; pues tiene el nmero de columnas que ley con la instruccin Select (codigo
y nombre). Cuntas filas tiene la variable ZZ; en este caso tiene como nmero de filas, el
No. de registros de la tabla Empleados.
Qu ocurre si la instruccin de lectura fuera la siguiente:
Set ZZ = Con.Openresultset(Select codigo,nombre from Empleados where codigo=006 ,
rdopenDynamic)

Siempre tendra dos columnas, y si encontr datos del empleado 006 tendra una fila.
Para hacer referencia a una u otra columna lo hacemos de la siguiente manera:
ZZ!codigo hace referencia al dato codigo
ZZ!Nombre hace referencia al dato nombre
Podemos hacer una lectura y no recibir como respuesta informacin; para el caso en la
instruccin del Set anterior, si no hubiese ningn empleado con codigo 006, la variable ZZ
estara vaca. Para preguntar si la variable ZZ est vaca (sin datos) lo haramos de la
siguiente manera:
If ZZ.Eof Then
Otro aspecto muy importante es el hecho que al final de un proceso siempre hay que
dejar cerrada una variable Rdoresultset, pues la clusula Set la abre ( Openresultset); para
cerrar una variable de tipo Rdoresultset lo hacemos as:
ZZ.Close
3. Lectura de tablas usando parmetros
Notemos de nuevo la siguiente instruccin:
Set ZZ = Con.Openresultset(Select codigo,nombre from Empleados where codigo=006 ,
rdopenDynamic)

Como dijimos anteriormente esta instruccin lee los datos del empleado con codigo 006.
Ahora imagnese que tenemos un textbox llamado TXTCODIGO y otro llamado
TXTNOMBRE.
Queremos leer los datos del empleado cuyo codigo est en el texbox TXTCODIGO; esto
sera una lectura parametrizada; la instruccin sera la siguiente:

Set ZZ = Con.Openresultset(Select codigo,nombre from Empleados where codigo= &


TXTCODIGO & , rdopenDynamic)

Pareciera que hay un espacio entre el apstrofe (comilla simple) y la doble comilla, pero
no es as, tenga el cuidado de no dejar dicho espacio cuando le toque usar esta
instruccin.
Dependiendo de lo que tenga el textbox TXTCODIGO, ese ser el empleado ledo.
Cul sera la instruccin para asignar al textbox el dato del nombre desde la variable ZZ;
al tener los datos del empleado cuyo codigo est en el textbox TXTCODIGO, la
asignacin del nombre en el textbox TXTNOMBRE sera de la siguiente manera:
TXTNOMBRE = ZZ!nombre
Esta instruccin anterior tiene un serio problema; si el empleado fue encontrado pero el
nombre est vaco (sin datos), la instruccin anterior truncara el programa; as que antes
de hacer la asignacin debemos preguntar si ZZ!nombre est vacio (nulo); lo correcto es
hacer la asignacin de la siguiente manera:
If Not Isnull(ZZ!nombre) then
TXTNOMBRE = ZZ!nombre
End if
Lo anterior se explica de la siguiente manera:
Si ZZ!nombre no es nulo entonces asigne el nombre a txtnombre; en caso de que
ZZ!nombre es nulo la asignacin no se hara.
Ya estamos listos para aplicar todo este conocimiento en un ejercicio prctico;
programaremos en el formulario Frmemple, que al introducir el cdigo del departamento
aparezca el nombre del departamento; si no encuentra el departamento debe aparecerle
un rtulo que diga: NO EXISTE
Necesitamos que primero pegue un nuevo textbox (TXTNOMDEPARTAMENTO) a la par
del textbox TXTDEPARTAMENTO; debe quedarle de la siguiente manera:

Este textbox (TXTNOMDEPARTAMENTO) debe tener la propiedad Text en blanco, y la


propiedad Locked en True (por default la trae en false); con la propiedad Locked = true, el
textbox queda protegido, es decir, no se puede modificar; es un dato solo de consulta.

Antes de hacer la rutina que queremos es necesario conocer la estructura de la tabla


Departamentos:

Programaremos nuestra rutina en el evento Change de TXTDEPARTAMENTO; la razn


de programar en este evento es porque el evento change se activa en el momento de que
se introducen datos en la casilla, y precisamente lo que queremos es que en el momento
en que se introduzca el cdigo del departamento se haga la bsqueda en la tabla
Departamentos; entre a este evento y escriba las siguientes instrucciones:
Dim ZZ As RdoResultset
Set ZZ = Con.Openresultset(Select codigo,nombre from Departamentos where codigo= &
TXTDEPARTAMENTO & , rdopenDynamic)
If ZZ.EOF Then
TXTNOMDEPARTAMENTO = NO EXISTE
ZZ.CLOSE
Exit Sub
End if
If Not Isnull(ZZ!nombre) then
TXTNOMDEPARTAMENTO = ZZ!nombre
End if
ZZ.Close

Nota: La instruccin Set ZZ debe ir en una sola lnea; por cuestin de espacio en nuestro
texto lo hacemos en dos lneas. Pero si usted desea hacerlo en dos lneas, debe indicar la
continuacin con el guin largo ( _ ) as:
Set ZZ = Con.Openresultset(Select codigo,nombre from Departamentos where codigo= & _
TXTDEPARTAMENTO & , rdopenDynamic)

Corra su programa e introduzca cdigos de departamentos; pruebe con los siguientes


cdigos: 01, 02, 03, 04 y 05
Ejercicio:
Queremos que al introducir el cdigo de la sucursal aparezca el nombre de la sucursal; si
no encuentra la sucursal debe aparecerle un rtulo que diga: NO EXISTE
Necesitamos que primero pegue un nuevo textbox (TXTNOMSUCURSAL) a la par del
textbox TXTSUCURSAL; debe quedarle de la siguiente manera:

Este textbox (TXTNOMSUCURSAL) debe tener la propiedad Text en blanco, y la


propiedad Locked en True (por default la trae en false); con la propiedad Locked = true, el
textbox queda protegido, es decir, no se puede modificar; es un dato solo de consulta.
Antes de hacer la rutina que queremos es necesario conocer la estructura de la tabla
Sucursales:

Programaremos nuestra rutina en el evento Change de TXTSUCURSAL; la razn de


programar en este evento es porque el evento change se activa en el momento de que se
introducen datos en la casilla, y precisamente lo que queremos es que en el momento en
que se introduzca el cdigo de la sucursal se haga la bsqueda en la tabla Sucursales;
entre a este evento y escriba las siguientes instrucciones:
Dim ZZ As RdoResultset
Set ZZ = Con.Openresultset(Select codsuc,nomsuc from Sucursales where codsuc= &
TXTSUCURSAL & , rdopenDynamic)
If ZZ.EOF Then
TXTNOMSUCURSAL = NO EXISTE
ZZ.CLOSE
Exit Sub
End if
If Not Isnull(ZZ!nomsuc) then
TXTNOMSUCURSAL = ZZ!nomsuc
End if
ZZ.Close

Nota: La instruccin Set ZZ debe ir en una sola lnea; por cuestin de espacio en nuestro
texto lo hacemos en dos lneas. Pero si usted desea hacerlo en dos lneas, debe indicar la
continuacin con el guin largo ( _ ) as:
Set ZZ = Con.Openresultset(Select codsuc,nomsuc from Sucursales where codsuc= & _
TXTSUCURSAL & , rdopenDynamic)

Corra su programa e introduzca cdigos de Sucursales; pruebe con los siguientes


cdigos: 01, 02, 03 y 04

Gua de trabajo Captulo No. 9


1. Qu hace la instruccin Select
2. Qu es una variable de tipo RdoResultset
3. Suponga que queremos crear una variable de tipo rdoresultset llamada dd;
conteste las siguientes preguntas
a.
b.
c.
d.

Cmo se creara la variable dd


Cmo se asignara la lectura de la tabla articulos a la variable dd
Cmo se preguntara si la variable dd esta vaca (sin datos)
Cmo se cerrara la variable dd

4. En el formulario Frmcli haga que al introducir el cdigo del vendedor aparezca


el nombre del vendedor
5. En el formulario Frmart haga lo siguiente:
a. Que al introducir el cdigo de la lnea aparezca el nombre de la lnea
b. Que al introducir el cdigo de la unidad aparezca el nombre de la unidad
6. En el formulario Frmfac haga lo siguiente:
a. Que al introducir el cdigo del cliente aparezca el nombre del cliente
b. Que al introducir el cdigo del vendedor aparezca el nombre del
vendedor
c. Que al introducir el cdigo de la sucursal aparezca el nombre de la
sucursal

Captulo 10
Subrutinas, Inicializar Datos y Agregar Registro
I.

Objetivo General
Conocer el concepto de Subrutinas y Agregar Registro en una Tabla de datos

II.

Objetivos especficos
Crear subrutinas; crear la subrutina para limpiar los datos de la pantalla de
captura de datos; programar el botn Cancelar y el botn Agregar de la
aplicacin de empleados

III.

Contenido
1. Crear subrutinas (Private Sub)
2. Subrutina Inicializar datos
3. Programacin Botn Cancelar
4. Programacin Botn Agregar (Insert)
5. Instruccin Con.Committrans

1.- Crear subrutinas (Private Sub)


En una aplicacin es necesario la creacin de subrutinas; una subrutina es un bloque de
programacin que puede ser llamado desde cualquier punto del programa.
La razn de crear una subrutina es porque nos evita la repeticin de un grupo de
instrucciones que se ejecutan en varias partes del programa; esto nos lleva al hecho de
que una subrutina tiene el siguiente esquema:
Procedimiento convencional:
Linea programacin
Linea programacin
A= 2
B= 3
C= 0
A= (B+C)/2
Linea programacin
Linea programacin
A= 2
B= 3
C= 0
A= (B+C)/2
Linea programacin
Linea programacin

Procedimiento con subrutinas:


Linea programacin
Linea programacin
Llamar subrutina
Linea programacin
Linea programacin
Llamar subrutina
Linea programacin
Linea programacin
Inicio de Subrutina
A=2
B=3
C=0
A=(B+C)/2
Fin de subrutina

La programacin por medio de subrutinas es llamada programacin estructurada; en


Visual Basic las subrutinas tienen el siguiente formato:
Private Sub Nombre-de-subrutina()

End Sub

En donde:

Private Sub : inddica el inicio


Nombre-de-subrutina() : es el nombre de la subrutina; el nombre no debe tener espacios
intercalados; si usa varias palabras para indicar el nombre de la subrutina, deben estar
unidas por el guin largo o bajo ( _).
End Sub : Indica el fin de la subrutina
Cmo llamar una subrutina
Para llamar una subrutina desde cualquier punto del programa basta con escribir el
nombre de la subrutina sin el doble parntesis.
2. Subrutina Inicializar datos
Haremos una subrutina llamada DATOSINICIALES; esta subrutina tendr como objetivo
limpiar los datos de la pantalla de los datos de los empleados en el formulario Frmemple;
en algunos casos no limpiar los datos, sino que le dar un valor inicial o por default ;
para el caso, queremos que la casilla sexo de entrada tenga el valor F (Femenino); la
casilla del estado civil que tenga de entrada el valor 1 (Soltero); la casilla sindicado que
tenga de entrada el valor S. Las subrutinas se pueden escribir en cualquier punto de la
pantalla de edicin de cdigo, pero sugerimos que se escriban al final del programa; haga
doble clic en cualquier punto del programa y presione la tecla Page Down (Avanzar
pgina) hasta llegar al final de la pgina de edicin de cdigo y en un punto en blanco
escriba lo siguiente:
Private Sub DATOSINICIALES( )
Al presionar enter, Visual Basic automticamente cierra la rutina:
Private Sub DATOSINICIALES( )
End Sub

Y le deja el espacio para escribir las instrucciones que desee; escriba las siguientes
instrucciones: (R001)

Txtnombre=empty
TxtDireccion=Empty
TxtFechaingreso=__/__/____
TxtSueldo=Empty
TxtTelefono=Empty
TxtEstadoCivil=1
TxtSexo=M
TxtDepartamento=Empty
TxtNomDepartamento=Empty
TxtSucursal=Empty
TxtNomSucursal=Empty
TxtSindicato=S
Ahora slgase de esta pantalla
En este momento cabe hacerse varias preguntas:
a.- Por qu TXTCODIGO no la incluimos en la rutina DATOSINICIALES
Porque los datos de la llave principal no se borran desde una rutina, sino en forma
separada. Aunque la razn prctica de no incluirlo en la rutina DATOSINICIALES se ver
en el captulo siguiente, cuando se mire la modificacin de un registro o la eliminacin del
mismo.
b.-Por qu TXTESTADOCIVIL=1
Porque de esta manera conseguimos que se ejecute el evento Change de
TXTESTADOCIVIL, lo cual har que en el combo COMBOESTADOCIVIL se ubique en el
index que dice: Soltero. Como regla general diremos lo siguiente: En un Textbox que est
amarrado a un combobox, siempre le daremos el valor que corresponda al primer
elemento de la lista del combo.
1= Soltero, 2=Casado.........
si usted quisiera que el combo muestre la palabra Soltero por default, qu hara?
c.-Por qu TXTSEXO= M
Porque de esta manera conseguimos que se ejecute el evento Change de TXTSEXO, lo
cual har que cualquiera de los Optionbutton se active; en este caso se activar el
optionbutton que corresponde a Masculino. Como regla general diremos lo siguiente: En
un textbox que est amarrado a varios optionbutton, siempre daremos el valor que
corresponda a cualquiera de los optionbutton.
M=Masculino, F=Femenino
Si usted quisiera que apareciera activo el optionbutton de Femenino por default, qu
hara?
d.-Por qu TXTSINDICATO=S

Porque de esta manera conseguimos que se ejecute el evento change de


TXTSINDICATO, lo cual har que el checkbox aparezca marcado. Como regla general
diremos lo siguiente: En un textbox que est amarrado a un checkbox siempre le daremos
el valor S o N segn sea su preferencia.
S= Con la marca, N= Sin la marca
e. Por qu TxtFechaingreso=__/__/____
Porque a una casilla que hemos definido como fecha, debemos limpiarla con el formato
segn la mscara hecha con el control Masked Edit.
Nota: en este momento cabe comentar el siguiente hecho: es necesario que nuestra
computadora en la seccin de configuracin en el panel de control, especficamente en
las configuraciones regionales se defina la fecha como fecha larga: dd/MM/aaaa.
Para un usuario de visual Basic, es bastante incmodo ubicarse en una subrutina si no se
conoce el procedimiento correcto; es decir si su programa ya es demasiado grande, es
necesario tener una forma rpida para ubicar una subrutina; siga estos pasos para
ubicarse en la subrutina que desee:
a. Haga doble clic en cualquier punto de su pantalla;
b. Le aparecer la pantalla donde escribe el cdigo de programacin:
c. Haga clic en el combo de la parte superior izquierda, y le aparecer una lista de
nombres de variables y otros:

d. Debe ubicarse en el primer elemento de la lista y hacer clic sobre l


e. Ambos combos deben quedarle de la siguiente manera:

Haga clic en el combo de la derecha (Declarations)


f. Le aparecer una lista en la cual encontrar la rutina que usted busca:

Haga clic sobre el nombre de la rutina donde desea ubicarse, e inmediatamente visual
Basic lo ubica en la rutina seleccionada.
3. Programacin Botn Cancelar
Hacer una rutina no tiene ningn sentido si no se le llama desde algn punto del
programa; un buen lugar para llamar la rutina es el botn cancelar; haga doble clic sobre
el botn cancelar, y le aparecer el espacio para programar:

Para llamar la rutina, simplemente escriba:


DATOSINICIALES
Ahora slgase de esta pantalla y siga los siguientes pasos;
a. Corra su aplicacin
b. Introduzca todos los datos que se le piden
c. Al llenar todas la casillas haga clic sobre el botn Cancelar
d. Note que nos queda el siguiente problema:
-

El cdigo del empleado queda con datos


El cursor debera regresar a la casilla del cdigo del empleado

Para resolver estos dos puntos anteriores, haga clic de nuevo sobre el botn Cancelar, y
agregue las siguientes instrucciones despus de llamar la subrutina DATOSINICIALES:
TXTCODIGO = EMPTY
TXTCODIGO.SetFocus
Corra su aplicacin y haga la prueba de nuevo
Explicaremos las instrucciones que fueron agregadas:
a. TXTCODIGO = EMPTY; limpia la casilla del cdigo del empleado

b. TXTCODIGO.SetFocus; SetFocus sirve para enviar el cursor a un determinado


objeto, y cuando escribimos: TXTCODIGO.SetFocus le indicamos que enve
el cursor a ubicarse en la casilla TXTCODIGO.
Nota: Al correr su aplicacin note que de entrada las casillas no aparecen inicializadas,
aunque s limpias; esto nos lleva a la conclusin que otro lugar donde se debe llamar la
rutina DATOSINICIALES es en el Form_load; entre al Form_load y agregue la siguiente
instruccin:
DATOSINICIALES
Ahora corra su aplicacin y notar que de entrada le aparecen inicializados todas las
casillas.
4. Programacin Botn Agregar (Insert)
Para que una aplicacin pueda funcionar en cualquier base de datos es necesario que la
grabacin de la informacin sea hecha por medio de instrucciones de SQL; esto nos lleva
a considerar el Comando de SQL llamado Insert; este comando permite agregar un
nuevo registro a una tabla de datos; la forma de usarlo es la siguiente:
Insert into Tabla-de-datos(lista-de-campos) values (lista-de-valores)
Lista-de-campos son los campos que recibirn datos en la grabacin
Lista-de-valores son los valores que se grabarn en cada campo especificado en la lista
de campos, segn el orden especificado; para el caso analicemos la siguiente instruccin:
Insert into empleados(codigo,nombre,fechaingreso,sueldo) values
('1002','Rosa Mayrena', '01/01/2003',12500)
Esta instruccin agregara un registro a la tabla Empleados a los campos
codigo,nombre,fechaingreso y sueldo con los siguientes datos: 1002, Rosa Mayrena,
01/01/2003 y 12500 respectivamente; consideremos los siguientes aspectos:
1002 lo colocamos entre apstrofes o comillas simples porque en la tabla el campo
codigo es alfanumrico (text).
Rosa Mayrena lo colocamos entre apstrofes o comillas simples porque en la tabla el
campo nombre es alfanumrico (text).
12500 lo colocamos sin apstrofes o comillas simples porque en la tabla el campo sueldo
es numrico (text).

01/01/2003 lo colocamos entre apstrofes o comillas simples porque en la tabla el campo


fechaingreso es fecha (datime) y tiene el mismo tratamiento que los campos de tipo
alfanumrico (text).
Ahora bien, si quisiramos usar la instruccin anterior para grabar desde visual Basic
haramos un execute con el siguiente formato:
Con.execute(instriccin de SQL)
Lo cual sera lo siguiente (R002):
Con.execute (Insert into empleados(codigo,nombre,fechaingreso,sueldo)
Values ('1002','Rosa Mayrena', '01/01/2003',12500))
Haga doble clic sobre el botn Salvar y escriba la instruccin anterior y corra su aplicacin
Ahora entre a la base de datos (Access) y verifique que el registro se grab; tambin
borre el registro grabado despus de comprobada su grabacin.
Otra forma de trabajar el proceso de grabacin en Visual y Basic es hacerla por medio de
una variable de memoria; este ser la forma de trabajar en este libro; es muy sencillo, se
trabaja de la siguiente forma:
Mstrsql=instruccin de SQL
Con.execute(mstrSql)
Siguiendo nuestro ejercicio sera de la siguiente manera (R003):
MstrSql=Insert into empleados(codigo,nombre,fechaingreso,sueldo) Values ('1002' ,'Rosa
Mayrena', '01/01/2003',12500)

Con.execute(MstrSql)
Entre al botn Salvar y sustituya las instrucciones que encuentre por las anteriores y corra
su aplicacin:
Ahora entre a la base de datos (Access) y verifique que el registro se grab; tambin
borre el registro grabado despus de comprobada su grabacin.
Ahora queremos grabar en la tabla los datos de la pantalla; hagamos una referencia a
cada dato:
1002
Rosa Mayrena
01/01/2003
12500

=
=
=
=

TXTCODIGO
TXTNOMBRE
TXTFECHAINGRESO
TXTSUELDO

sera un grave error sencillamente sustituir los valores por las casillas, as:
MstrSql=Insert into empleados(codigo,nombre,fechaingreso,sueldo) Values ('txtcodigo' ,
'txtnombre', 'txtfechaingreso',txtsueldo)

Con.execute(MstrSql)
Lo que queremos hacer es grabacin parametrisada; la instruccin correcta sera la
siguiente (R004):
MstrSql=Insert into empleados(codigo,nombre,fechaingreso,sueldo) Values ( _
& & txtcodigo & ' ,
_
& & txtnombre & ' , _
& & txtfechaingreso & ' , _
& txtsueldo & )

Con.execute(MstrSql)
Entre al botn Salvar y sustituya las instrucciones que encuentre por las anteriores y corra
su aplicacin: Introduzca los siguientes datos:
1002
=
TXTCODIGO
Rosa Mayrena
=
TXTNOMBRE
01/01/2003
=
TXTFECHAINGRESO
12500
=
TXTSUELDO
Verifique que el registro se grab; luego borre el registro grabado; le sugerimos que nunca
escriba instrucciones demasiado largas, mejor acrtelas; para el caso, cuando la lista de
campos que recibirn informacin es muy larga, divida la instruccin en varias partes, as
(R005):
MstrSql=Insert into empleados(codigo,nombre, _
& fechaingreso,sueldo) Values ( _
& & txtcodigo & ' ,
_
& & txtnombre & ' , _
& & txtfechaingreso & ' , _
& txtsueldo & )

Con.execute(MstrSql)
Consideremos algunos aspectos de la instruccin para grabar datos:
a. Elementos para cada variable o casilla si no es el ltimo dato a grabar
a.1 Si es una casilla Alfanumrica (text) o fecha
& & casilla & , _
No va espacio entre la Doble comilla y el apstrofe (comilla sencilla)
o la coma
Antes del guin de continuacin va un espacio
Antes y despus del signo aspersan (&) va un espacio

a.2 Si es una casilla numrica


& casilla & , _
No va espacio entre la Doble colilla y la coma
Antes del guin de continuacin va un espacio
Antes y despus del signo aspersan (&) va un espacio
b. Elementos para cada variable o casilla si es el ltimo dato a grabar
b.1 Si es una casilla Alfanumrica (text) o fecha
& & casilla & )
No va espacio entre la Doble comilla y el apstrofe (comilla sencilla)
o el parntesis derecho
No va del guin de continuacin
Antes y despus del signo aspersan (&) va un espacio
b.2 Si es una casilla numrica
& casilla & )
No va espacio entre la Doble colilla y el parntesis derecho
No va el guin de continuacin
Antes y despus del signo aspersan (&) va un espacio
Con estas reglas anteriores puede hacer la grabacin de cualquier registro de tabla de
datos; escribamos la instruccin donde se graba toda la informacin del empleado (R006):
MstrSql = "Insert into empleados(codigo,nombre,direccion,fechaingreso," _
& "sueldo,telefono,estadocivil,sexo,departamento,sucursal," _
& "sindicato) Values (" _
& " ' " & txtcodigo & " '," _
& " ' " & TXTNOMBRE & " '," _
& " ' " & TXTDIRECCION & " '," _
& " ' " & TXTFECHAINGRESO & " '," _
& TXTSUELDO & "," _
& " ' " & TXTTELEFONO & " '," _
& " ' " & TXTESTADOCIVIL & " '," _
& " ' " & TXTSEXO & " '," _
& " ' " & TXTDEPARTAMENTO & " '," _
& " ' " & TXTSUCURSAL & " '," _
& " ' " & TXTSINDICATO & " ' )"
Con.Execute (MstrSql)
Con.Committrans

Corra su aplicacin y grabe un Nuevo empleado de cdigo = 032; los dems datos
invnteselos con el cuidado de introducir una fecha correcta.
Nos hace falta un detalle muy importante: despus de grabar, la pantalla debe quedar
limpia y el cursor en la casilla del cdigo del empleado; esto nos indica que al grabar el
registro hay que escribir las siguientes lneas:
DATOSINICIALES
TXTCODIGO=EMPTY
TXTCODIGO.SetFocus
Pero estas lneas se encuentran en la rutina del Botn cancelar:
Private Sub Cancelar_Click()
DATOSINICIALES
txtcodigo = Empty
txtcodigo.SetFocus
End Sub
Por lo tanto, para no repetir estas instrucciones podemos llamar la rutina: Cancelar_click
Entre de nuevo al Botn Salvar y al final (antes de End Sub) escriba lo siguiente:
Cancelar_click
Corra su aplicacin y grabe un Nuevo empleado de cdigo = 033; los dems datos
invnteselos con el cuidado de introducir una fecha correcta.
5. Instruccin Con.Committrans
Esta es una instruccin que le indica al Visual Basic que debe ejecutar la instruccin
tambin en el proceso de trasladar las transacciones a la copia de espaldo automtica
que hace una base de datos robusta como Oracle, SQL Server y cualquier otra; en
Access no existe esa copia de respaldo, as que la instruccin Con.Committrans no tiene
ningn efecto.

Gua de trabajo Captulo No. 10


1. Qu es una Subrutina
2. Cul es la razn de trabajar con subrutinas
3. Cmo se le llama a la programacin por medio de subrutinas
4. Cul es el formato de una subrutina en Visual basic
5. Cmo se llama para ejecutar una subrutina desde cualquier punto del
programa
6. Cul es el objetivo de hacer una subrutina de inicializacin de datos
(DATOSINICIALES)
7. En la subrutina DATOSINICIALES a qu se igualan los siguientes casos de
casillas:
a. Fechas
b. Textbox amarrado a un combobox
c. Textbox amarrado a un Option Button
d. Textbox amarrado a un checkbox
e. Cualquier otro caso
8. En qu dos lugares del programa debe llamarse la rutina DATOSINICIALES
9. Qu instrucciones van en el botn Cancelar
10. Qu hace el comando Insert
11. Si tenemos la siguiente tabla: TABLA1
Nombre de campo
Tarjeta
Fechatar
Valortar
Codigopostal

Tipo
Text
Fecha
Numrico
Text

Cul sera la instruccin en SQL para agregar un registro con la siguiente


Informacin
Tarjeta
Fechatar
Valortar
Codigopostal

10-20
20/01/2003
4700
02

12. En el formulario Frmart haga lo siguiente:


a. La rutina DATOSINICIALES
b. Programar el botn Cancelar
c. Llamar la rutina DATOSINICIALES en el Form_load
d. Programar el botn Salvar (Agregar un nuevo artculo)
Tabla: Articulos

13. En el formulario Frmcli haga lo siguiente:


a. La rutina DATOSINICIALES
b. Programar el botn Cancelar
c. Llamar la rutina DATOSINICIALES en el Form_load
d. Programar el botn Salvar (Agregar un nuevo artculo)
Tabla Clientes

14. En el formulario Frmfac haga lo siguiente:


a. La rutina DATOSINICIALES
b. Programar el botn Cancelar
c. Llamar la rutina DATOSINICIALES en el Form_load
d. Programar el botn Salvar (Agregar un nuevo artculo)
Tabla Facturas

Captulo 11
Datos numricos, programacin de teclas
Y validacin de datos
I.

Objetivo General
Conocer el concepto de Datos numricos, programacin de teclas; Edicin y
Modificacin de datos

II.

Objetivos especficos
Programar casillas numricas; evento Keyprees para saltar a otra casilla con la
tecla enter; validacin de datos de tipo texto, numricos y fechas

III.

Contenido
1. Casillas numricas
2. Salto de una casilla a otra con la tecla enter
3. Validaciones
4. Datos numricos no pueden grabarse en blanco (empty)
5. Datos numricos no pueden grabarse con comas (,)
6. Validar la repeticin del registro a grabarse

1.- Casillas numricas


Corra su aplicacin y ver que la casilla del Sueldo permite letras y otros caracteres que
no son numricos.
Las casillas numricas se disean con un textbox, siendo necesario programar para que se
comporten como tal; En una casilla numrica solo deben entrar los nmeros del 0 al 9 y el punto
decimal (solo una vez); todo esto no es automtico en Visual Basic, es necesario programarlo; en
nuestro caso que estamos trabajando el formulario de los datos de los empleados, el sueldo es el
dato que trabajaremos; la programacin se hace en el evento Keypress; entre al evento Keypress
de TXTSUELDO y agregue las siguientes instrucciones: (R007)
If KeyAscii >= 32 Then
If Not IsNumeric(Chr(KeyAscii)) Then
If Chr(KeyAscii) <> "." Then
KeyAscii = 0
Else
If (InStr(1, TXTSUELDO.Text, ".")) > 0 Then
KeyAscii = 0
End If
End If
End If
End If

Corra su aplicacin y ver que la casilla del Sueldo ya no permite letras y otros caracteres
que no son numricos.
Explicaremos detalladamente la rutina en un captulo mas adelante que trata sobre
funciones y teclas de funcin, pero daremos algunos detalles a continuacin:
La idea de esta rutina es inhabilitar el teclado cuando se ha presionado determinada tecla;
si se presiona cualquier letra o carcter especial, que se inhabilite el teclado; no as si se
presiona algunas teclas como enter, F1 F10, Backspace,Delete, etc.pues estas podran
ejecutar una rutina:
If KeyAscii >= 32 Then

Solo las teclas cuyo carcter ascii sea mayor o igual a 32 entrarn al proceso de inhabilitacin de
teclado (barra espaciadora = 32), antes del 32 tenemos por ejemplo backspace = 8, enter = 13,
shift = 16, etc.; estas teclas no las queremos inhabilitar
If Not IsNumeric(Chr(KeyAscii)) Then

De las teclas cuyo cdigo ascii son mayores de 32, entrarn al proceso de inhabilitacin de
teclado las que no son numricas (0 9)
If Chr(KeyAscii) <> "." Then

De las que no son numricas y que a la vez no es el punto (110) queremos


que queden inhabilitadas (Keyascii = 0)
KeyAscii = 0
Else

A esta parte del programa solo entra el punto


If (InStr(1, TXTSUELDO.Text, ".")) > 0 Then

Si es el punto, pero ya est en la casilla TXTSUELDO.TEXT entonces


inhabilite el teclado. La funcin InStr busca el punto(.) desde la posicin
primera (1) de la casilla TXTSUELDO.TEXT; si no lo encuentra devuelve el
valor 0; si lo encuentra devuelve un valor arriba de cero
KeyAscii = 0
End If
End If
End If
End If

Como le hemos dicho, mas adelante se explicar mas detalladamente esta rutina; por ahora usted
debe saber que debe escribirse en el evento Keypress de cualquier casilla numrica, y lo nico
que debe cambiar es el nombre de la casilla.

2. Salto de una casilla a otra con la tecla enter


Por default Visual Basic salta de casilla en casilla con la tecla TAB tomando como
referencia la propiedad TABINDEX de cada control u objeto de entrada de datos.
Pero se da el caso de que una de las razones por las cuales el usuario rechaza un
sistema es porque desea que el salto lo haga presionando la tecla Enter. Por ejemplo si
queremos saltar de la casilla TXTCODIGO a la casilla TXTNOMBRE al presionar la tecla
enter haga lo siguiente:
a. Ubquese en la casilla TXTCODIGO y entre al evento Keypress
b. Agregue la siguiente programacin
if Keyascii=13 Then
TXTNOMBRE.Set.focus
End If
Explicaremos este cdigo de programacin:

if Keyascii=13 Then
La tecla enter es el caracter ascii 13; esta tecla no est inhabilitada en los
casos cuando se trata de una casilla numrica; si estando en la casilla
TXTCODIGO se ha presionado la tecla enter, entonces enviamos el cursor a la
casilla TXTNOMBRE.

TXTNOMBRE.Set.focus
End If
Despus de hacer la programacin anterior en su aplicacin crrala y notar el cambio.
Si queremos que al estar en la casilla TXTNOMBRE al presionar la tecla enter, salte a la
casilla TXTDIRECCION hacemos lo siguiente:
a. Ubquese en la casilla TXTNOMBRE y entre al evento Keypress
b. Agregue la siguiente programacin
if Keyascii=13 Then
TXTDIRECCION.Set.focus
End If
En nuestro curso trabajaremos con el entendido que el salto de una casilla a otra se haga
con la tecla enter (siempre queda habilitado que se salte con la tecla Tab tomando como
base la propiedad Tabindex)
Ejercicio:

Programe el salto de las otras casillas del formulario Frmemp


3. Validaciones
Se le llama validaciones al hecho de no permitir que se graben en la tabla datos
incorrectos; las validaciones deben ir antes de que el registro se grabe en la tabla lo cual
nos lleva al inicio del evento clic del botn a SALVAR.
La idea es que si intentamos grabar un dato incorrecto, podamos detener la grabacin y a
la vez enviar un mensaje de advertencia al usuario. Antes veremos un nuevo comando:
MSGBOX
Sirve para enviar un mensaje por pantalla; este comando detiene el procedimiento y
espera que el usuario presione cualquier tecla; la sintaxis es la siguiente:
MSGBOX Mensaje en el cuerpo de la pantalla, SIGNO DE EXPRESIN, Mensaje en la parte
superior de la pantalla

Notemos lo que hara la siguiente instruccin


MsgBox Dato incorrecto,vbcritical, Error....

Vbcritical genera el crculo rojo con la equis blanca, que es el convencional de Windows cuando
se ha producido un error; otros signos de expresin seran los siguientes:

Vbexclamation

Vbinformation

Vbquestion

Existen otros que usted puede investigar mas adelante. Al hacer las validaciones
comprenderemos mejor el uso de la funcin Msgbox. Programaremos las siguientes
validaciones:
a. El nombre no debe ir en blanco
If Txtnombre=Empty Then
Msgbox Nombre del Empleado no debe ir en blanco, vbcritical, ERROR
Txtnombre.setfocus
Exit Sub
End If

Escriba esta validacin va al inicio del evento clic del botn SALVAR; corra su aplicacin y
presione el botn Salvar sin escribir el nombre del empleado

Explicaremos el bloque de programacin


If Txtnombre=Empty Then

Se pregunta si TXTNOMBRE est en blanco (empty)


Msgbox Nombre del Empleado no debe ir en blanco, vbcritical, ERROR

Si la respuesta es afirmativa se enva el mensaje correspondiente en una


pequea pantalla y se espera a que el usuario presione cualquier tecla:

Txtnombre.setfocus

Al presionar el usuario cualquier tecla se enva el cursor a la casilla


TXTNOMBRE, pues all se detect el error
Exit Sub

El programa se sale de la rutina Salvar_clic para que no contine con las


subsiguientes instrucciones
End If

b. El sueldo no debe ser menor de 1500

Txtsueldo= format(txtsueldo, ######.00)


If val(txtsueldo)<1500 then
MsgboxSueldo incorrecto, no debe ser menor de 1500, vbcritical, ERROR
Txtsueldo.setfocus
Exit sub
End If

Escriba esta validacin al inicio del evento clic del botn SALVAR antes de la validacin del
nombre; corra su aplicacin y presione el botn Salvar escribiendo un sueldo como 1300.

Explicaremos las instrucciones adicionales en este caso de una validacin de una casilla
numrica.
Txtsueldo= format(txtsueldo, ######.00)

Esta lnea es muy importante cuando se trata de una casilla numrica; format es una
funcin que establece un formato (el que est entre comillas); este formato (#####.00)
lo que hace es quitarle comas (,) si la casilla viniera con comas (mas adelante veremos
que as ser), la evaluacin de la funcin Val (convertir a numrico) no es exacta; para el
caso si TXTSUELDO tiene el valor 1,500.00, la funcin Val lo convierte en uno (1), pues
evala hasta donde encuentra un carcter extrao.
If val(txtsueldo)<1500 then

Se usa val para convertir a numrico, ya que todo textbox es de tipo texto.
c. El nombre del departamento no debe ir en blanco o debe existir en la tabla
departamentos
If txtnomdepartamento=empty or txtnomdepartamento=NO EXISTE then
MsgboxDepartamento incorrecto, vbcritial, error
Txtdepartamento.setfocus
Exit sub
End If

Esta validacin es de mucha importancia y no debe ser dejada sin comentar en forma especial; de
no hacerla se corre el riesgo de tener registros de empleados sin departamento donde trabaja, o
un departamento que no existe.
Escriba esta validacin al inicio del evento clic del botn SALVAR antes de la validacin del
sueldo; corra su aplicacin y presione el botn Salvar escribiendo un departamento incorrecto
(10).
Ahora pruebe grabar un registro sin departamento

d. El nombre de la sucursal no debe ir en blanco o debe existir en la tabla


Sucursales

If txtnomsucursal=empty or txtnomsucursal=NO EXISTE then


Msgbox Sucursal Incorrecta, vbcritical, ERROR
Txtsucursal.setfocus
Exit sub
End If

Escriba esta validacin al inicio del evento clic del botn SALVAR antes de la validacin del
Departamento; corra su aplicacin y presione el botn Salvar escribiendo una sucursal incorrecta
(10).
Ahora pruebe grabar un registro sin sucursal

e. La fecha debe ser correcta


If Not isdate(txtfechaingreso) then
Msgbox Fecha de Ingreso Incorrecta, vbcritical, ERROR
Txtfechaingreso.setfocus
Exit sub
End If

Explicaremos lo extrao o nuevo de esta validacin; es especial para casillas de fechas


If Not isdate(txtfechaingreso) then

La funcin Isdate() convierte a fecha segn el formato que su computadora est


manejando.
La pregunta se hace en forma negativa, pues lo que interesa saber es si la casilla
TXTFECHA no es un fecha correcta
Escriba esta validacin al inicio del evento clic del botn SALVAR antes de la validacin de la
sucursal; corra su aplicacin y presione el botn Salvar escribiendo una fecha
incorrecta(30/02/2003).
Ahora nos presentamos ante un problema; la validacin anterior referente a la fecha est bien
para aquellos casos cuando se requiera grabar obligatoriamente una fecha; pero podra darse el
caso de que se desea grabar un registro sin fecha;
Intente Grabar un empleado sin fecha de nacimiento en este momento:
La nueva validacin de la fecha nos debe permitir identificar dos casos:
a. Si se introdujo una fecha, que se valide si es correcta o no
b. Si la fecha est vaca que no haga la validacin y que grabe la fecha nulla
Esto nos lleva a modificar la rutina de validacin de fecha por la siguiente:(R008)

If TXTFECHAINGRESO = "__/__/____" Then


TXTFECHAINGRESO2 = "Null"
Else
If Not IsDate(TXTFECHAINGRESO) Then
MsgBox "Fecha de Ingreso Incorrecta", vbCritical, "ERROR"
TXTFECHAINGRESO.SetFocus
Exit Sub
End If
TXTFECHAINGRESO2 = TXTFECHAINGRESO
End If

Haga en este momento la sustitucin de la rutina de validacin de fecha y prueba la nueva


validacin ingresando un empleado con fecha vaca.
Explicaremos los aspectos nuevos de la validacin:
If TXTFECHAINGRESO = "__/__/____" Then

Preguntamos si la casilla TXTFECHAINGRESO est vaca


TXTFECHAINGRESO2 = "Null"

Si la casilla TXTFECHAINGRESO est vaca se crea una variable con el valor


Nulo (TXTFECHAINGRESO2 = "Null")
Else

En caso de que la casilla TXTFECHAINGRESO no est vaca que haga el


proceso de la validacin se har normalmente:
If Not IsDate(TXTFECHAINGRESO) Then
MsgBox "Fecha de Ingreso Incorrecta", vbCritical, "ERROR"
TXTFECHAINGRESO.SetFocus
Exit Sub
End If

Antes de salir de la validacin tenemos que asignar a la variable


TXTFECHAINGRESO2 el contenido de la casilla TXTFECHAINGRESO.
TXTFECHAINGRESO2 = TXTFECHAINGRESO
End If

Termina la validacin
Lo anterior significa que lo que se grabar en la tabla ya no ser TXTFECHAINGRESO, sino
TXTFECHAINGRESO2, lo provocara el siguiente cambio en la rutina de grabacin del registro:
MstrSql = "Insert into empleados(codigo,nombre,direccion,fechaingreso," _
& "sueldo,telefono,estadocivil,sexo,departamento,sucursal," _
& "sindicato) Values (" _
& " ' " & txtcodigo & " '," _
& " ' " & TXTNOMBRE & " '," _
& " ' " & TXTDIRECCION & " '," _
& TXTFECHAINGRESO2 & " ," _
& TXTSUELDO & "," _
& " ' " & TXTTELEFONO & " '," _

& " ' " & TXTESTADOCIVIL & " '," _


& " ' " & TXTSEXO & " '," _
& " ' " & TXTDEPARTAMENTO & " '," _
& " ' " & TXTSUCURSAL & " '," _
& " ' " & TXTSINDICATO & " ' )"
Con.Execute (MstrSql)

Haga usted este cambio a su programa, pues esta rutina fue hecha en el captulo anterior:

4. Datos numricos no pueden grabarse en blanco (empty)


Un detalle muy importante a la hora de grabar informacin es el hecho de que hay que asegurarse
de que si un dato numrico est en blanco (empty) debe transformarse en cero antes de grabarse,
pues no es posible grabar un dato en blanco en un capo numrico; en nuestro caso el dato al que
queremos aplicar este principio es TXTSUELDO (sueldo del empleado); las instrucciones para
transformar un dato numrico que est en blanco, a cero es el siguiente:
If Txtsueldo = empty then
Txtsueldo = 0
End if
Incluya estas instrucciones exactamente antes de la grabacin del registro (Insert)
En este caso del formulario Frmemple solo tenemos un dato numrico, el sueldo, pero es claro
que por cada casilla numrica debe hacerse el proceso de verificacin si el dato viene en blanco;
para el caso en su ejercicio del formulario de artculos Frmart existen varias casillas numricas:
TXTEXISTENCIA, TXTMAXIMO, TXTMINIMO, TXTPRECIO y TXTCOSTO, estas seran las
instrucciones para trasformar cada casilla a cero en caso de que estn en blanco:
If Txtexistencia = empty then
Txtexistencia = 0
End if
If Txtmaximo = empty then
Txtmaximo = 0
End if
If Txtminimo = empty then
Txtminimo = 0
End if
If Txtprecio = empty then
Txtprecio = 0
End if
If Txtcosto = empty then
Txtcosto = 0
End if

5. Datos numricos no pueden grabarse con comas (,)


Otro detalle muy importante a la hora de grabar informacin es el hecho de que hay que
asegurarse de que si un dato numrico est con comas, debe quitrselas. Antes de grabar el
registro debe escribir la siguiente instruccin:
TXTSUELDO = FORMAT(TXTSUELDO,#######.00)
Con estas instrucciones se graba el dato con un formato que no tiene comas; esto debe hacerse
para todas las casillas numricas.

6. Validar la repeticin del registro a grabarse


Nos queda un ltimo aspecto por tratar en relacin con una validacin especial, y es que
antes de grabar el registro preguntemos si otro usuario no lo ha grabado en el proceso
simultneo de grabacin. No debe confundirse este proceso con el proceso que se ver
en el siguiente captulo donde desde la introduccin del cdigo del empleado se
comprueba si existe o no en la tabla.
Antes de la rutina de grabacin y despus de la ltima validacin haremos lo
siguiente:(R009)
Dim ZZ As rdoResultset
Set ZZ = Con.Openresultset(Select codigo from Empleados where codigo= &
TXTCODIGO & , rdopenDynamic)

Select Case ZZ.eof


Case True
MstrSql = "Insert into empleados(codigo,nombre,direccion,fechaingreso," _
& "sueldo,telefono,estadocivil,sexo,departamento,sucursal," _
& "sindicato) Values (" _
& " ' " & txtcodigo & " '," _
& " ' " & TXTNOMBRE & " '," _
& " ' " & TXTDIRECCION & " '," _
& TXTFECHAINGRESO2 & " ," _
& TXTSUELDO & "," _
& " ' " & TXTTELEFONO & " '," _
& " ' " & TXTESTADOCIVIL & " '," _
& " ' " & TXTSEXO & " '," _
& " ' " & TXTDEPARTAMENTO & " '," _
& " ' " & TXTSUCURSAL & " '," _
& " ' " & TXTSINDICATO & " ' )"
Con.Execute (MstrSql)

Case False
MsgBox "Este cdigo acaba de ser ingr. por otro usuario", vbCritical, "ERROR"
TXTNOMBRE.SetFocus
Exit Sub

End Select
Sustituya la rutina de grabacin por esta nueva rutina y trate de grabar un empleado que
ya existe (Cdigo=001)

Gua de trabajo Captulo No. 11


1. En qu evento de una casilla numrica se debe trabajar para indicar que solo
acepte datos numricos
2. Qu teclas tienen un cdigo ascii menos de 32
3. Qu instruccin en el evento Keypress inhabilita el teclado
4. Qu hace la funcin InStr en la rutina para aceptar solo datos numricos
5. Con qu tecla se salta de una casilla a otra por default en un programa en Visual
Basic 6.0
6. En qu evento se trabaja para indicar que se salte a otra casilla con la tecla
enter
7. Si de la casilla TXTFECHA se desea saltar a la casilla TXTTELEFONO con la
tecla enter qu instrucciones iran en el evento Keypress de la casilla
TXTFECHA
8. Qu hace la funcin MsgBox
9. En el formulario Frmart haga lo siguiente:
a. Programe la rutina de datos numricos en la siguientes casillas:
TXTEXISTENCIA, TXTMAXIMO, TXTMINIMO, TXTPRECIO
TXTCOSTO
b. Programe que todas las casillas salten de una a otra con la tecla enter
c. Haga las siguientes validaciones
c.1 El Nombre no debe ir en blanco
c.2 La fecha debe ser correcta, pero puede estar vaca (nula)
c.3 Ninguna de las siguientes casillas debe ser negativa (<0)
TXTEXISTENCIA, TXTMAXIMO, TXTMINIMO, TXTPRECIO
TXTCOSTO
c.4 El cdigo de la unidad debe existir en la tabla de unidades
c.5 El cdigo de la lnea debe existir en la tabla de Lneas
d. Validar la repeticin del registro a grabar
e. Que los datos numricos no se graben en blanco
g. Que los datos numricos no se graben con comas

Tabla: Articulos

10. En el formulario Frmcli haga lo siguiente:


a. Programe la rutina de datos numricos en la siguientes casillas:
TXTCREDITOMAX
b. Programe que todas las casillas salten de una a otra con la tecla enter
c. Haga las siguientes validaciones
c.1 El Nombre del cliente no debe ir en blanco
c.2 El Nombre del contacto no debe ir en blanco
c.3 La direccin no debe ir en blanco
c.4 La fecha debe ser correcta y no debe estar vaca (nula)
c.3 Ninguna de las siguientes casillas debe ser negativa (<0)
TXTCREDITOMAX
c.4 El cdigo del vendedor debe existir en la tabla de vendedores
d. Validar la repeticin del registro a grabar
e. Que los datos numricos no se graben en blanco
g. Que los datos numricos no se graben con comas

Tabla Clientes

11. En el formulario Frmfac haga lo siguiente:


a. Programe la rutina de datos numricos en la siguientes casillas:
TXTSUBTOTAL, TXTDESCUENTO, TXTIMPUESTO,
TXTTOTALNETO,TXTPLAZO
b. Programe que todas las casillas salten de una a otra con la tecla enter
c. Haga las siguientes validaciones
c.1 La fecha debe ser correcta y no debe estar vaca (nula)
c.2 Ninguna de las siguientes casillas debe ser negativa (<0)
TXTSUBTOTAL, TXTDESCUENTO, TXTIMPUESTO,
TXTTOTALNETO,TXTPLAZO
c.3 El cdigo del vendedor debe existir en la tabla de vendedores
c.4 El cdigo del cliente debe existir en la tabla de clientes
c.5 El cdigo de la sucursal debe existir en la tabla de sucursales
d. Validar la repeticin del registro a grabar
e. Que los datos numricos no se graben en blanco
g. Que los datos numricos no se graben con comas
Tabla Facturas

Captulo 12
Edicin de datos, Eliminacin y Modificacin
I.

Objetivo General
Manipulacin de los datos

II.

Objetivos especficos
Programar los programas para editar datos, eliminar registros de las tablas y
modificar su informacin

III.

Contenido
1. Edicin de datos
2. Eliminacin de registro
3. Modificacin de registro

1. Edicin de datos
Editar datos es la accin de ir a la tabla a buscar un registro y mostrarlo por pantalla; el
concepto que manejaremos ser el siguiente:
a. Introducimos el cdigo del empleado
b. Si el cdigo del empleado existe en la tabla, el resto de sus datos se deben
mostrar por pantalla.
c. Si el cdigo del empleado no existe en la tabla, nos debe dejar lista la pantalla (limpia)
para agregar el empleado.
Usaremos una forma dinmica de trabajar, por lo tanto trabajaremos en el evento change
del cdigo del empleado. Antiguamente se proceda a pedir por pantalla el cdigo del
registro a buscar; si se encontraba mostraba los datos; si el registro no se encontraba se
enviaba por pantalla un mensaje de que no se encontraba el registro buscado; pero esto
ya no se estila.
A partir de este momento manejaremos el concepto siguiente: Solo uno de los botones,
SALVAR o MODIFICAR debe estar habilitado (Enabled = true) ya que no es posible hacer
las dos actividades al mismo tiempo; de entrada el botn SALVAR debe estar habilitado y
el botn Modificar debe estar Inhabilitad (Enabled = False)
Entre al evento Change del cdigo del empleado (TXTCODIGO) y escriba la siguiente
rutina (R010):

Dim ZZ As rdoResultset
Set ZZ = Con.OpenResultset("Select * from Empleados where codigo=' " & txtcodigo & " ' ", rdOpenDynamic)

Select Case ZZ.EOF


Case True
Salvar.Enabled = True
Modificar.Enabled = False
Eliminar.Enabled = False
DATOSINICIALES
txtcodigo.SetFocus
Case False
Salvar.Enabled = False
Modificar.Enabled = True
Eliminar.Enabled = True
DATOSINICIALES
If Not IsNull(ZZ!nombre) Then
TXTNOMBRE = ZZ!nombre
End If
End Select

Corra su programa y luego trabajemos explicando la rutina; llame el empleado con cdigo
001
La mayora de los elementos individuales de esta rutina ya se han considerado en este
texto:
Dim ZZ As rdoResultset
Set ZZ = Con.OpenResultset("Select * from Empleados where codigo=' " & txtcodigo & " ' ", rdOpenDynamic)

Creamos una variable de tipo rdoresultset y le asignamos la lectura de la tabla Empleados


buscando el empleado cuyo cdigo es el de la casilla TXTCODIGO; debe tener el cuidado
de considerar que tres cosas pueden cambiar a la hora de hacer la asignacin de la
lectura a la variable ZZ cuando se lea otra tabla:
a. El nombre de la tabla (Empleados, Articulos, Clientes, Facturas)
b. El nombre del campo llave de la tabla:
Empleados
Articulos
Clientes
Facturas

Codigo
Codigo
Codcli
Factura

c. El nombre del textbox correspondiente al dato de la llave segn el formulario de


trabajo
Frmemple
Frmart
Frmcli
Frmfac

TXTCODIGO
TXTCODIGO
TXTCODCLI
TXTFACTURA

Tomando en cuenta estos tres puntos anteriores, cual sera la asignacin a la variable ZZ
en el caso de la aplicacin de clientes:
Respuesta:
Set ZZ = Con.OpenResultset("Select * from clientes where codcli=' " & txtcodcli & " ' ", rdOpenDynamic)

Cual sera la asignacin a la variable ZZ en el caso de la aplicacin de Facturas:


Respuesta:
Set ZZ = Con.OpenResultset("Select * from Facturas where Factura=' " & txtfactura & " ' ", rdOpenDynamic)

A la hora de hacer los ejercicios de este captulo debe considerar estos aspectos
anteriores
Select Case ZZ.EOF

Abrimos una estructura Case para considerar el Fin de archivo (ZZ.EOF)


Case True

Si el registro no fue encontrado entonces ZZ estar vaco, y por lo tanto estamos en el fin
de archivo.
Salvar.Enabled = True
Modificar.Enabled = False
Eliminar.Enabled = False
DATOSINICIALES

En caso de fin de archivo haremos lo siguiente:


Habilitamos el botn Salvar (Salvar.Enabled = True)
InHabilitamos el botn Modificar (Modificar.Enabled = False)
InHabilitamos el botn Eliminar (Eliminar.Enabled = False)
Inicializamos las casillas de la pantalla (DATOSINICIALES)
Todo esto se hace pues se trata de un empleado nuevo; despus el programa pasa a
ejecutar lo que est despus de la instruccin: End Select, lo cual es el fin de la rutina.
Case False

Si el registro fue encontrado entonces ZZ no estar vaco, y por lo tanto es falso que
estamos en el fin de archivo.
Salvar.Enabled = False
Modificar.Enabled = True
Eliminar.Enabled = True
DATOSINICIALES
TXTNOMBRE.SetFocus

En caso de no ser fin de archivo haremos lo siguiente:


InHabilitamos el botn Salvar (Salvar.Enabled = False)
Habilitamos el botn Modificar (Modificar.Enabled = True)
Habilitamos el botn Eliminar (Eliminar.Enabled = True)
Inicializamos las casillas de la pantalla (DATOSINICIALES)
Si editamos el registro, podramos querer hacer cambios a los datos o eliminar al
empleado de la tabla; por eso habilitamos los botones de Modificar y Eliminar
If Not IsNull(ZZ!nombre) Then
TXTNOMBRE = ZZ!nombre
End If

En este momento los datos del empleado estn disponibles, as que procedemos a hacer
la asignacin de los datos de la tabla a las casillas del formulario; en este caso solo
hemos hecho la asignacin del nombre del empleado.
Despus el programa pasa a ejecutar lo que est despus de la instruccin: End Select,
lo cual es fin de la rutina.
End Select

Ahora solo resta completar la edicin de datos; para poder completar la edicin de datos
debemos estar bien seguros de los nombres de los campos en la tabla de datos, as como
los nombres de las casillas en el formulario; es en este momento que cabe recordar que
en captulos anteriores, se recomend que en los nombres de las casillas en el formulario,
tuviesen el mismo nombre que el de la tabla de datos con el agregado TXT
anteponindolo al nombre, para facilitar la tarea de la edicin del dato; echemos una
mirada a la estructura de la tabla:

Agreguemos a nuestra rutina de edicin la edicin de la direccin:


If Not IsNull(ZZ!Direccion) Then
TXTDireccion = ZZ!Direccion
End If

Corra su programa con este nuevo agregado


Ahora editemos la fecha de ingreso:

If Not IsNull(ZZ!Fechaingreso) Then


TXTFechaingreso = ZZ!Fechaingreso
End If

Al editar un campo fecha se debe tener muy en cuenta la siguiente situacin:

El formato de la casilla Fechaingreso (Masked Edit) es el siguiente:


## / ## / ####
Si en su sistema no tiene un formato de fecha de la misma manera (## / ## / ## por
ejemplo), se producir un error en la asignacin.
Corra su programa para su verificacin
Haga usted el resto de asignaciones para completar el proceso edicin de datos
Nota: Es en este momento donde aclaramos lo siguiente: El dato de la llave
(TXTCODIGO) no debe incluirse en la rutina DATOSINICIALES. Por favor incluya
TXTCODIGO=EMPTY en la rutina DATOSINICIALES y note lo que sucede.
Note que no es posible continuar trabajando; as que recalcaremos el concepto de que en
la rutina DATOSINICIALES nunca se deben incluir las casillas que correspondan a los
datos de llave de la tabla. Finalmente quite la instruccin TXTCODIGO=EMPTY de la
rutina DATOSINICIALES.
2. Eliminacin de registro
En el botn Eliminar se programa la rutina que tiene como objetivo eliminar de la tabla de
datos el registro cuya informacin se ve por pantalla; antes de eliminar un empleado de la
tabla de empleados se le debe hacer una pregunta al usuario donde se le pregunte si
realmente desea eliminar el registro.
Agreguemos un empleado con el siguiente Cdigo: 9999-99; el resto de datos
invnteselos.
Ahora vaya al evento clic del botn ELIMINAR y escriba lo siguiente (R010b)
If Msgbox(Seguro que quiere Eliminar, vbQuestion + vbYesNo)= vbYes Then
Con.Execute(Delete from EMPLEADOS where CODIGO= & TXTCODIGO & )
Con.Committrans
End If
CANCELAR_Click

Corra su aplicacin y llame el empleado 9999-99; al ver la informacin en pantalla


presione el botn Eliminar; le aparece lo siguiente:

Conteste No.
Corra su aplicacin y llame de nuevo el empleado 9999-99; al ver la informacin en
pantalla presione de nuevo el botn Eliminar; cuando le aparezca la pregunta si desea
Eliminar el registro conteste afirmativamente.
Al tratar de llamar de nuevo el empleado de cdigo 9999-99 notar que ya no aparece,
pues el registro ha sido eliminado.
Ahora explicaremos las instrucciones de Eliminacin de registro:
If Msgbox(Seguro que quiere Eliminar, vbQuestion + vbYesNo)= vbYes Then

Msgbox como hemos visto es para enviar un mensaje a pantalla por medio de un cuadro de
dilogo; en este cuadro de dilogo o pequea pantalla debe aparecer el signo de interrogacin
(Vbquestion) y los botones Yes y No (VbyesNo); pero aqu tenemos una nueva modalidad, y es
evaluar de un solo la posible respuesta, y en nuestro caso lo que queremos es evaluar si la
respuesta es Yes.
Con.Execute(Delete from EMPLEADOS where CODIGO= & TXTCODIGO & )
Con.Committrans

Elimina de la tabla Empleados el empleado cuyo campo Codigo sea igual al dato que se
introdujo en la casilla TTXTCODIGO. De un solo lo elimina de los datos de respaldo en
caso de que estemos trabajando con una base de datos que maneje copias de respaldo
(Oracle, SQL Server, etc.)
Debe tenerse el cuidado de saber qu cambiar cuando se trata de otra tabla; para el caso,
si la rutina se aplicara a la tabla clientes, la instruccin de eliminacin sera la siguiente:
Con.Execute(Delete from Clientes where CODcli= & TXTCODcli & )
End If

Fin de rutina
CANCELAR_Click

Despus de eliminar queremos que la pantalla quede en blanco, y que el codigo del
empleado quede limpio con el cursor posicionado en l; las instrucciones que hacen estas
tareas estn en el botn Cancelar.
3. Modificacin de registro
En una aplicacin seria debe existir la posibilidad de modificar datos que han sido
grabados. La rutina de modificacin la haremos en el botn Modificar.
En este botn programamos la rutina para salvar los datos del registro que vemos en
pantalla; antes debemos decir que las mismas validaciones que estn en el botn Salvar ,
deben estar en el botn Modificar, as como las instrucciones para trasformar datos
numricos de blanco a cero, y las instrucciones para cambiar el formato de los datos
numricos; as que copiaremos estas instrucciones del botn Salvar al botn modificar.
Antes de conocer la instruccin para modificar un registro queremos hablar un poco sobre
la instruccin Update de Sql.
La instruccin Update de SQL modifica un registro o conjunto de registros; su formato es
el siguiente:
Update Tabla set campo1=dato1,campo2=dato2

Si queremos que en la tabla Empleados se modifique un dato en bloque como el hecho de


que a todos los empleados se le modifique el campo sindicato y se le grabe en este dato
la letra N; lo hacemos as:
Update Empleados set sindicato =N

Pero si lo que queremos es modificar el sindicato solo del empleado de cdigo 006, lo
hacemos de la siguiente manera:
Update Empleados set sindicato =N where codigo=006

Probemos con una modificacin a mas de un campo de la tabla; modificar el nombre por
el nombre Juan Garca, el sueldo por 8600, la fecha de ingreso por 01/10/2003 y el
departamento por 02 siempre del empleado de cdigo 006; la instruccin la haremos en
varias lneas para una mayor comprensin:
Update Empleados set nombre=Juan Garca,
Sueldo = 8600,
Fechaingreso=01/10/2003,
Departamento=02
where codigo=006

Si tuvisemos que hacer la modificacin usando las casillas del formulario como
parmetros , metiendo toda la instruccin Update en una variable (MstrSql) lo haramos
de la siguiente manera:
MstrSql=Update Empleados set nombre= & TXTNOMBRE & , _
& Sueldo = & TXTSUELDO & ,
_
& Fechaingreso= & TXTFECHAINGRESO & , _
& Departamento= & TXTDEPARTAMENTO & _
& where codigo= & TXTCODIGO &

En esta rutina queremos que tengan en cuenta los siguientes puntos:


- Despus de la palabra SET debe ir un espacio
- Antes de la palabra WHERE debe ir un espacio
- El ultimo dato que se modifica (antes de la palabra WHERE) no lleva coma al final
(,).
Hagamos la rutina completa; entre al botn Modificar y escriba las siguientes
instrucciones:(R011)
MstrSql = "Update Empleados set nombre=' " & TXTNOMBRE & " '," _
& "Direccion=' " & TXTDIRECCION & " '," _
& "Fechaingreso=' " & TXTFECHAINGRESO & " '," _
& "Sueldo = " & TXTSUELDO & ", " _
& "Telefono=' " & TXTTELEFONO & " '," _
& "estadocivil=' " & TXTESTADOCIVIL & " '," _
& "sexo=' " & TXTSEXO & " '," _
& "departamento=' " & TXTDEPARTAMENTO & " '," _
& "sucursal=' " & TXTSUCURSAL & " '," _
& "sindicato=' " & TXTSINDICATO & " ' " _
& " where codigo=' " & txtcodigo & " ' "
Con.Execute (MstrSql)
Con.Committrans

Debe recordar el punto que hemos visto en captulos anteriores, y es que entre el
apstrofe (comillas simples) y las comillas dobles no va espacio, y que antes y despus
del smbolo Aspersan (&) debe ir espacio.
Corra su aplicacin y modifique los datos de varios empleados.
Un detalle mas para este captulo; en los tres botones de Salvar,Modificar y Eliminar
agregaremos unas instrucciones que controlen lo siguiente: solo se pueda entrar a estas
rutinas si se ha introducido un cdigo de empleado; entre a estos botones y agregue las
siguientes instrucciones:
IF TXTCODIGO=EMPTY THEN
EXIT SUB

END IF

Gua de trabajo Captulo No. 12


1. A qu se le llama Editar datos
2. En qu evento se trabaja para editar los datos de un registro
3. Al buscar un registro en la tabla al haber introducido su cdigo qu sucede en
los siguientes casos:
a. Qu sucede con los botones Salvar, Modificar y Eliminar si el registro no es
encontrado
b. Qu sucede con los botones Salvar, Modificar y Eliminar si el registro es
encontrado
4. Qu debe tomar en cuenta para que la edicin de fechas no presente conflicto
5. Qu tienen en comn los botones de Salvar y Modificar
6. En el formulario Frmart haga lo siguiente:
a. Programe la rutina de Edicin de datos
b. Programe la rutina de Eliminacin de registro
c. Programe la rutina de Modificacin
7. En el formulario Frmcli haga lo siguiente:
b. Programe la rutina de Edicin de datos
b. Programe la rutina de Eliminacin de registro
c. Programe la rutina de Modificacin
8. En el formulario Frmfac haga lo siguiente:
c. Programe la rutina de Edicin de datos
b. Programe la rutina de Eliminacin de registro
c. Programe la rutina de Modificacin

Captulo 13
Navegacin en una Tabla de datos
I.

Objetivo General
Conocer el concepto de navegacin

II.

Objetivos especficos
Programar en los formularios los botones Ir a primer registro, Siguiente, ltimo
registro y anterior

III.

Contenido
1. Navegacin
2. Primer Registro
3. Ultimo registro
4. Siguiente Registro
5. Registro Anterior

1. Navegacin
Se le llama navegacin dentro de una tabla a la actividad de poder ir hacia el registro
adelante, al registro anterior, al inicio o al final.
Este mecanismo le permite al usuario poder examinar los datos de una manera dinmica,
pues pude ver la informacin de un empleado sin tener que estar introduciendo cada vez
el cdigo del empleado.
Para poder trabajar con estos conceptos le pedimos que cree cuatro botones a los cuales
llamar de la siguiente manera:
Inicio
Siguiente
Anterior
Ultimo
A cada uno de estos botones debe pegarle una imagen con el mismo nombre; estas
imgenes las puede encontrar en la carpeta c:\winsystem\imagenes
Estos botones deben estar dispuestos en la parte inferior de su Tabbed Dialog (tabla) de
la siguiente forma:

2. Primer Registro

Programaremos que al presionar el botn inicio le aparezca por pantalla el primer registro
de la tabla (primer cdigo segn sea el orden). Entre a este botn al evento clic y escriba
la siguiente rutina: (R012)
Dim ZZ As rdoResultset
Set ZZ = Con.OpenResultset("SELECT * FROM EMPLEADOS ORDER BY CODIGO", rdOpenDynamic)
ZZ.MoveFirst
If ZZ.EOF Then
Else
txtcodigo = ZZ!CODIGO
End If

Corra su programa y compruebe que al presionar el botn inicio le aparece el primer


registro
Explicaremos la rutina:
Dim ZZ As rdoResultset
Set ZZ = Con.OpenResultset("SELECT * FROM EMPLEADOS ORDER BY CODIGO", rdOpenDynamic)

En una variable ZZ de tipo rdoResultset leemos la tabla empleados con toda su


informacin ordenada por codigo; al ordenarla por codigo tenemos la seguridad que el
primer registro ser el de menor cdigo segn sea el orden:
ZZ.MoveFirst

Nos ubicamos en el primer registro de los que se leyeron


If ZZ.EOF Then

Preguntamos si hay registros ledos , es decir si ZZ esta vaca (ZZ.EOF); si est vaco no
habra registro qu presentar
Else
txtcodigo = ZZ!CODIGO

Si hay informacin el programa entrar a esta parte, exactamente al primer registro, por
tanto hacemos la asignacin del dato codigo a la casilla TXTCODIGO, que a la vez
llamar el resto de datos por la programacin que hicimos en su evento Change.
End If

2. Ultimo Registro

Programaremos que al presionar el botn ultimo le aparezca por pantalla el ltimo registro
de la tabla (ltimo cdigo segn sea el orden). Entre a este botn al evento clic y escriba
la siguiente rutina: (R013)
Dim ZZ As rdoResultset
Set ZZ = Con.OpenResultset("SELECT * FROM EMPLEADOS ORDER BY CODIGO", rdOpenDynamic)
ZZ.Movelast
If ZZ.EOF Then
Else
txtcodigo = ZZ!CODIGO
End If

Corra su programa y compruebe que al presionar el botn inicio le aparece el ltimo


registro
Explicaremos la rutina:
Dim ZZ As rdoResultset
Set ZZ = Con.OpenResultset("SELECT * FROM EMPLEADOS ORDER BY CODIGO", rdOpenDynamic)

En una variable ZZ de tipo rdoResultset leemos la tabla empleados con toda su


informacin ordenada por codigo; al ordenarla por codigo tenemos la seguridad que el
ltimo registro ser el de mayor cdigo segn sea el orden:
ZZ.Movelast

Nos ubicamos en el ltimo registro de los que se leyeron


If ZZ.EOF Then

Preguntamos si hay registros ledos , es decir si ZZ esta vaca (ZZ.EOF); si est vaco no
habra registro qu presentar
Else
txtcodigo = ZZ!CODIGO

Si hay informacin el programa entrar a esta parte, exactamente al ltimo registro, por
tanto hacemos la asignacin del dato codigo a la casilla TXTCODIGO, que a la vez
llamar el resto de datos por la programacin que hicimos en su evento Change.
End If

3. Registro anterior

Programaremos que al presionar el botn anterior le aparezca por pantalla el registro


anterior del que mira por pantalla. No tiene sentido hacer este procedimiento (registro
anterior) si no tenemos por pantalla los datos de un empleado; por tal razn
programaremos en este botn que si no existe un empleado por pantalla que no ejecute
nada, simplemente que se salga. Entre a este botn al evento clic y escriba la siguiente
rutina:
If txtcodigo = empty then
Exit sub
End if
A continuacin escriba la siguiente rutina: (R014)
Dim ZZ As rdoResultset

Set ZZ = Con.OpenResultset("SELECT * FROM EMPLEADOS WHERE CODIGO<' " & _


txtcodigo & " ' ORDER BY CODIGO", rdOpenDynamic)
ZZ.MoveLast
If ZZ.EOF Then
Else
txtcodigo = ZZ!CODIGO
End If

Corra su programa y ubquese en el ltimo registro, y a partir del ltimo registro presione
el botn anterior
Explicaremos la rutina:
Dim ZZ As rdoResultset

Set ZZ = Con.OpenResultset("SELECT * FROM EMPLEADOS WHERE CODIGO<' " & _


txtcodigo & " ' ORDER BY CODIGO", rdOpenDynamic)

En una variable ZZ de tipo rdoResultset leemos la tabla empleados con la informacin


ordenada por codigo pero de los registros cuyo cdigo es menor del que est en pantalla;
al ordenarla por codigo tenemos la seguridad de que el ltimo registro de los que fueron
ledos ser el anterior al registro que est en pantalla
ZZ.Movelast

Nos ubicamos en el ltimo registro de los que se leyeron


If ZZ.EOF Then

Preguntamos si hay registros ledos , es decir si ZZ esta vaca (ZZ.EOF); si est vaco no
habra registro qu presentar

Else
txtcodigo = ZZ!CODIGO

Si hay informacin el programa entrar a esta parte, exactamente al ltimo registro, por
tanto hacemos la asignacin del dato codigo a la casilla TXTCODIGO, que a la vez
llamar el resto de datos por la programacin que hicimos en su evento Change.
End If

4. Registro Siguiente

Programaremos que al presionar el botn siguiente le aparezca por pantalla el registro


siguiente del que mira por pantalla. No tiene sentido hacer este procedimiento (registro
siguiente) si no tenemos por pantalla los datos de un empleado; por tal razn
programaremos en este botn que si no existe un empleado por pantalla que no ejecute
nada, simplemente que se salga. Entre a este botn al evento clic y escriba la siguiente
rutina:
If txtcodigo = empty then
Exit sub
End if
A continuacin escriba la siguiente rutina: (R015)
Dim ZZ As rdoResultset

Set ZZ = Con.OpenResultset("SELECT * FROM EMPLEADOS WHERE CODIGO>' " & _


txtcodigo & " ' ORDER BY CODIGO", rdOpenDynamic)
ZZ.Movefirst
If ZZ.EOF Then
Else
txtcodigo = ZZ!CODIGO
End If

Corra su programa y ubquese en el primer registro, y a partir del primer registro presione
el botn siguiente
Explicaremos la rutina:
Dim ZZ As rdoResultset

Set ZZ = Con.OpenResultset("SELECT * FROM EMPLEADOS WHERE CODIGO>' " & _


txtcodigo & " ' ORDER BY CODIGO", rdOpenDynamic)

En una variable ZZ de tipo rdoResultset leemos la tabla empleados con la informacin


ordenada por codigo pero de los registros cuyo cdigo es mayor del que est en pantalla;
al ordenarla por codigo tenemos la seguridad de que el primer registro de los que fueron
ledos ser el siguiente al registro que est en pantalla

ZZ.Movefirst

Nos ubicamos en el primer registro de los que se leyeron


If ZZ.EOF Then

Preguntamos si hay registros ledos , es decir si ZZ esta vaca (ZZ.EOF); si est vaco no
habra registro qu presentar
Else
txtcodigo = ZZ!CODIGO

Si hay informacin el programa entrar a esta parte, exactamente al primer registro, por
tanto hacemos la asignacin del dato codigo a la casilla TXTCODIGO, que a la vez
llamar el resto de datos por la programacin que hicimos en su evento Change.
End If

Gua de trabajo Captulo No. 13


1. En el formulario Frmart haga lo siguiente:
d.
b.
c.
e.

Programe la rutina de ir al primer registro


Programe la rutina de ir al registro siguiente
Programe la rutina de ir al ltimo registro
Programe la rutina de ir al registro anterior

2. En el formulario Frmcli haga lo siguiente:


e.
b.
c.
e.

Programe la rutina de ir al primer registro


Programe la rutina de ir al registro siguiente
Programe la rutina de ir al ltimo registro
Programe la rutina de ir al registro anterior

3. En el formulario Frmfac haga lo siguiente:


f.
b.
c.
e.

Programe la rutina de ir al primer registro


Programe la rutina de ir al registro siguiente
Programe la rutina de ir al ltimo registro
Programe la rutina de ir al registro anterior

Captulo 14
Presentacin de Datos por Columnas
I.

Objetivo General
Conocer el concepto de Consulta Global de Datos

II.

Objetivos especficos
Conocer el control VsFlexGrid y Remote Data Control, y la Interface entre SQL
y Visual Basic

III.

Contenido
1. Consulta de datos
2. Control VsFlexGrid
3. Control Remote Data Control
4. Conexin entre el VsFlexGrid y el Remote Data Control
5. Seleccionando un registro de la Pantalla de Datos en columnas
6. Ttulos y Anchuras de columnas

1. Consulta de datos
En este captulo manejaremos por primera vez el concepto de presentacin de datos en
forma de columnas; una de las ventajas que tienen programas como Excel es que nos
permite ver la informacin total en diferentes columnas, y de esa manera tener una visin
de varios registros a la vez.
En Visual Basic podemos tener una presentacin de los datos en una pantalla donde
podamos ver tambin un conjunto de registros, y a la vez poder seleccionar entre ellos
uno, al cual podamos dar un tratamiento individual.
2. Control VsFlexGrid
Para poder hacer una presentacin de los datos en columnas necesitamos de dos nuevos
componentes: VsFlexGrid y Remote Data Control; estos componentes no estn
disponibles en la seccin de controles de Visual Basic, as que tendr que integrarlos a la
seccin de controles; pero antes debe entender que la presentacin de datos en
columnas la haremos en la gua o tabulador de su tabbed dialog (tabla) denominada:
Consulta.
Agregue el control VideoSoft Vsflex 6.0 Control (DAO); no lo busque por orden
alfabtico, lo encontrar al inicio de la lista de componente del cuadro de componentes;
este control le generar varias figuras, pero el que usaremos ser el siguiente:

Pegue un VsFlexGrig en el tabbed dialog de tal manera que cubra todo el espacio de la
gua o tabulador Consulta; debe quedarle as:

Trabajaremos las siguientes propiedades de este control:


a. Name: Vs
b. Fiexed Cols: 0 (para que la primera columna (color gris) no
quede fija)
3. Control Remote Data Control
Agregue el control Microsoft Remote Data Control 6.0 ; este control le generar la
siguiente figura:

No debe confundir este control con uno llamado Data:

Pegue un Remote Data Control (MSRDC) en el tabbed dialog de tal manera que quede
por debajo del VsFlexGrid; debe quedarle de la siguiente manera:

Trabajaremos las siguientes propiedades de este control:


a. Name: Datos
b. DataSourceName:
En esta propiedad le indicaremos con qu ODBC trabajaremos; vaya a esta propiedad y
abra el combo que usted ver; le aparecer una lista con varios ODBC:

Seleccione el ODBC llamado Sistema.


c. Sql:
En esta propiedades indicaremos qu tabla de datos queremos leer; vaya a esta
propiedad y escriba lo siguiente: Select * From Empleados

4. Conexin entre el VsFlexGrid y el Remote Data Control


Para poder presentar los datos en pantalla es necesario hacer una conexin entre el
VsflexGrid y el MSRDC; tal conexin la haremos siguiendo estos pasos:
a. Haga clic sobre el Vsflexgrid (Vs) pues ste debe estar seleccionado para hacer
la conexin
b. Vaya a la propiedad DataSource y abra el combo que le aparece:

Note que le aparece el nombre del MSRDC que hemos hecho en pantalla (Datos); debe
seleccionarlo
c. Vaya a la propiedad Datamode y abra el combo que le aparece:

Debe seleccionar la opcin: 1 flexDMBound


Esto permitir ver el desplazamiento en la pantalla entre las celdas
Antes de correr su aplicacin haga clic en la gua o tabulador Datos Generales
Corra su aplicacin
5. Seleccionando un registro de la Pantalla de Datos en columnas
Entraremos a un detalle muy interesante, y es el hecho de poder seleccionar un registro
de la pantalla que presenta los datos en columnas; al seleccionarlo, presentaremos sus
datos individualmente en la pantalla de datos generales; siga estos pasos:
a. Pegue un botn en la parte inferior derecha del tabbed dialog, por debajo del
Vsflexgrid; este botn debe llamarse Seleccionar, y en la propiedad caption
Debe tener el rtulo: Seleccionar; debe quedarle as:

b. Ahora entre al evento clic del botn Seleccionar y escriba lo siguiente:


Vs.Col =0
TXTCODIGO=Vs.Text
Tabla.Tab=0
Corra su aplicacin y pruebe seleccionar un registro de la pantalla donde se le presentan
los datos en columnas.
Explicaremos la tres instrucciones anteriores:
Vs.Col =0
Ubica el cursor en la columna 0 del VsFlexgrid; en la columna cero (0) se encuentra el
dato del cdigo del empleado

TXTCODIGO=Vs.Text
Asignamos a la casilla TXTCODIGO, el texto de la columna cero (0) que es el cdigo del
empleado
Tabla.Tab=0
Nos ubicamos en la gua o tabulador Cero del tabbed dialog, que es donde est la parte
de los datos generales; recuerde que nuestro tabbed dialog tiene dos guas o tabuladores:
Tab=0 Datos Generales
Tab=1 Consulta
Aqu cabe solucionar un problema que se ha dado al trabajar la parte de Consulta del
tabbed dialog, y es el hecho de que si al correr su aplicacin usted en la pantalla est en
la parte del tabbed dialog de Consulta, le aparece de entrada la pantalla de Consulta, y la
que siempre debe salir es la parte de: Datos Generales; esto lo solucionamos agregando
a la rutina: DATOSINICIALES la instruccin:
Tabla.Tab = 0
Haga este ltimo cambio y corra su aplicacin:
6. Ttulos y Anchuras de columnas
En este inciso trabajaremos en la definicin de ttulos y anchura de las columnas de la
consulta; de entrada usted puede notar que los ttulos de las columnas en la consulta son
los nombres de los campos de la tabla de datos, y que la anchura no corresponde al dato
que aparece, para el caso, la anchura de la direccin es muy pequea.
Para definir ttulos y columnas lo haremos en el evento clic del tabbed dialog; haga doble
clic sobre cualquiera de las guas del tabbed dialog (Datos personales o Consulta); le
aparecer el evento Dobleclic:
Private Sub tabla_DblClick()
End Sub
Abra el evento Clic y escriba la siguiente rutina:(R016)
Select Case tabla.Tab
Case 1
Datos.Refresh
With Vs
.Row = 0

.Col = 0
.Text = "Cdigo"
.Col = 1
.Text = "Nombre del Empleado"
.Col = 2
.Text = "Direccion"
.Col = 3
.Text = "Fecha"
.Col = 4
.Text = "Sueldo"
.Col = 5
.Text = "Telefono"
.Col = 6
.Text = "Est.Civil"
.Col = 7
.Text = "Sexo"
.Col = 8
.Text = "Depto."
.Col = 9
.Text = "Sucursal"
.Col = 10
.Text = "Sindicato"
.ColWidth(0) = 800
.ColWidth(1) = 2300
.ColWidth(2) = 4200
.ColWidth(3) = 1000
.ColWidth(4) = 1200
.ColWidth(5) = 800
.ColWidth(6) = 800
.ColWidth(7) = 800
.ColWidth(8) = 800
.ColWidth(9) = 800
.ColWidth(10) = 800
End With
Vs.SetFocus
End Select
Escriba esta rutina en el lugar que se le ha indicado y corra su aplicacin:
Explicaremos esta rutina:
Select Case tabla.Tab
Case 1
Esta rutina solo se ejecutar cuando se haga clic en la gua No. 1 del tabded dialog
(Consulta)

Datos.Refresh
Esta instruccin actualiza cualquier cambio que se haya hecho a la tabla de datos; esto es
muy importante, pues si no usamos esta instruccin se dar el siguiente fenmeno: si
usted agrega un nuevo registro, no lo ver en la consulta a menos que vuelva a correr su
aplicacin.
With Vs
End With
Esto indica que todo lo se haga entre la instruccin With Vs y la instruccin End With
debe agregarse el nombre Vs; para el caso note las siguientes instrucciones:
.Row = 0
.Col = 0
.Text = "Cdigo"
Estas tres instrucciones deberan escribirse de la siguiente manera:
Vs.Row = 0
Vs.Col = 0
Vs.Text = "Cdigo"
Esta forma anterior se abrevia utilizando With Vs y End With
.Row = 0
Ubica el cursor en la Fila 0
.Col = 0
.Text = "Cdigo"
Ubica el cursor en la columna 0 y escribe como texto el rtulo: Cdigo
.Col = 1
.Text = "Nombre del Empleado"
Ubica el cursor en la columna 1 y escribe como texto el rtulo: Nombre del Empleado.
Nota: se est trabajando siempre en la Fila 0
Los otros rtulos siguen la misma explicacin.
.ColWidth(0) = 800
.ColWidth(1) = 2300

Se le da a la columna 0 la anchura de 800 pixeles


Se le da a la columna 1 la anchura de 2300 pixeles
Las otras instrucciones sobre la anchura de columnas siguen la misma explicacin.
Nota: no se puede decir el No. de pixeles que debe usarse en cada caso; debe hacerlo a
prueba y ver cmo le parece en cada caso.
Vs.SetFocus
Finalmente nos aseguramos que el cursor quede ubicado en la pantalla de los datos
(VsFlexgrid)

Gua de trabajo Captulo No. 14


1. En qu propiedad del VsFlexGrid se indica si se desea o no tener columnas
fijas
2. En qu propiedad del Remote Data Control se indica a qu ODBC se conectar
3. En qu propiedad del Remote Data Control se indica qu de datos se leer
4. En qu propiedad del VsFlexGrid se conecta con el Remote Data Control
5. En qu propiedad del VsFlexGrid se indica que el movimiento del cursor se mire
al desplazarse por los datos
6. En el formulario Frmart haga la consulta de datos por columnas
7. En el formulario Frmcli haga la consulta de datos por columnas
8. En el formulario Frmfac haga la consulta de datos por columnas

Captulo 15
Pantallas de ayuda para enlace con Tablas
1.

Objetivo General
Conocer el concepto de Formularios de ayuda

II.

Objetivos especficos
Crear un sistema de que permita llamar una lista de elementos de donde se
pueda seleccionar un determinado registro no conociendo su cdigo

III.

Contenido
1. Creando formulario de ayuda

1. Creando un formulario de ayuda


En este captulo queremos agregar un concepto nuevo: Pantallas de ayuda; en el
formulario Frmemple usted tiene el punto que al introducir el cdigo del departamento le
aparece el nombre del departamento, as como tambin lo relativo a la sucursal; sera de
mucha ayuda que al presionar sobre un botn apareciera la lista de departamentos, y de
esa lista poder seleccionar el departamento que se desea, y a eso nos dedicaremos en
este captulo.
Siga los siguientes pasos:
a. Crearemos un nuevo formulario al que llamaremos Frmlis con el siguiente ttulo

Centre el formulario en la pantalla.


b. Pegue un VsFlexGrid en el formulario de tal manera que cubra casi el total del

espacio del formulario; pegue un Remote Data Control en la parte inferior de su


pantalla, de igual manera como se hizo para la consulta de datos en el captulo
anterior.
Debe trabajar las siguientes propiedades del Remote Data Control:
Name: Data
DataSourceName: conctelo a su ODBC (Sistema)
Debe trabajar las siguientes propiedades del VsflexGrid (Vs):
Name:
FixedCols:
Datasource:
Datamode:

Vs
0
Data
1 flexDMbound

Debe tener lo siguiente:

c. Pegue un textbox en la parte superior del Vsflexgrid y llmelo: Busque


d. Pegue un botn en la parte inferior derecha del Vsflexgrid y llmelo:
Seleccionar
e. Cree tres variables de mdulo de tipo string: Mstexto, Mstexto2 y ListaSql
Public Mstexto as String
Public Mstexto2 as String
Public ListaSql as String

f. Entre al evento clic del botn Seleccionar y escriba lo siguiente:


Vs.col=0
Mstexto=Vs.text
Vs.col=1
Mstexto2=Vs.text
Unload me
g. Vaya al form_load y escriba:
Frmlis.Caption=Tituloform
Data.Sql=ListaSql
Data.Refresh
h. Estando en el form_load abra un Nuevo evento del formulario llamado: Activate
y escriba lo siguiente: (R1400)
With Vs
.Row = 0
.Col = 0
.Text =Cdigo
.Col = 1
.Text =Descripcin
.ColWidth(0)=1000
.ColWidth(1)=8000
End With
If Vs.Rows=1 then
Msgbox No hay datos en la tabla
Unload me
Else
Vs.Setfocus
Vs.Row = 1
Vs.col = 0
End if
i. Entre al evento Keypress del textbox Busque y escriba lo siguiente: (R1401)
If KeyAscii = 13 Then
Lar = Trim(Busque.Text)
SQL = ListaSql + " Where " & Cadena & " Like '%" & Lar & "%'"
DATA.SQL = SQL
DATA.Refresh
End If

With Vs
.Row = 0
.Col = 0
.Text = "Cdigo"
.Col = 1
.Text = "Descripcin"
.ColWidth(0) = 1000
.ColWidth(1) = 8000
End With
j. Ahora vaya al formularario Frmemple
k. Si la anchura de su textbox es pequea, ampliar un poco mas, as:

l. Haga un pequeo botn incrustado en el textbox txtdepartamento, al cual


llamar: boton1; el caption de este botn debe tener tres puntos (...), as:

Nota: para que el botn quede bien incrustado dentro de la casilla auxliese de las
propiedades Heigth, Top , Width y Left
m. Entre al evento clic del botn Boton1 y escriba lo siguiente: (R1402)
ListaSql=Select codigo,nombre from departamentos
Cadena=Nombre
Tituloform=Lista de Departamentos
Mstexto=empty
Mstexto2=empty
Frmlis.Show 1
If Mstexto=empty then
Else
Txtdepartamento=Mstexto
Txtnomdepartamento=Mstexto2
End if
n. Cree a nivel de mdulo las siguientes variables de tipo String: cadena,
Tituloform
Public Cadena as String
Public Tituloform as String
Estamos listos para probar nuestra aplicacin; el formulario que debe correr es Frmemple.
Pregunta:
Qu tenemos que hacer para que funcione para sucursal

a. Haga un pequeo botn incrustado en el textbox txtsucursal, al cual


llamar: boton2; el caption de este botn debe tener tres puntos (...), as:

Nota: para que el botn quede bien incrustado dentro de la casilla auxliese de las
propiedades Heigth, Top , Width y Left
b. Entre al evento clic del botn Boton2 y escriba lo siguiente:
ListaSql=Select codsuc,nomsuc from sucursales
Cadena=Nomsuc
Tituloform=Lista de Sucursales
Mstexto=empty
Mstexto2=empty
Frmlis.Show 1
If Mstexto=empty then
Else
Txtsucursal=Mstexto
Txtnomsucursal=Mstexto2
End if

Gua de trabajo Captulo No. 15

1. En el formulario Frmart haga el sistema de ayuda para la lnea y la unidad de


medida

2. En el formulario Frmcli haga el sistema de ayuda para el vendedor

3. En el formulario Frmfac haga el sistema de ayuda para la sucursal, vendedor y


cliente

Captulo 16
Manejo de Fotografa
I.

Objetivo General
Conocer el concepto de Manejo de imgenes

II.

Objetivos especficos
Crear un sistema de que permita llamar buscar un imagen y grabarla en el
registro de un empleado; control PictureBox

III.

Contenido
1. Agregar un campo (textbox) a la captura de datos
2. Sistema buscador de fotografa

Nota: Asegurarse de tener los siguientes subdirectorios:


C:\Winsystem\FotosEmp
C:\Winsystem\FotosCli
C:\Winsystem\FotosArt

con fotos de empleados


con fotos de clientes
con fotos de artculos

1. Agregar un campo (textbox) a la captura de datos


Trabajaremos en el formulario Frmemple; queremos agregar un nuevo dato a la captura de datos:
Fotografa (TXTFOTOGRAFIA); agregue este textbox en un espacio de su formulario; debe
quedarle de la siguiente manera:

La casilla TXTFOTOGRAFIA debe tener una longitud mxima de 250; ahora vaya a la base de
datos y en la tabla Empleados agregue un campo llamado Fotografia,
tipo text y una longitud 250; recuerde que en access debe indicar que permita longitud cero (0).

Ahora debe incluir este nuevo textbox en la programacin de los siguientes lugares:
a. Rutina Datosiniciales
TXTFOFOGRAFIA=EMPTY
b. Botn Salvar (lo que est en negrita es lo que debe agregar a la instruccin Insert)
MSTRSQL = "Insert into empleados(fotografia,codigo,nombre,direccion,fechaingreso," _
& "sueldo,telefono,estadocivil,sexo,departamento,sucursal," _
& "sindicato) Values (" _
& "'" & TXTFOTOGRAFIA & "'," _
& "'" & txtcodigo & "'," _

c. Botn modificar (lo que est en negrita es lo que debe agregar a la instruccin Update)
MSTRSQL = "Update Empleados set nombre='" & TXTNOMBRE & " '," _
& "fotografia='" & TXTFOTOGRAFIA & "'," _
& "Direccion='" & TXTDIRECCION & "'," _

C. Evento Change del textbox TXTCODIGO (lo que est en negrita es lo que debe
agregar )
If Not IsNull(ZZ!sindicato) Then
TXTSINDICATO = ZZ!sindicato
End If
If Not IsNull(ZZ!FOTOGRAFIA) Then
TXTFOTOGRAFIA = ZZ!FOTOGRAFIA
End If
End Select

d. Agregarle a TXTFOTOGRAFIA en el evento Gotfocus la instruccin SendKey


Para probar si todo est correcto le pedimos que grabe un empleado nuevo con cdigo
XXX, con datos inventados, y en el dato de la fotografa escriba: FOTO1.
Despus de agregar el empleado, llmelo de nuevo y modifique cualquier dato, menos el
dato de la fotografa:

2. Sistema buscador de fotografa


Ahora agregaremos un sistema que permita buscar la fotografa del empleado entre un grupo de
fotografas.
Pegue un Picture box (

) por encima del TXTFOTOGRAFIA, as:

Lo que sigue es preparar un sistema que nos permita ver las fotografas de los empleados en una
lista y a la vez poder seleccionar una fotografa de esta lista:

Siga con mucho cuidado los siguientes pasos:


a. Haga un nuevo formulario llamado: Frmlisd (centrado en pantalla)

b. Pegue un DriverListbox (

)y llamarlo: CONTROL1

C. Por debajo deL driverListbox CONTROL1, pegue un Dirlistbox (


CONTROL2

d. Por la derecha del Dirlistbox CONTROL2 pegue un FileListbox (


CONTROL3

) y llamarlo

) y llamarlo:

e. Por debajo de CONTROL2 y CONTROL3 pegue un label al cual debe llamar


RUTA (caption en blanco)

f. Por la derecha de CONTROL3 pegue un Picture box y llamarlo cuadro


g. Por debajo del Picture box CUADRO pegue un botn y llamarlo SELECCIONAR
El montaje finalmente debe quedarle de la siguiente manera:

h. Entre al evento Change de CONTROL1 y escriba:

CONTROL2.path = CONTROL1.Drive
i. Entre al evento Change de CONTROL2 y escriba:
CONTROL3.path = CONTROL2.path
j. Entre al evento clic de CONTROL3 y escriba lo siguiente:
If Mid$(Control3.Path, Len(Control3.Path), 1)=\ Then
RUTA=CONTROL3.Path + CONTROL3.FileName
Else
RUTA=CONTROL3.Path + \ +CONTROL3.FileName
End If
CUADRO.Picture = LoadPicture(RUTA)

k. Entre al evento Keyup de CONTROL3 y escriba lo siguiente: (la misma rutina


anterior)
If Mid$(Control3.Path, Len(Control3.Path), 1)=\ Then
RUTA=CONTROL3.Path + CONTROL3.FileName
Else
RUTA=CONTROL3.Path + \ +CONTROL3.FileName
End If
CUADRO.Picture = LoadPicture(RUTA)
l. Crear una variable a nivel de mdulo de tipo string llamado MSFILE
Public MSFILE as String
m. Entre al evento clic del botn Seleccionar y escriba lo siguiente:
Msfile = RUTA
Unload me
n. Ahora regrese al formulario Frmemple y pegue un botn por debajo de
TXTFOTOGRAFIA y llamarlo LLAMARFILE; en la propiedad caption escriba:
Buscar fotografa

o. Entre al evento clic del botn LLAMARFILE y escriba lo siguiente:

MSFILE=Empty
Frmlisd.Show 1
TXTFOTOGRAFIA = MSFILE
Dim FOTO As String
FOTO = TXTFOTOGRAFIA
MX = Dir(FOTO)
If MX <> Then
CUADRO.Picture = LoadPicture(FOTO)
Else
CUADRO.Picture = LoadPicture()
End if

Nos hace falta un ltimo detalle muy importante; entre al evento Change de TXTCODIGO
ubquese en la parte que donde est el siguiente bloque:
If Not IsNull(ZZ!FOTOGRAFIA) Then
TXTFOTOGRAFIA = ZZ!FOTOGRAFIA
End If
Sustituya este bloque por el siguiente:

If Not IsNull(ZZ!FOTOGRAFIA) Then


TXTFOTOGRAFIA = ZZ!FOTOGRAFIA
Dim FOTO As String
FOTO = TXTFOTOGRAFIA
MX = Dir(FOTO)
If MX <> Then
CUADRO.Picture = LoadPicture(FOTO)
Else
CUADRO.Picture = LoadPicture()
End if
Else
CUADRO.Picture = LoadPicture()
End If
Adems debe agregar en la rutina DATOSINICIALES la siguiente instruccin:
CUADRO.Picture = LoadPicture()
Corra su aplicacin
Esta rutina presenta el gran problema que cuando selecciona un archivo que no es una
imagen se trunca; para solucionar este problema vaya a la propiedad Pattern del
FileListBox llamado CONTROL3 y usted encontrar lo siguiente:
*.*
Borre y escriba esto: *.BMP; *.JPG; *.GIF
No deje espacios intercalados
Corra su aplicacin
Gua de trabajo Captulo No. 16
1. En el formulario Frmart implemente el sistema de fotografia de artculos
2. En el formulario Frmcli implemente el sistema de fotografia de clientes

Captulo 17
Mejorando la consulta
I.

Objetivo General
Crear un ambiente de consulta mas dinmico

II.

Objetivos especficos
Poder buscar dentro de la tabla cualquier dato en cualquier campo;
ordenamiento de los datos e interface entre Visual Basic y SQL

III.

Contenido
1. Busca de datos en la consulta
2. Ordenar datos
3. Interface entre Visual Basic y SQL

1. Busca de datos en la Consulta


En este captulo le daremos a la consulta de datos, 4 aspectos que harn de nuestra
consulta una actividad mas dinmica para el usuario.
Para iniciar pegue un textbox en la parte superior del Vsflexgrid y llmelo: Busque
tal y como lo hizo en el captulo No. 15; debe quedarle as:

Entre al evento Keypress del textbox Busque y escriba lo siguiente: (R1701a)


ListaSql = "Select * from empleados"
Cadena = ComboList.Text
If KeyAscii = 13 Then
Lar = Trim(Busque.Text)
SQL = ListaSql + " Where " & Cadena & " Like '%" & Lar & "%'"
Datos.SQL = SQL
Datos.Refresh
Cargarconsulta
End If

Ahora haga una rutina llamada Cargarconsulta y que tenga las siguientes instrucciones:
(R1701)
With Vs
.Row = 0
.Col = 0
.Text = "Cdigo"
.Col = 1
.Text = "Nombre del Empleado"
.Col = 2
.Text = "Direccion"
.Col = 3
.Text = "Fecha"
.Col = 4
.Text = "Sueldo"
.Col = 5
.Text = "Telefono"
.Col = 6
.Text = "Est.Civil"
.Col = 7
.Text = "Sexo"
.Col = 8
.Text = "Depto."
.Col = 9
.Text = "Sucursal"
.Col = 10
.Text = "Sindicato"
.ColWidth(0) = 800
.ColWidth(1) = 2300
.ColWidth(2) = 4200
.ColWidth(3) = 1000
.ColWidth(4) = 1200
.ColWidth(5) = 800
.ColWidth(6) = 800
.ColWidth(7) = 800
.ColWidth(8) = 800
.ColWidth(9) = 800
.ColWidth(10) = 800
End With
Vs.SetFocus
Ahora pegue por debajo de su Vsflexgrid un combobox al que llamaremos ComboList;
este combo debe tener las propiedades de siempre y en la lista de elementos debe tener
todos los campos de la tabla Empleados (el primer elemento de la lista que sea el campo
nombre):

Debe verse de la siguiente manera:

Entre al evento clic del tabbed dialog (tabla) y agregue la siguiente instruccin:
ComboLIst.ListIndex = 0 (inmediatamente despus de la instruccin: Datos.refresh
Ahora corra su aplicacin y haga las pruebas de consulta variando los campos donde se
desea consultar.
2. Ordenar datos
Ahora haremos una rutina que nos permita poder ordenar los dataos de consulta por
cualquier campo de la tabla. Pegue por debajo de su Vsflexgrid un combobox al que
llamaremos ComboOrdenar; este combo debe tener las propiedades de siempre y en la
lista de elementos debe tener todos los campos de la tabla Empleados (el primer
elemento de la lista que sea el campo Codigo):
Debe verse de la siguiente manera:

Ahora cree una variable a nivel de mdulo de string llamada Ordenar:


Public Ordenar as String
Entre de nuevo al evento keypress del textbox Busque y note los cambios que debe hacer
a la rutina:
ListaSql = "Select * from empleados"
Cadena = ComboList.Text
Ordenar = ComboOrdenar.Text
If KeyAscii = 13 Then
Lar = Trim(Busque.Text)
SQL = ListaSql + " Where " & Cadena & " Like '%" & Lar & "%' order by " & Ordenar

Datos.SQL = SQL

Datos.Refresh
Cargarconsulta
End If
Ahora entre al evento clic del combobox ComboOrdenar y escriba lo siguiente:
Ordenar = ComboOrdenar.Text
ListaSql = "Select * from empleados order by " & Ordenar
Datos.SQL = ListaSql
Datos.Refresh
Cargarconsulta
Entre al evento clic del tabbed dialog (tabla) y agregue la siguiente instruccin:
Comboordenar.ListIndex = 0 (inmediatamente despus de la instruccin:
Datos.refresh; corra su aplicacin y ordene la consulta por los capos que desee
3. Interface entre Visual Basic y SQL
Ahora le daremos a nuestra consulta una de las herramientas mas poderosas en toda
consulta, y es hacer una interface con Sql, es decir, que nos permita ejecutar
instrucciones de SQL desde Visual Basic; claro est que esta herramienta solo le servir
al usuario que conoce de SQL.
Cuando tenemos necesidad de hacer una consulta por medio del lenguaje SQL
usualmente entramos a la base de datos (Access, Oracle, Sql Server u otra) y desde all
ejecutamos las instrucciones; esto resulta a veces molesto pues se tiene que cambiar de
ambiente; lo mejor es poder hacer esta tarea desde el ambiente de Visual Basic.
Pegue por debajo del Tabbed dialog (Tabla) en la parte de consulta un textbox al cual
llamaremos: TextSQL; debe quedarle de la siguiente manera:

Este textbox debe tener programado que no se puedan introducir las camillas dobles,
pero si los apstrofes; entre al evento keypress y escriba lo siguiente:
If KeyAscii = 34 Then
KeyAscii = 0
End If
En este mismo evento agregue la siguiente programacin: (R1702)

If KeyAscii = 13 Then
If UCase(Mid(TextSql, 1, 6)) <> "SELECT" Then
MsgBox "Solo se aceptan sentencia SELECT; REVISE", vbCritical
Exit Sub
End If
On Error GoTo Errores
Datos.SQL = TextSql
Datos.Refresh
Exit Sub
Errores:
MsgBox "Existe un error en su sentencia SQL; REVISE", vbCritical
TextSql.SetFocus
End If
Para probar esta nueva rutina pruebe con las siguientes instrucciones de SQL:
a. Select codigo,nombre from empleados
Muestra la informacin del codigo y el nombre del empleado
b. Select count(codigo) from empleados
Muestra el No. registros en la tabla Empleados
c. select departamento,sum(sueldo) as Sueldos from empleados group by departamento
Muestra la sumatoria de salarios por departamento
Corra su aplicacin
Insistimos en que esta herramienta solo le servir al usuario que conoce de SQL.
Esta herramienta presenta un serio problema; despus de hacer cualquiera de las
consultas de Sql propuestas, regrese a la pantalla de Datos generales y vuelva a la
pantalla de Consulta; qu problema nota?
Entre al evento clic del Tabbed dialog (tabla) y antes de la instruccin: Datos.Refresh
escriba: Datos.Sql=Select * from Empleados
A continuacin explicaremos la rutina de interface de SQL:
If UCase(Mid(TextSql, 1, 6)) <> "SELECT" Then
Solo debemos permitir al usuario hacer consultas; el usuario no debe eliminar datos
(Delete), ni modificar datos (Update); note que todos estos commandos tienen 6 letras; la
funcin Mid nos ayuda a extraer un determinado string a partir de una determinada
posicin; en ente caso queremos saber si el usuario en las primeras 6 letras ha escrito
algo diferente a la palabra Select (SELECT)

MsgBox "Solo se aceptan sentencia SELECT; REVISE", vbCritical


Exit Sub
Si el usuario introdujo una frase diferente a SELECT debe enviarle un mensaje indicando
que solo puede usar el commando Select y a la vez sacar al usuario (Exit)
End If
Si se lleg a este punto es que se trata de una instruccin Select; ahora el trabajo
consistir en detectar si la instruccin tiene algn Error.
On Error GoTo Errores
En caso de que se detecte algn error lo enviamos a ejecutar las instrucciones que se
encuentran en la etiqueta Errores (ver mas abajo)
Datos.SQL = TextSql
Datos.Refresh
Exit Sub
Mientras no haya errores enviamos la instruccin SQL (TextSQL) al control Remote Data
Control para que la ejecute y a la vez refresque los datos y siempre hay que hacer una
salida, o de lo contrario el programa entrara a ejecutar las instrucciones de la etiqueta
Errores.
Errores:
El programa entra a la etiqueta de Errores cuando se ha detectado un error en la
instruccin SQL. Lo importante de programar esta rutina es que de no hacerlo el
programa se truncara al detectarse un error.
MsgBox "Existe un error en su sentencia SQL; REVISE", vbCritical
TextSql.SetFocus
Para probar la rutina de error ejecute las siguientes instrucciones:
a. Select codigo,nombre from empleado
El error en esta instruccin es que la tabla se llama Empleados no
Empleado
b. Select codigo nombre from empleados
El error es que entre cada campo debe ir coma (,)
Gua de trabajo Captulo No. 17
1. En el formulario Frmart implemte el sistema de Bsqueda, Ordenar datos y la
insterface con SQL
2. En el formulario Frmcli implemte el sistema de Bsqueda, Ordenar datos y la
insterface con SQL

Captulo 18
Programa Men
I.

Objetivo General
Crear un Men

II.

Objetivos especficos
Poder crear los diferentes mens de la aplicacin; barra de estado del men,
hora dinmica en el men; correr programas desde un men

III.

Contenido
1. Programa Men
2. Hora dinmica en un menu
3. Menu Editor
4. Comando Shell

1. Programa Men
Ahora haremos un programa men, el cual nos permitir integrar las diferentes opciones
de una aplicacin. Iniciaremos con el men de Recursos Humanos; necesitamos agregar
un nuevo formulario al que llamaremos: MENUREC
Por favor ampliar este formulario tanto a la derecha como hacia abajo hasta llegar al limite. Por
ahora el programa que queremos correr es Menupr, haga lo pertinente para que ste sea el
programa que se corra cuando presione Control + F5

A este formulario aplique el concepto de no permitir que se mueva ni que se pueda


minimizar o maximizar tal y como se aprendi en el captulo No. 2.
En este formulario vaya a la propiedad WindowState y seleccione la opcin Maximize
En la propiedad caption escriba: Men de Recursos humanos
Haga una barra de estado y llmela: BARRAESTADO; la barra de estado debe tener tres paneles;
de entrada solo le aparece un panel; para agregar mas paneles debe presionar el botn Insert
Panel cuando entre a las propiedades del Status bar; el primer panels debe tener una anchura de
9000; los otros dos paneles djelos con la anchura que se asigna por default.
Al correr su programa debe verse de la siguiente manera:

Entre al form_load y escriba lo siguiente:


BARRAESTADO. Panels(2)=date
2. Hora dinmica en un menu
Se le llama hora dinmica la que no es esttica, es decir, va cambiando la hora, minutos y
segundos. Siga los siguientes pasos:
a. Pegue en cualquier parte de su formulario un control que llamado TIMER (reloj)

b. El nombre de este control nos parece bien, no lo cambie; vaya a la propiedad


interval y escriba el No. 2 (esto indicar que haga el cambio de hora cada
segundo)
c. Haga doble clic sobre el control TIMER y le aparecer lo siguiente:
Private sub Timer1_timer ()
End Sub
Escriba lo siguiente: BARRAESTADO. PANELS (3)= TIME
Corra su programa
Debe verse de la siguiente manera

3. Menu Editor
Para crear un men y sus diferentes opciones entraremos al menu editor de Visual Basic;
en cualquier punto del formulario presione el clic derecho; le aparecer una pantalla con
varias opciones:

Seleccione Menu editor; le aparecer la siguiente pantalla:

Escriba en la casilla que dice Caption lo siguiente: Generales


Escriba en la casilla que dice Name lo siguiente: M1
Presione el boton Next
Lo que hemos hecho con los pasos anteriores es crear la primera opcin del men;
primero crearemos las opciones horizontales de nuestro men:
Repita los pasos anteriores con los siguientes datos para las otras opciones que
necesitamos:
Caption
Name
Mivimientos
M2
Tablas
M3
Reporte
M4
Su menu editor debe quedarle de la siguiente manera:

Ahora presione el botn OK, Corra su programa

Note que ha creado un men horizontal de 4 opciones


Creando opciones ( verticales o colgantes)
Queremos que debajo de la opcin Generales aparezcan las siguientes opciones
Calculadora
Exell
Word
Salir

Entre de nuevo al menu editor


Siga estos pasos:
a.
b.
c.
d.
e.
f.

Haga clic sobre la palabra: Movimiento


Presione el botn Insert
Note que le abre un espacio en la lnea anterior
Escriba en la casilla que dice Caption lo siguiente.Calculadora
escriba en la casilla que dice Name lo siguiente: M11
Presione el siguiente botn

Esto indicar dependencia y le provocar lo siguiente:

g.- Repita los pasos 1,2,3,4,5,6 con los siguientes datos:


Caption

Exell
Word
Salirse

Name

M12
M13
M14

h.- al terminar el ejercicio presione el boton OK


Corra su programa

Queremos que complete el ejercicio del men con lo siguiente:


Debajo de la opcin Movimientos deben aparecer las siguientes opciones
Caption
Datos de empleados
Planilla

Name
M21
M22

Debajo de la opcin Tablas deben aparecer las siguientes opciones


Caption
Name
Departamentos
Sucursales

M31
M32

Debajo de la opcin Reportes deben aparecer las siguientes opciones


Caption
Name
Lista de Empleados
Sueldos por departamento
Sueldos por sucursal
Planilla
Libro de Sueldos y Salario
Listado de Departamentos
Listado de Sucursales
Sueldos Anuales
Lista de empleados por sexo

M41
M42
M43
M44
M45
M46
M47
M48
M49

Corra su programa
Queremos complicar un poquito mas nuestro men:
Debajo de la opcin Listado de Empleados debe aparecer las siguientes opciones.
Caption
Ordenado por Cdigo
Ordenado por Nombre
Por de Fecha de Ingreso

Name
M411
M412
M413

Debajo de la opcin Sueldos por Departamento debe aparecer las siguientes opciones.
Caption
Name
Detallado
Totalizado o agrupado
Grfica
Por Departamento especfico

M421
M422
M423
M424

Debajo de la opcin Sueldo por Sucursal debe aparecer las siguientes opciones
Caption
Name
Detallado
Totalizado o agrupado
Grfica
Por Sucursal especfica

M431
M432
M433
M434

Nota: Recuerde el concepto de dependencia

El picture en un men
Se acostumbra que el men debe tener un picture o figura, usualmente es el logo de la
empresa.
Busque un control que se llama PictureBox y pguelo en el centro del formulario
MENUREC; cambie el nombre del Picturebox por: LOGO
Vaya a la propiedad Picture y asigne cualquier imagen que encuentre.
Amarrar un programa en un men
Finalmente queremos que desde el men podamos correr el programa FRMEMPLE.
Siga estos pasos:
a. Haga clic en la opcin de su men que dice: Movimiento
b. Haga clic en Datos de Empleados
c. Le aparecer lo siguiente:
Private sub M21_clic()
End sub
Escriba lo siguiente:
Frmemple.show 1
Corra su programa y desde el men entre al programa de Datos de Empleados
El uno (1) indica la modalidad de bloqueo a lo que queda atrs
4. Comando Shell
Con el comando Shell ejecutamos desde Visual Basic cualquier archivo con extensin
Exe o Com.
En nuestra pantalla de Menurec entre a la opcin Generales Word; le aparecer lo
siguiente:
Private Sub M12_Click()
End Sub
Escriba lo siguiente
File = "C:\Archivos de programa\Microsoft Office\Office\winword.exe"
MX = Dir(File)

If MX <> "" Then


RetVal = Shell(File, 1)
End If
Corra su programa
Toda la rutina anterior no es nueva para usted, pues ya la hemos trabajado en este libro;
la nica instruccin nueva es la siguiente:
RetVal = Shell(File, 1)
Retval puede ser un nombre cualquiera; para ejecutar el commando Shell es necesario
correrlo desde una variable; el no. 1 es la modalidad, concepto que ya hemos tocado en
este mismo captulo
Para la opcin que permita correr excel, escriba la siguiente rutina:
File = "C:\Archivos de programa\Microsoft Office\Office\excel.exe"
MX = Dir(File)
If MX <> "" Then
RetVal = Shell(File, 1)
End If
Para la opcin que permita correr la calculadora, escriba la siguiente rutina:
File = "C:\WINDOWS\CALC.EXE"
MX = Dir(File)
If MX <> "" Then
RetVal = Shell(File, 1)
End If
Nota: las direcciones pueden variar de un Windows a otro
Programe la opcin Salirse del men (Unload me)

Gua de trabajo Captulo No. 18


1. Haga el siguiente men: Menuinv
Este men debe tener las mismas caractersticas del men Menurec, solo que las
siguientes opciones:
Generales

Movimientos

Tablas

Reportes

Calculadora
Word
Excel
Salirse

Datos Artculos
Datos Clientes
Facturacin
Compras

Sucursales
Vendedores

Lista de Artculos
Ordenado por cdigo
Ordenado por nombre
Lista de Clientes
Ordenado por cdigo
Ordenado por nombre
Lista de Sucursales
Lista de Vendedores
Lista de Lneas
Lista de Unidades de medida
Lista de productos Costeados
Listados de Ventas
Listado General de Ventas
Ventas por Sucursal y rango de fecha
Detalladas
Agrupadas
Por Sucursal Especfica
Grfica
Ventas por Vendedor y rango de fecha
Detalladas
Agrupadas
Por Vendedor Especfico
Grfica
Ventas por Cliente y rango de fecha
Detalladas
Agrupadas
Por Cliente Especfico
Ventas por Tipo factura (Co-Cr), rango de fecha
Detalladas
Agrupadas
Por Tipo Especfico
Grfica
Listado de clientes por categora

Captulo 19
Cristal report Parte I
I.

Objetivo General
Crear reportes de una sola tabla

II.

Objetivos especficos
Conocer los conceptos bsicos de Cristal Report para generar reportes
sencillos

III.

Contenido
1. Qu es Cristal Report
2. Generando nuestro primer reporte

1. Qu es Cristal Report
Cristal Report es un generador de reportes de bases de datos; de los diferentes
generadores de reportes que existen en el mercado, Cristal Report es de los mejores. La
versin con la que trabajaremos en este libro es la versin 7.0. Cristal report le puede
generar reportes de cualquier base de datos como Access, Oracle, Sql Server, DB2 del
AS 400, etc.
2. Generando nuestro primer reporte
En este captulo trabajaremos generando reportes de una sola tabla; a la vez
conoceremos gran parte de las opciones de Cristal report.
Cmo entramos a Cristal Report
Siga los siguientes pasos:
a. \Inicio-Windows \ Programas \ Seagate Cristal Report \ 32-bit Cristal Repor Designer
b. Le aparecer una pantalla donde le pide registrarse; presione el botn que dice:
Register later
c. Le aparece una pantalla dndole la bienvenida; presione el botn Cancel

Cmo crear un Reporte nuevo


Estando en la pantalla de trabajo de Cristal report, siga estos pasos:
a. \File \ New
Le aparecer la siguiente pantalla:

b. En este libro trabajaremos con reportes de tipo standard; seleccione Standard


c. Le aparece una pantalla indicando con qu tipos de datos se trabajar; en
nuestro caso trabajaremos con datos por medio de ODBC; seleccione
SQL/ODBC
d. Le aparece una pantalla con los diferentes ODBC que existen; busque su
ODBC (Sistema); al encontrarlo haga clic sobre l y presione el botn OK

e. Le aparecer una pantalla con las diferentes tablas de la base de datos a la


cual est conectado el ODBC Sistema.

Haremos un reporte de la tabla Departamentos; en el cuadro de dilogo de la izquierda


busque la tabla Departamentos, luego presione el botn Add; como trabajaremos por
ahora con una sola tabla presionaremos el botn Done.
f. Regresamos a la pantalla que tiene los siguientes tabuladores

Haga clic en el tabulador Fields


g. Pasar a la siguiente pantalla:

Usted debe seleccionar los campos que desea aparezcan en el reporte; haga clic sobre el
campo que desee seleccionar y presione el botn Add; repita el proceso para cada
campo que desee seleccionar.
h. Ahora presione en esta misma pantalla el botn Preview report (ver parte
inferior)
i. Finalmente llegamos a la pantalla de trabajo de Cristal report; usted ver el
reporte que se genera; haga clic en el tabulador Design

Design es la modalidad de diseo, donde podemos hacer cambios al reporte; en esta


modalidad usted ver su diseo de la siguiente manera:

Secciones de la pantalla de diseo


La pantalla de diseo est dividida en varias secciones:
Report Header
Todo lo que se disee en esta parte solo saldr en la primera pgina de su reporte
Page Header
Todo lo que se disee en esta parte saldr en la parte superior de todas las pginas del
reporte; en esta parte normalmente se disean los ttulos y encabezados , aunque
tambin podra tener datos de la tabla.
Details
Esta seccin est reservada para los datos de las tablas, aunque tambin podra tener
textos as como en la seccin Page Header.
Report Fooder
Esta seccin puede contener datos y textos; saldr impreso inmediatamente despus de
la ltima lnea de detalle; generalmente en esta seccin se disean los totales del reporte

Page Footer
Todo lo que se disee en esta seccin saldr al pie de pgina de todas las pginas del
reporte
Seccin del diseo
Es la pantalla donde se disea propiamente
Barra de botones
Por debajo de las opciones del men tenemos la barra de botones de acceso rpido, la
cual es la siguiente:

Continuaremos con este captulo estudiando algunos de estos botones


Text:
Con este botn creamos textos en el reporte; para hacer un texto en el reporte presione
este botn y soltando el clic del mouse haga clic en el lugar donde desea escribir el texto;
en dicho lugar le queda una pequea casilla donde debe escribir el texto; finalmente haga
clic en otro lugar de la pantalla. Escriba el siguiente texto: Listado de Departamentos;
debe quedarle de la siguiente manera:

Si desea corregir el texto haga doble clic sobre el texto; si desea seleccionar el texto haga
clic una vez; seleccione el texto que acaba de hacer
Botones para tratamiento de textos
Son una serie de botones y listas de opciones que permiten dar propiedades al texto al
igual que cualquier programa de manejo de texto como Word de Microsoft; estos botones
son los siguientes:

Dele al texto las siguientes propiedades: Letra Arial, tamao 14, negrita y subrayado; al
cambiar tamao posiblemente tendr que estirar los lmites de la casilla del texto; ahora
tenemos lo siguiente:

Agregando lneas en una seccin


Agregaremos dos lneas a la seccin de Page Header; posicione el cursor sobre la frase
Page Hedaer y presione el clic derecho del mouse; le aparecer un men del cual debe
seleccionar la opcin que dice: Insert line; debe repetir el procedimiento para insertar otra
lnea.
Mueva los subttulos CODIGO y NOMBRE hacia abajo de tal manera que le queden de la
misma forma en que estaban. De igual manera mueva hacia abajo el texto: Listado de
Departamentos para que por encima haga el siguiente texto:
Empresa BDA System Net S de R.L.
Que tenga las mismas propiedades del texto anterior; los subttulos CODIGO y NOMBRE deben
ser modificados por los siguientes: Cdigo y Nombre de Departamento; haga doble clic en cada
uno de ellos para modificarlos; debe quitar el subrayado y asignarles letra Arial; usted debe tener
lo siguiente:

Fechas y No. de Pgina


Todo reporte debe tener Fecha y No. de pgina, as que Cristal Report ya los establece
sin que el usuario lo disee; puede quitarlos si desea, pero no es conveniente. Por la
izquierda de la fecha (PrintDate) haga el siguiente texto: Fecha; por la izquierda del No.
de pgina (Pagenumber) haga el siguiente texto: No. de Pgina; debe quedarle as:

Correr un reporte

Para correr un reporte para ver cmo se ver al imprimirlo haga clic en el tabulador que
dice Preview (a la par de Design); usted tendr el siguiente resultado:

Guardar un reporte
Antes de dar el proceso para guardar un reporte le pedimos que cree el subdirectorio
Reportes, dentro del subdirectorio Winsystem.
Ya creado el subdirectorio Reportes siga estos pasos:
a. \menu-file \ Save as; le aparece un cuadro de dilogo para indicar el
subdirectorio donde desea guardar su reporte (ubquese en C:\winsystem\Reportes)
b. Indique el nombre del reporte: REPO-01 ; luego presione OK
A partir de este momento cada vez que desee guardar solo presione el botn que tiene la
figura de un diskette
Lneas y Box
Para insertar lneas que le permitan subrayar los subttulos por ejemplo active el Line
(lnea); \menu-insert \ line; si desea usar un box (caja) en lugar de una lnea entonces
active el box; \menu-insert \box
Save data with report
Esta es una opcin que debe ser desactivada; en la opcin men file desactive esta
opcin; indica que el reporte debe guardarse con los datos que se tenga en ese momento,
lo cual es contraproducente pues las tablas estn cambiando a cada momento.
Gua de trabajo Captulo No. 19
1.
2.
3.
4.

Haga un reporte de la tabla Sucursales y llmelo REPO-02


Haga un reporte de la tabla Lneas y llmelo REPO-03
Haga un reporte de la tabla Unidades (unidades de medida) y llmelo REPO-03
Haga un reporte de la tabla Vendedores (solo deben aparecer los datos del
codigo,nombre y telefono) y llmelo REPO-04

Captulo 20
Cristal report Parte II
I.

Objetivo General
Interface entre Cristal report y Visual Basic; crear reportes con mas de una tabla

II.

Objetivos especficos
Conocer los comandos de Visual Basic para correr un reporte de Cristal report;
subtotales en reportes; Condicionales

III.

Contenido
1. Cmo correr un reporte de Cristal Report desde Visual basic
2. Reportes con mas de una tabla
3. Variables y Clculos
4. Condicionales simples
5. Condicionales anidados

1. Cmo correr un reporte de Cristal Report desde Visual basic


Antes de poder correr un reporte de cristal report en Visual Basic es necesario insertar un
nuevo control: Cristal report Control; le generar la siguiente imagen:

Pegue un cristal report control en cualquier punto del formulario; vaya a la propiedada
Name y cambie el nombre por: CRTREPORTE. Para correr un reporte de cristal report en
visual Basic se requieren de varias lneas de instrucciones. Entre a Visual Basic y
trabajemos con el formulario Menurec; haga clic en la opcin: Reportes Listado de
departamentos; le aparece lo siguiente:
Private Sub M46_Click()
End Sub
Escriba las siguientes instrucciones:(R2001)
CRTREPORTE.WindowState = crptMaximized
CRTREPORTE.Destination = crptToWindow
CRTREPORTE.ReportFileName = "C:\WINSYSTEM\REPORTES\REPO-01.RPT"

CRTREPORTE.DiscardSavedData = 1
CRTREPORTE.Action = 1
Corra su programa men y ejecute la opcin: Reportes Listado de Departamentos
Explicaremos las instrucciones anteriores
CRTREPORTE.WindowState = crptMaximized
Indica que el reporte se vea con la pantalla maximizada (toda la pnatalla)

CRTREPORTE.Destination = crptToWindow
Indica que el reporte debe ir a Pantalla, desde donde usted podr enviarlo a la impresora
CRTREPORTE.ReportFileName = "C:\WINSYSTEM\REPORTES\REPO-01.RPT"

Indica el nombre y la ubicacin del reporte


CRTREPORTE.DiscardSavedData = 1
CRTREPORTE.Action = 1
Estas dos ltimas instrucciones son necesarias para ejecutar las tres primeras
instrucciones
Ejercicios: Segn donde vayan en los diferentes programas mens (Menurec o Menuinv)
haga lo pertinente para correr los siguientes reportes: Sucursales (REPO-02), Lneas
(REPO-03), Unidades (REPO-04) y Vendedores (REPO-04)
2. Reportes con mas de una tabla
Si hablamos de un reporte con varias tablas estamos hablando de relaciones entre tablas;
haremos un reporte de los datos de la tabla empleados; queremos que aparezca el
nombre de la sucursal en la trabaja el empleado, as que habr una relacin de la tabla
Empleados y la tabla Sucursales; lo mismo sucede con el nombre del departamento
donde trabaja el empleado, de donde habr una relacin de la tabla Empleados y la tabla
Departamentos.
Haga los pasos para crear un nuevo reporte hasta llagar a la siguiente pantalla:

A diferencia del reporte que se hizo en el captulo anterior, usted debe agregar tres tablas:
Empleados, Departamentos y Sucursales; haga clic en cada una de estas tablas y
presione el botn Add; cuando ya estn seleccionadas las tres tablas presione el botn
Done y le aparecer la siguiente pantalla:

Primero debe borrar cualquier relacin que le aparezca (haga clic sobre las lneas de
direccin negras y presione la tecla Delete). Para hacer la relacin de la tabla Empleados
a la tabla Departamentos haga clic en el campo departamento de la tabla Empleados y sin
soltar el botn del mouse arrastre el mouse hasta estar sobre el campo Codigo de la tabla
Departamentos. Para hacer la relacin de la tabla Empleados a la tabla Sucursales haga
clic en el campo Sucursal de la tabla Empleados y sin soltar el botn del mouse arrastre el
mouse hasta estar sobre el campo Codsuc de la tabla Sucursales; debe quedarle de la
siguiente manera:

Ahora haga clic sobre el tabulador Fields:

Seleccione los siguientes campos:


Codigo , Nombre y Fechaingreso de la tabla Empleados; Nombre de la tabla
Departamentos; NomSuc de la tabla Sucursales y Sueldo de la tabla Empleados; luego
presione el botn Preview report
Con los conocimientos adquiridos en el captulo anterior haga que el reporte tenga la
siguiente apariencia: (no olvide el No. de pgina)

Guarde este reporte con el nombre REPO-05


Totales
En este reporte tenemos una columna numrica a la cual le podemos sacar un total;
estando en la modalidad de diseo haga clic sobre el detalle del sueldo:

Ahora Presione clic derecho y seleccione la opcin que dice: Insert Grand Total; le
aparece una pantalla donde por default le dice que sacar una sumatoria, pero usted
puede cambiar para sacar un promedio, valor mnimo o valor mximo; debe presionar el
botn Aceptar; obtendr lo siguiente:

Note que el total le aparece en la seccin Report Footer; con sus conocimientos hasta
este momento queremos que consiga lo siguiente en la seccin Report Footer:

Ordenando datos en el reporte

Para ordenar el reporte por Codigo del empleado seleccione esta combinacin: \menu
report \ Sort Records ; le aparecer la siguiente pantalla:

Haga clic en el campo: Empleados.Codigo y luego presione el botn Add; en este caso
ordenaremos los datos por un solo campo, pero usted puede ordenar por mas de un
campo; tambin puede indicar si desea un ordenamiento Ascendente o Descendente;
finalmente debe presionar el botn OK.
Al correr su reporte notar los resultados; salve el reporte
Este mismo reporte usted puede salvarlo con otro nombre: \menu-file \ Save as; de hecho
slvelo con otro nombre: REPO-06.
Ya con otro nombre haga los siguientes dos cambios:
a. El subttulo debe decir: Listado de Empleados Ordenado por Nombre
b. Cambie el ordenamiento que est por codigo a ordenamiento por nombre
Haremos un parntesis para que entre a Visual Basic y enlace los reportes REPO-05
(Ordenado por codigo) y REPO-06 (ordenado por nombre) en el programa Menurec.

3. Variables y Clculos
Una de las necesidades mas grandes en los reportes es hacer clculos en la lnea de
detalle; se necesitan hacer clculos en los casos cuando no se dispone del dato en la
tabla. Para ilustrar este tema le pedimos que llame el reporte REPO-05. Aplique los
siguientes cambios:
a. Gurdelo con el nombre: REPO-07
b. Agregue un subttulo que diga: Sueldos anuales
c. Agregue un texto de columna que diga: Sueldo anual
Debe verse as:

Necesitamos hacer el siguiente clculo: Sueldo anual = sueldo * 12; crearemos una
variable llamada Sanual; para crear una variable siga los siguientes pasos:
a. \menu insert \ Formula fields ; le aparecer la siguiente pantalla:

b. Presione el botn New


c. En una pequea pantalla se le pide el nombre de la variable; escriba Sanual,
luego presione el botn OK
d. Le aparecer la siguiente pantalla:

Esta pantalla tiene bsicamente 4 secciones:


a. Tablas y variables; es el cuadro de dilogo de la izquierda
b. Funciones; es el cuadro de dilogo del centro
c. Operadores; es el cuadro de dilogo de la derecha
d. Pantalla resultado; pantalla blanca debajo de los cuadros de dilogos
Nuestra frmula es la siguiente: Sueldo anual = Sueldo * 12; en el cuadro de dilogo de
las tablas y variables busque el campo Sueldo (Empleados.sueldo); al encontrarlo haga
doble clic sobre l y notara que pasa a la pantalla de resultados; los nombres de los
campos no se escriben, se seleccionan; ahora teclee lo siguiente : * 12 (multiplicar por
12); debe verse as:

Ahora salve la frmula:


; slgase de esta pantalla; usted regresa a la pantalla anterior,
pero con la variable que acaba de hacer:

Con el mouse arratre la variable hasta dejarla ubicada en la lnea de detalle a la par del
sueldo; tendr que borrar el nombre de la variable, que se le asigna como ttulo de la
columna, pues ya habamos puesto como ttulo de la columna el texto: Sueldo anual. De
la misma forma que definimos un total para el sueldo, obtenga el total del Sueldo Anual;
Amarre este reporte en el programa Menurec.
4. Condicionales simples
Otra de las necesidades en un reporte es poder construir condicionales que permitan
convertir cdigo en descripciones; para el caso, tenemos un listado de los empleados por
sexo; en la tabla lo que tenemos es F o M como sexo, pero nosotros queremos un reporte
con la descripcin del sexo; de la tabla de Empleados prepare el siguiente reporte:

Haremos una variable llamada NOMSEXO; haga lo necesario para crear esta variable
hasta llegar a la pantalla donde se escribe la frmula:
En el tercer cuadro de dilogo hacia la derecha (ver parte superior), haga clic en el signo
mas (+) del operador Other y tendr lo siguiente:

Haga doble clic en la lnea que dice: if x then y else z; le aparece en la pantalla de
resultados (pantalla blanca) lo siguiente:
; ahora en el cuadro de dilogo de la izquierda haga clic en el signo
mas (+) de la tabla empleados para que le aparezcan los campos de la tabla y luego haga
doble clic sobre el campo sexo; obtendr lo siguiente:
; usted debe agregarle lo siguiente:

Guarde la variable y ubquela a la par de la columna del telfono; al correr su reporte


debe quedarle de la siguiente manera:

Haga lo necesario para ordenar el reporte por Sexo y Nombre; guarde este reporte con el
nombre REPOSEXO; amarre este reporte en el programa Menurec.
5. Condicionales anidados
El condicional que hemos hecho en el inciso anterior tiene solo dos opciones; cuando se
trata de un condicional con mas de dos opciones la situacin se complica; siempre en el
mismo reporte REPOSEXO, agregaremos otra columna: Est. Civil; crearemos una
variable a la que llamaremos NOMCIVIL; conforme a lo que ha aprendido haga lo
necesario para crear la variable mencionada; al llegar a la pantalla de resultados (pantalla
blanca) debe armar su condicional considerando lo siguiente:
Estadocivil = 1

Estadocivil = 4

(Soltero) Estadocivil = 2

(Viudo) Estadocivil = 5

(Casado) Estadocivil = 3

(Divorciado)

(Otro)

Seguiremos la siguiente regla; el No. de condicionales ser igual al No. de opciones 1;


esto significa que necesitamos 4 condicionales; el primer condicional quedara as:

If {Empleados.estadocivil} = 1 then Soltero Else; despus del else construmos el otro


condicional; podemos sacar una copia de las instrucciones; con el segundo condicional la
instruccin quedara de la siguiente manera:
If {Empleados.estadocivil} = 1 then Soltero Else If {Empleados.estadocivil} = 2 then Casado Else;

con

el tercer condicional tendramos lo siguiente:


If {Empleados.estadocivil} = 1 then Soltero Else If {Empleados.estadocivil} = 2 then Casado Else If
{Empleados.estadocivil} = 3 then Divorciado Else; con el cuarto condicional cubrimos las otras

dos opciones y tendramos lo siguiente:


If {Empleados.estadocivil} = 1 then Soltero Else If {Empleados.estadocivil} = 2 then Casado Else If
{Empleados.estadocivil} = 3 then Divorciado Else If {Empleados.estadocivil} = 4 then Viudo Else Otro

Haga el proceso completo hasta ubicar el estado civil a la par de la columna del sexo; el
resultado debera ser el siguiente:

Gua de trabajo Captulo No. 20


1. Haga un reporte de artculos y llamarlo REPO-08; ordenado por cdigo; que
aparezcan los datos de Codigo, Nombre de artculo , Lnea (nombre),Unidad de
medida (Nombre), existencia y costo unitario; este mismo reporte debe producirle el
reporte REPO-09 (ordenado por Nombre de artculo); siga los mismos conceptos del
reporte REPO-05
2. Haga un reporte de Clientes y llamarlo REPO-10; ordenado por cdigo; que
aparezcan los datos de Codigo, Nombre de cliente , Vendedor (nombre), Crdito
mximo; debe tener un total de Crdito mximo,este mismo reporte debe producirle el
reporte REPO-11 (ordenado por Nombre de Cliente); siga los mismos conceptos del
reporte REPO-05
3. Haga un reporte de artculos Costeados y llmelo REPO-12; tome como base el
reporte REPO-08 y agregue como columna el siguiente clculo: Valor = Existencia *
Costo; la columna valor debe tener total
4. Haga un reporte de Clientes por categora (Codigo,Nombre y Categora) y llmelo
REPO-13; los condicionales deben trabajar en base a las siguientes opciones: A =
Excelente; B = Promedio ; C = Malo

Captulo 20
Cristal report Parte III
I.

Objetivo General
Subtotales y grficas

II.

Objetivos especficos
Conocer en cristal report las formas de hacer reportes de rupturas de control y
ocultar lneas de detalle para reportes totalizados o de sumatorias; conocer el
botn insert char (grficas); grficas de barra y pie (pastel)

III.

Contenido
1. Subtotales y rupturas de control; reportes agrupados
2. Reportes totalizados
3. Grficas

1. Subtotales y rupturas de control; reportes agrupados


En este inciso manejaremos uno de los aspectos de mayor necesidad a la hora de hacer
reportes, y es lo que se conoce con el nombre de subtotales por grupos o rupturas de
control; se requiere saber de valores agrupados por determinado item, para el caso los
sueldos; nos gustara saber los subtotales de los sueldos por sucursal o por
departamento; en el caso de las ventas igual, nos gustara saber el subtotal de ventas por
sucursal o por vendedor.
Crearemos el reporte de Sueldos por departamento; para conseguir nuestro objetivo le
pedimos abrir el reporte REPO-05:

Adems de la gerencia, hay empleados del departamento de administracin y ventas;


guarde este reporte con el nombre REPOGRU1 (Reporte agrupado). Haremos unos
cambios a este reporte; quite el subttulo de Listado de Empleados ordenado por codigo y
cmbielo por el siguiente: Sueldos por Departamento Detallado. Otro cambio que
haremos ser eliminar el dato de la sucursal.

Quite tanto el ttulo de la columna, as como el detalle de la columna; ajuste cualquier


espacio; debe quedarle de la siguiente manera:

Ahora haga clic sobre el detalle del sueldo, tal y como se mira en la figura anterior;
presione clic derecho y de las opciones que le aparecen seleccione Insert subtotal; le
aparecer la siguiente pantalla:

Debe entrar a la lista de campos y seleccionar el campo Departamentos.nombre luego


presione el botn Aceptar.
Corra su reporte

Note usted que le parecieron dos secciones mas en el diseo del reporte: Group Header y
Group Footer; en el Group Header le aparece el nombre del departamento y en el Group
Footer le aparece el subtotal del departamento; usted puede cambiar de ubicacin tanto el
nombre del departamento as como el subtotal si lo desea. En la lnea donde tenemos el
subtotal escriba el siguiente texto: Subtotal, y adems haga una lnea por arriba y por
abajo del subtotal; debe ver se as:

Guarde su reporte

Ejercicio: Haga el reporte de Sueldos por sucursal detallado; tome como base siempre el
reporte REPO-05; este nuevo reporte debe llamarse REPOGRU2; siga los mismos
conceptos vistos en el reporte anterior.
2. Reportes totalizados
Hemos visto la forma de hacer reportes con subtotales; pero se da el caso de que a nivel
gerencial interesa ver datos de subtotales sin los detalles; en nuestro caso estamos
hablando de un reporte que muestre los saldos por departamento sin el detalle de los
empleados; esto es lo que llamamos un reporte totalizado.
Abra el reporte REPOGRU1; guarde este reporte con el nombre REPOTOT1 y haga los
siguientes cambios:
a. Quite el subttulo de Sueldos por Departamento Detallado y cmbielo por el
siguiente: Sueldos por Departamento Totalizado o Agrupado
b. Oculte la lnea de detalle; sobreponga el cursor sobre la palabra Details y
presione el clic derecho; le aparecer un men del cual debe seleccionar Hide
Corra su reporte para los resultados
c. El nombre del grupo (Group # 1 name) cmbielo de ubicacin; bjelo a la misma
lnea donde est el valor del subtotal.
d. Borre la palabra subtotal, as como la lnea que est por arriba del valor del
subtotal , al igual que la lnea que est por debajo.
e. De los subttulos de las columnas solo deje Departamento y Sueldo
f. Ajuste los espacios y debera quedarle de la siguiente manera

Salve el reporte

Ejercicio: Haga el reporte de Sueldos por Sucursal Totalizado y llmelo REPOTOT2; para
este reporte debe tomar como base REPOGRU2; siga los mismos conceptos vistos en el
reporte anterior.
Antes de continuar haga el trabajo de amarrar los cuatro reportes que hemos hecho al
programa Menurec de Visual Basic
REPOGRU1 (Sueldos por Departamento Detallado)
REPOTOT1 (Sueldos por Departamento Totalizado)
REPOGRU2 (Sueldos por Sucursal Detallado)
REPOTOT2 (Sueldos por Sucursal Totalizado)
3. Grficas
Cristal report nos ofrece la opcin de poder hacer nuestras grficas; maneja un buen
desarrollador de grficas, donde podemos optar a varios tipo de grficas; para poder
hacer una grfica primero debemos hacer un reporte totalizado de los datos que se desea
graficar; en este caso haremos la grfica de sueldos por departamento; abra el reporte
REPOTOT1; guarde este reporte con el nombre REPOGRA1.
Haga Clic sobre el botn Insert Char:

; le aparecer la siguiente pantalla:

Por la izquierda tiene los tipos de grficas que puede seleccionar y por la derecha las
variaciones por grfica; cualquiera sea la grfica que use recomendamos usar la variacin
3D y no la plana; en el caso de la figura anterior la grfica por default es la grfica de
barras con su variacin plana; haga clic en el botn por debajo de la variacin plana para
trabajar en variacin 3D.
Tabulador Data
Es necesario que haga clic en esta opcin para que se activen las otras opciones que
necesitamos
Tabulador Text
Este tabulador nos lleva a la siguiente pantalla:

En la casilla Title escriba: Grfica de Sueldos por Departamentos; en la casilla Subtitle


escriba : Valores en Lempiras; en la casilla Footer escriba : Departamentos
Tabulador Options
En esta opcin activaremos la siguiente:

; para que los valores aparezcan en cada barra


Haga clic en el tabulador Type y presione el botn Aceptar; el resultado ser el siguiente:

La grfica de barras es una grfica de valores; se acostumbra tener en el mismo reporte


de grficas en la grfica llamada Pie para indicarnos valores porcentuales; arrastre la
grfica de barras hacia abajo para dejar espacio para la otra grfica. Entre de nuevo a las
grficas y seleccione la grfica tipo Pie; que sea siempre la grfica 3D; como ttulo de la
grfica escriba: Distribucin porcentual de Salarios; en la casilla Subtitle escriba : Valores
en Lempiras; en la casilla Footer escriba : Departamentos y siempre active el Show value.

Corra su reporte
Ejercicio: haga la grfica de Sueldos por sucursales y llmela REPOGRA2; aplique los
mismos conceptos de la grfica anterior. Haga el trabajo de amarrar las dos grficas que
hemos hecho al programa Menurec de Visual Basic
Gua de trabajo del Captulo No. 21
1. Haga el Reporte General de Ventas con el siguiente modelo:
BDA System Net
Departamentos de Ventas
Listado General de Ventas
No. Factura
Fecha
Tipo
Sucursal
Vendedor
Cliente
Valor
Xxxxxxxxxx xxxxxxxxx xxxxxx xxxxxxxx xxxxxxxxxxx xxxxxxxx xxxxxx
Xxxxxxxxxx xxxxxxxxx xxxxxx xxxxxxxx xxxxxxxxxxx xxxxxxxx xxxxxx
--------------------------------------Total General
xxxxxxx
--------------------------------------Para el Tipo trabaje con un condicional: Tipo= CO Contado, CR Crdito
Las tablas que se necesitan son: Facturas, Sucursales,Vendedores y Clientes; estas
tablas deben relacionarse para que aparezca el Nombre de la sucursal, Vendedor y
Cliente. El nombre del Reporte ser: VENTAS
2. Del reporte VENTAS saque el Reporte por Sucursal detallado (subtotales por
sucursal) y llamarlo VENGRU1.
Del Reporte VENGRU1 saque el reporte Totalizado y llamarlo VENTOT1
Del Reporte VENTOT1 saque la grfica x Sucursal y llamarlo VENGRA1
3. Del reporte VENTAS saque el Reporte por Vendedor detallado (subtotales por
vendedor) y llamarlo VENGRU2.
Del Reporte VENGRU2 saque el reporte Totalizado y llamarlo VENTOT2
Del Reporte VENTOT2 saque la grfica x vendedor y llamarlo VENGRA2
4. Del reporte VENTAS saque el Reporte por Cliente detallado (subtotales por
Cliente) y llamarlo VENGRU3.
Del Reporte VENGRU3 saque el reporte Totalizado y llamarlo VENTOT3
Del Reporte VENTOT3 saque la grfica x cliente y llamarlo VENGRA3
5. Del reporte VENTAS saque el Reporte por Tipo detallado (subtotales por
Tipo de venta) y llamarlo VENGRU4.
Del Reporte VENGRU4 saque el reporte Totalizado y llamarlo VENTOT4
Del Reporte VENTOT4 saque la grfica x Tipo y llamarlo VENGRA4

Captulo 20
Cristal report Parte IV
I.

Objetivo General
Filtros y Parmetros

II.

Objetivos especficos
Cmo filtar datos en reportes de cristal report desde Visual Basic; comando
Inputbox para crear filtros de datos; parmetros desde Visual Basic hacia cristal
report.

III.

Contenido
1. Inputbox
2. Parmetros
3. Rangos de Fecha

1. Inputbox
El comando inputbox nos proporciona la opcin de poder introducir por pantalla un valor
con el cual podemos fltrar datos por medio de un reporte; analicemos un caso bien
prctico; en el programa Menurec tenemos el reporte de Sueldos por departamento
especfico; lo que queremos es el mismo reporte detallado, solo que en lugar de salir
todos los departamentos, queremos los de un departamento especfico, as que usaremos
el mismo reporte REPOGRU1.
Con el comando inputbox pediremos por pantalla que el usuario introduzca el Cdigo del
departamento del cual desea los datos; entre en el programa Menurec a la opcin
Reportes Sueldos por departamento Departamento especfico y escriba lo siguiente:
Msdepartamento = InputBox("Introduzca el Cdigo del departamento", "Pantalla de parmetros")

Corra su programa, y al entrar a la opcin Reportes Sueldos por departamento


Departamento especfico le aparecer lo siguiente:

Explicaremos la instruccin

Como usted pudo comprobar, el comando inputbox le permite introducir por pantalla un
string o valor y a la vez lo almacena en una variable llamada Msdepartamento.
Ahora solo necesitamos indicar en cristal report que ejecute el reporte pero con el
siguiente filtro: Empleados.departamento = Msdepartamento, es decir, que aparezcan los
datos de los empleados que en el campo departamento tenga el mismo valor de
msdepartamento.
Su rutina del reporte debe quedar de la siguiente manera:
MSDEPARTAMENTO = InputBox("Introduzca el Cdigo del departamento", "Pantalla de parmetros")
CRTREPORTE.WindowState = crptMaximized
CRTREPORTE.Destination = crptToWindow
CRTREPORTE.SelectionFormula = "{EMPLEADOS.DEPARTAMENTO}= ' " & MSDEPARTAMENTO & " ' "
CRTREPORTE.ReportFileName = "C:\WINSYSTEM\REPORTES\REPOGRU1.RPT"
CRTREPORTE.DiscardSavedData = 1
CRTREPORTE.Action = 1
CRTREPORTE.SelectionFormula = " "

Corra su programa y saque el reporte por cada departamento


Porqu es necesario la siguiente instruccin:
CRTREPORTE.SelectionFormula = " "
Porque el control CRTREPORTE es el mismo para los otros reportes; de no limpiarse la
frmula, actuara para el siguiente reporte que se corra aunque no se exprese como parte
de las instrucciones, lo cual provocara un error.
Ejercicio: Cules seran las instrucciones para el reporte de Sueldos por Sucursal
especfica.
2. Parmetros
En muchos casos necesitaremos enviar parmetros desde Visual Basic a cristal report;
para el caso, REPOGRU1 es un reporte que puede correrse desde dos lugares: Sueldos
por Departamento Detallado y Sueldos por Departamento Especfico; cuando se corra a
travs de la opcin Reportes por Departamento Especfico queremos que aparezca un
rtulo que diga: Por departamento Especfico; este rtulo no debe aparecer en el caso
de que el reporte se corra a travs de la opcin Sueldos por Departamento Detallado;
entre a la opcin Reportes Sueldos por Departamento Por Departamento Especfico y
agregue las instrucciones que usted mire de ms en el siguiente bloque:
Rotulo= Por Departamentpo Especfico
MSDEPARTAMENTO = InputBox("Introduzca el Cdigo del departamento", "Pantalla de parmetros")
CRTREPORTE.WindowState = crptMaximized
CRTREPORTE.Destination = crptToWindow
CRTREPORTE.Formulas(0) = "XX = " + " ' " + ROTULO + " ' "
CRTREPORTE.SelectionFormula = "{EMPLEADOS.DEPARTAMENTO}= ' " & MSDEPARTAMENTO & " ' "
CRTREPORTE.ReportFileName = "C:\WINSYSTEM\REPORTES\REPOGRU1.RPT"

CRTREPORTE.DiscardSavedData = 1
CRTREPORTE.Action = 1
CRTREPORTE.SelectionFormula = " "
CRTREPORTE.Formulas(0) = " "

Todava no es posible correr el reporte; explicaremos las tres nuevas instrucciones:


Rotulo= Por Departamentpo Especfico

Creamos una variable llamada Rotulo con el string Por Departamento Especfico como
valor.
CRTREPORTE.Formulas(0) = "XX = " + " ' " + ROTULO + " ' "

Enviamos desde Visual Basic el valor de la variable Rotulo, a una variable de cristal report
llamada xx. Esto implica que debe crearse en el reporte REPOGRU1 una variable llamada
xx; esta variable debe crearse vaca.
CRTREPORTE.Formulas(0) = " "

El control CRTREPORTE es el mismo para los otros reportes; de no limpiarse la frmula,


actuara para el siguiente reporte que se corra aunque no se exprese como parte de las
instrucciones, lo cual provocara un error.
Creacin de la variable xx (vaca)
Ahora entre a cristal report y llame el reporte REPOGRU1 y cree una variable llamada xx;
cuando llegue a la pantalla donde se define la frmula deje la pantalla en blanco y guarde
la variable sin datos; regresar a esta pantalla:

Arrastre la variable xx hacia el espacio de la izquierda del ttulo: Sueldos por


Departamento Detallado, y quedar de la siguiente manera:

Asegrese de que la variable xx est en negrita; guarde su reporte y corra el reporte


desde Visual Basic; el resultado ser el siguiente:

3. Rangos de Fecha
En cualquier sistema es bastante requerido reportes por rango de fecha; por ejemplo los
reportes de ventas siempre se pedirn por rango de fecha. En el programa tenemos la
siguiente opcin: Reportes Listado de Empleados - Por Fecha de Ingreso; para obtener
este reporte el usuario tendr que introducir por pantalla un rango de fecha (Fecha inicial
y Fecha final) y deben salir los empleados que ingresaron entre las fechas especificadas.
El reporte que se correr en esta opcin es el reporte REPO-05.
Antes disearemos el siguiente formulario:

Le daremos las especificaciones para que lo haga:


Nombre del formulario: FrmFechas
Fecha inicial: TXTFECHA1 (Masketedit)
Fecha final: TXTFECHA2 (Masketedit)
Botn Aceptar; Botn Cancelar
Debe crear a nivel de mdulo las siguientes variables de tipo string: MSFECHA1,
MSFECHA2,MSFECH12 y MSFECHA22
Entre al botn Aceptar y escriba lo siguiente:
MSFECHA12 = TXTFECHA1
MSFECHA22 = TXTFECHA2
MSFECHA1 = Mid(TXTFECHA1, 7, 4) + "," + Mid(TXTFECHA1, 4, 2) + "," + Mid(TXTFECHA1, 1, 2)
MSFECHA2 = Mid(TXTFECHA2, 7, 4) + "," + Mid(TXTFECHA2, 4, 2) + "," + Mid(TXTFECHA2, 1, 2)
Unload Me

Explicaremos las instrucciones:


MSFECHA1 = Mid(TXTFECHA1, 7, 4) + "," + Mid(TXTFECHA1, 4, 2) + "," + Mid(TXTFECHA1, 1, 2)

La funcin Mid sirve para extraer parte del contenido de TXTFECHA1; la Instruccin lo
que dice es que la variable msfecha1 ser igual a los caracteres de TXTFECHA1 desde la
posicin 7, 4 caracteres mas una coma, mas los caracteres de TXTFECHA1 desde la
posicin 4, 2 caracteres mas una coma, mas los caracteres de TXTFECHA1 desde la
posicin 1, 2 caracteres; esto implicara que si TXTFECHA1 =10/02/2003, MSFECHA1 =
2003,02,10
Esta conversin es necesaria pues cristal report maneja las fechas en el formato:
ao,mes,da.
En el botn Cancelar escriba:
MSFECHA1 = Empty
MSFECHA2 = Empty
Unload Me
Ahora Entre a la opcin del programa Menurec: Reportes Listado de Empleados Por
Fecha de Ingreso y escriba lo siguiente:(R2201)
frmfechas.Show 1
If msfecha1 = Empty Or msfecha2 = Empty Then
Exit Sub
End If
ROTULO = "Del " + msfecha12 + " al " + msfecha22
CRTREPORTE.WindowState = crptMaximized
CRTREPORTE.Destination = crptToWindow
CRTREPORTE.Formulas(0) = "XX = " + " ' " + ROTULO + " ' "
CRTREPORTE.SelectionFormula = "{Empleados.Fechaingreso}>=datetime(" & msfecha1 & ") AND
{Empleados.Fechaingreso}<=datetime(" & msfecha2 & ")"
CRTREPORTE.ReportFileName = "C:\WINSYSTEM\REPORTES\REPO-05.RPT"
CRTREPORTE.DiscardSavedData = 1
CRTREPORTE.Action = 1
CRTREPORTE.SelectionFormula = " "
CRTREPORTE.Formulas(0) = " "

Ahora debe ir a cristal report y en el reporte REPO-05 haga una variable vaca llamada xx.
Corra su reporte y saque los empleados que ingresaron entre el 01/01/2003 al
31/12/2003.
Gua de trabajo del Captulo No. 22
1. Del programa Menuinv haga los reportes de ventas especficas
2. Todos los reportes de ventas deben sacarse con rango de fechas incluso el reporte
general de ventas.

Captulo 20
Tablas con mas de un campo como llave principal
I.

Objetivo General
Crear un sistema de planilla; la captura de datos y los reportes de Planilla,
Libros de Sueldos y Salarios, Horas extras y Boleta de pagos

II.

Objetivos especficos
Conocer los conceptos de captura de datos de una tabla cuyo ndice o llave
primaria est formada por mas de un campo.

III.

Contenido
1. Captacin bsica de planilla
2. Modificaciones al mdulo bsico de planilla

1. Captacin Bsica de Planilla


Para hacer el sistema de planilla hemos preparado un programa de captacin como
concepto bsico; este programa se llama Frmplani y usted debe tenerlo en el
subdirectorio C:\winsystem; inserte este formulario al resto de formularios de su proyecto;
para insertar un formulario que ya existe siga los siguientes pasos:
\menu-project \ Addform ; cuando le aparezca la pantalla para insertar un nuevo formulario
haga clic en el tabulador Existing (existente); si es necesario cambiarse al subdirectorio
C:\winsystem hgalo; entre los formularios existente debe aparecerle uno llamado
Frmplani; haga doble clic sobre el formulario frmplani, y le aparecer en la seccin del
explorador del Visual Basic.
Este formulario est listo para captar datos, tomando en cuenta que la llave principal de la
tabla Planilla es el campo Noplanilla (Nmero de planilla); mas adelante en este mismo
captulo veremos que la llave no puede ser solamente este campo. La tabla Planilla tiene
la siguiente estructura de campos
NOPLANILLA
EMPLEADO
FECHA
SUELDO
DEVENGADO
EXTRA
COMISIONES
OTROSING
INGRESOS
DIAS

TEXT 10
TEXT 10
DATE
NUM.
NUM.
NUM.
NUM.
NUM.
NUM.
NUM.

DIARIO
IMPTORENTA
IHSS
COOPERATIVA
FOSOVI
ADELANTOS
PRESTAMOS
OTRASDEDUC
DEDUCCIONES
NETO

NUM.
NUM.
NUM.
NUM.
NUM.
NUM.
NUM.
NUM.
NUM.
NUM.

Corra el formulario Frmplani y grabe un registro con los siguientes datos: no. planilla = 01;
No. de empleado=001; el resto de datos debe inventarlos; despus de grabarlo llmelo y
modifique algunos datos para probar la rutina del botn modificar; luego debe llamar de
nuevo los datos para finalmente eliminarlo.
2. Modificaciones al mdulo bsico de planilla
Ya probado que el programa funciona en lo que se refiere al mantenimiento de la tabla
planilla, haremos algunos cambios; en primer lugar notamos que este programa se presta
para hacer una rutina de clculos; los clculos que necesitamos en este programa son los
siguientes:
Total ingresos = Devengado + Extra + Comisiones + Otros ingresos
Total deducciones = Imp./ Renta + IHSS + Cooperativa + FOSOVI + Adelantos
+ Prestamos + Otras deducciones
Sueldo neto = Total ingreso Total deducciones
Entre al evento change de los datos numricos y escriba: CALCULOS (no lo haga en:
Total ingresos, ni en Total Deducciones ni en Sueldo Neto). Ahora haga una rutina a la
que debe llamar: CALCULOS, con las siguientes instrucciones: (R2301)
VAR1 = Format(TXTDEVENGADO, "########.00")
VAR2 = Format(TXTEXTRA, "########.00")
VAR3 = Format(TXTCOMISIONES, "########.00")
VAR4 = Format(TXTOTROSING, "########.00")
TXTINGRESOS = Val(VAR1) + Val(VAR2) + Val(VAR3) + Val(VAR4)
VAR1 = Format(TXTIHSS, "########.00")
VAR2 = Format(TXTIMPTORENTA, "########.00")
VAR3 = Format(TXTCOOPERATIVA, "########.00")
VAR4 = Format(TXTFOSOVI, "########.00")
VAR5 = Format(TXTADELANTOS, "########.00")
VAR6 = Format(TXTPRESTAMOS, "########.00")
VAR7 = Format(TXTOTRASDEDUC, "########.00")
TXTDEDUCCIONES = Val(VAR1)+Val(VAR2)+Val(VAR3)+ Val(VAR4) + Val(VAR5) + Val(VAR6) + Val(VAR7)

TXTNETO = Val(TXTINGRESOS) - Val(TXTDEDUCCIONES)


TXTINGRESOS = Format(TXTINGRESOS, "##,###,###.00")
TXTDEDUCCIONES = Format(TXTDEDUCCIONES, "##,###,###.00")
TXTNETO = Format(TXTNETO, "##,###,###.00")
Corra su formulario
Existen algunos datos del formulario que deben ser protegidos como el sueldo mensual,
sueldo devengado, sueldo diario,total ingresos, total deducciones y

sueldo neto; vaya a la propiedad locked de estos textbox y cambie el valor a true
(protegido). Antes de continuar pruebe que estas casillas estn protegidas.
Ahora queremos que as como aparece el nombre del empleado cuando introduce su
cdigo, tambin aparezca su sueldo, el clculo del IHSS, el clculo del FOSOVI y el
clculo del sueldo diario. Entre al evento change de TXTEMPLEADO, y antes de la
instruccin ZZ.close que est al final del evento change escriba lo siguiente:
If Not IsNull(ZZ!sueldo) Then
TXTSUELDO = ZZ!sueldo
End If
If Not IsNull(ZZ!sueldo) Then
If ZZ!sueldo > 600 Then
TXTIHSS = 21
Else
TXTIHSS = ZZ!sueldo * 0.035
End If
End If
If Not IsNull(ZZ!sueldo) Then
TXTFOSOVI = ZZ!sueldo * 0.015
End If
If Not IsNull(ZZ!sueldo) Then
TXTDIARIO = Format(ZZ!sueldo / 30, "######.00")
End If
Corra su formulario
Si tenemos el sueldo diario, es posible calcular el sueldo devengado al introducir los das
trabajados; entre a la rutina CALCULOS y al inicio escriba las siguientes instrucciones:
VAR1 = Format(TXTSUELDO, "########.00")
If Val(TXTDIAS) = 15 Then
TXTDEVENGADO = Val(VAR1) / 2
Else
If Val(TXTDIAS) = 30 Then
TXTDEVENGADO = Val(VAR1)
Else
TXTDEVENGADO = Val(TXTDIAS) * Val(TXTDIARIO)
End If
End If
Corra el formulario Frmplani y grabe un registro con los siguientes datos: no. planilla = 01;
No. de empleado=001; el resto de datos debe inventarlos.

Ahora trate de grabar un registro con el mismo No. de planilla y con No. de empleado =
002.
Note que este programa no nos permite grabar otros empleados de la misma planilla (01),
debido a que este programa es apto para captar datos a una tabla cuya llave principal
est formada por un solo campo; para que podamos grabar varios empleados de la
misma planilla, debemos cambiar el modelo de captacin a un modelo para una tabla
cuya llave principal est formada por mas de un campo; en nuestro caso la llave principal
debe ser la combinacin de los campos Noplanilla y Empleado, pues con estos dos
campos tenemos un registro nico. Entre a Access y defina como llave principal de la
tabla planilla los campos Noplanilla+Empleado.
Lo siguiente que debe hacer es quitar de la rutina DATOSINICIALES la siguiente
instruccin:
TXTEMPLEADO = EMPTY
Lo anterior es porque en la rutina DATOSINICIALES no se limpian los datos de la llave;
dnde debemos limpiar entonces TXTEMPLEADO?
Busque los diferentes lugares donde se limpia TXTNOPLANILLA y habr encontrado el
lugar donde se debe limpiar TXTEMPLEADO (en el botn CANCELAR).
Si TXTEMPLEADO es parte de la llave, entonces debe ejecutar en el evento change las
mismas instrucciones del evento change de TXTNOPLANILLA que tambin es parte de la
llave; eso significa copiar un bloque grande de instrucciones; para evitar copiar tal bloque,
haremos referencia al lugar donde estn dichas instrucciones; entre al evento change de
TXTEMPLEADO y como primera instruccin inserte la siguiente:
TXTNOPLANILLA_CHANGE
Comente ampliamente con su maestro este principio anterior
El siguiente paso es el mas complicado y decisivo; entre al evento change de
TXTNOPLANILLA, y haga la lectura a la tabla PLANILLA tomando en cuenta no solo el
campo NOPLANILLA con el textbox TXTNOPLANILLA, sino tambin con el campo
EMPLEADO y el textbox TXTEMPLEADO.
Usted debe tener lo siguiente:
Set ZZ = Con.OpenResultset("Select * from planilla where noplanilla=' " & txtnoplanilla & " ' ", _
rdOpenDynamic)

Sustityalo por lo siguiente: (R2302)

Set ZZ=Con.OpenResultset("Select * from planilla where noplanilla=' " & txtnoplanilla & " ' and empleado=' " & TXTEMPLEADO & " ' ", _

rdOpenDynamic)
Comente ampliamente con su maestro este principio anterior
El siguiente paso es ir a todos los lugares donde se hace alguna transaccin a la tabla
planilla y agregar el filtro por No. de empleado. Existen tres lugares donde se debe
trabajar:
a. Botn Salvar
En este botn usted debe tener antes de insertar los datos en la planilla la siguiente
lectura:
Set ZZ = Con.OpenResultset("Select noplanilla from planilla where noplanilla=' " & txtnoplanilla & " ' ", rdOpenDynamic)

Debe sustiturla por la siguiente: (R2303)


Set ZZ = Con.OpenResultset("Select noplanilla from planilla where noplanilla='" & txtnoplanilla & "' and empleado='" &
TXTEMPLEADO & "'", rdOpenDynamic)

b. Boton Eliminar
En este botn usted tiene la siguiente instruccin:
Con.Execute ("Delete from planilla where noplanilla='" & txtnoplanilla & "'")
Debe sustiturla por la siguiente: (R2304)
Con.Execute ("Delete from planilla where noplanilla=' " & txtnoplanilla & " ' and empleado=' " & TXTEMPLEADO & " ' ")

c. Botn Modificar
En este botn usted tiene la siguiente lnea:
& " where noplanilla='" & txtnoplanilla & "'"
Debe sustituirla por la siguiente: (R2305)
& " where noplanilla=' " & txtnoplanilla & " ' and empleado=' " & TXTEMPLEADO & " ' "

Ahora trate de grabar un registro con el mismo No. de planilla (01) y con No. de empleado
= 002; invente el resto de datos
Ahora trate de llamar en forma independiente los registros que ha grabado; notar que el
programa identifica los registros por separado.
Ahora haga cualquier modificacin a cada registro grabado, y compruebe que los cambios
se efectuaron.

Ahora elimine los datos del empleado 002; debe comprobar que se elimin el empleado
002 y que el empleado 001 no fue eliminado.
Ahora tenemos un detalle muy importante: en la consulta debemos capturar adems del
No. de planilla el No. de Empleado; entre al botn Seleccionar en el tabulador Consulta y
encontrar lo siguiente:
Vs.Col = 0
txtnoplanilla = Vs.Text
tabla.Tab = 0
usted debe agregar lo siguiente:
Vs.Col = 1
txtempleado = Vs.Text
Ahora nos queda la programacin de los botones de navegacin en la tabla de datos.
Botn Inicio
Si entra a este botn usted encontrar lo siguiente:
Dim ZZ As rdoResultset
Set ZZ = Con.OpenResultset("SELECT * FROM planilla ORDER BY noplanilla", rdOpenDynamic)

ZZ.MoveFirst
If ZZ.EOF Then
Else
txtnoplanilla = ZZ!noplanilla
End If
Como la llave de la tabla es el No. de planilla y el No. de empleado, se debe hacer el
ordenamiento por ambos campos y de igual manera la asignacin en sus casillas
correspondientes; la programacin de este botn debe estar de la siguiente manera:
Dim ZZ As rdoResultset
Set ZZ = Con.OpenResultset("SELECT * FROM planilla ORDER BY noplanilla,empleado", rdOpenDynamic)

ZZ.MoveFirst
If ZZ.EOF Then
Else
txtnoplanilla = ZZ!noplanilla
TXTEMPLEADO = ZZ!empleado
End If
Botn Ultimo

La programacin de este botn debe estar de la siguiente manera:


Dim ZZ As rdoResultset
Set ZZ = Con.OpenResultset("SELECT * FROM planilla ORDER BY noplanilla,empleado", rdOpenDynamic)

ZZ.MoveLast
If ZZ.EOF Then
Else
txtnoplanilla = ZZ!noplanilla
TXTEMPLEADO = ZZ!empleado
End If
Botn Siguiente
La programacin de este botn debe estar de la siguiente manera:
Dim ZZ As rdoResultset
Set ZZ = Con.OpenResultset("SELECT * FROM planilla WHERE noplanilla+empleado>'" & _
txtnoplanilla + TXTEMPLEADO & "' ORDER BY noplanilla", rdOpenDynamic)
ZZ.MoveFirst
If ZZ.EOF Then
Else
txtnoplanilla = ZZ!noplanilla
TXTEMPLEADO = ZZ!empleado
End If

Botn Anterior
La programacin de este botn debe estar de la siguiente manera:
Dim ZZ As rdoResultset
Set ZZ = Con.OpenResultset("SELECT * FROM planilla WHERE noplanilla+empleado<'" & _
txtnoplanilla + TXTEMPLEADO & "' ORDER BY noplanilla", rdOpenDynamic)
ZZ.MoveLast
If ZZ.EOF Then
Else
txtnoplanilla = ZZ!noplanilla
TXTEMPLEADO = ZZ!empleado
End If

Con estos cambios y modificaciones ya tenemos listo el programa de Planilla por lo tanto
le pedimos que haga lo siguiente:
a. La planilla 01 con al menos cincos empleados
b. La planilla 02 con al menos cincos empleados

Você também pode gostar