Vous êtes sur la page 1sur 51

1 Entrega

Hola a todos, hace mucho tiempo que quería hacer esto, pero por problemas de tiempo
no lo había podido realizar. Pensando en que así como yo, muchos que apenas
empiezan a entrar a trabajar con el sistema operativo Windows CE y con su variante
Pocket PC y con la herramienta de desarrollo de Microsoft, para este Sistema Operativo
Microsoft Embedded Visual Basic 3.0, no encuentran un manual de usuario claro y
conciso, además de que toda la documentación esta en idioma ingles y nuestra lengua
materna es español es difícil de aprender y la curva de desarrollo se hace a veces
bastante alta.

Pensando en esto y gracias al apoyo de Cepolis, me decidí a publicar estas notas que ya
tenia escritas de tiempo atrás y que ahora pasan a ser creo, y con mucha modestia
(creando por favor -) el primer tutorial de este ambiente de desarrollo llamado
Embedded Visual Basic 3.0.

Bueno empecemos ya... con un poco de historia patria.... este sistema de desarrollo para
Pocket PC y para Windows CE en general, desciende de una herramienta que era un
add-in en Visual Basic 6.0, era el Visual Basic 6.0 Toolkit for Windows CE, este add-in
tenia un costo de alrededor de $200 dólares y tenia sus “gallitos” como decimos por acá,
estos a su vez descendían de sus correspondientes versiones anteriores Visual Basic 5.0.

Embedded Visual Basic 3.0 (eVB) soluciona el inconveniente de que se necesitaba


Visual Basic por lo menos en su versión Profesional, para empezar a desarrollar una
aplicación para Windows CE. EVB aparece como un ambiente de desarrollo
independiente de Visual Basic, con muchísimas correcciones a los bugs de su
predecesor. Además de todo lo anterior, es que es GRATIS su adquisición, lo cual abre
muchas posibilidades a pequeños programadores que no tenían acceso a este software
de manera legal.

En esta primera entrega vamos a hacer un recorrido general y rápido por todo el
ambiente de desarrollo o IDE (por sus siglas en ingles) de eVB.

El Principio

Embedded Visual Basic no genera programas ejecutables directamente (.exe), eVb


genera archivos con la extensión .vb, estos archivos son una especie de script muy
optimizado con los datos exactos para ser mostrados en la interfase grafica de Pocket
PC, Handheld PC y PalmSize PC.

Estos archivos .vb son enlazados a un programa ejecutable (pvbload.exe) así como se
enlazan los archivos .doc a word, por ejemplo. Este programa “pvbload.exe” se encarga
de interpretar los comandos que se encuentran en el archivo .vb y traduce y ejecuta con
ayuda de archivos dll para su correcta ejecución en Pocket PC.

El runtime de eVB esta presente en la ROM del sistema Windows CE que tengamos.
Como los archivos .vb son enlazados a pvbload.exe, ellos heredan el icono de este

programa. Es por esto que todos los programas eVb tienen el mismo icono.
Este icono no puede cambiarse como sucede en el PC, por lo menos no directamente
desde eVB, con un sencillo programa en eVC se puede hacer esto, pero eso no es el
tema de ahora.

ActiveSync

Activesync es el programa que permite sincronizar los datos de nuestro PDA o Pocket
PC con el PC de escritorio, permite también instalar los programas en el Pocket. En este
momento se encuentra en su versión 3.5 y se puede bajar de forma gratuita del sitio de
Microsoft y viene en el CD que acompaña a los Pocket PC.

Instalación de las eVT.

Se puede instalar las eVT en Windows 98 SE, Windows NT 4 en sus versiones Servidor
o Workstation, Windows 2000 y Windows XP. Si desea probar los programas
directamente en su PC utilizando un emulador que viene con las eVT, debe
obligatoriamente instalarlas en Windows NT Workstation como mínimo.

Ejecutar eVB

Para ejecutar eVB nos vamos al botón de Inicio -> Programas -> Microsoft Embedded

Visual Tools -> Embedded Visual Basic 3.0, o hacemos clic en el icono si lo
tenemos en el escritorio del computador.

A continuación vemos la pantalla de inicio al ejecutar eVB:

Podemos apreciar en el panel de la parte inferior los diferentes tipos de proyectos que
podemos desarrollar con eVB. Para este caso concreto existen 4 iconos, en los que se
puede apreciar que podemos crear proyectos para Windows CE Palm-Size (Son PDA
del mismo estilo de los Pocket PC, pero con sistema operativo Windows CE),
Windows CE HPC Pro (Handheld PC Profesional, este tipo de dispositivos son los que
tienen teclado un ejemplo de estos dispositivos son las Jornadas 720 de HP). Y
proyectos de Windows Pocket PC 2002. La cantidad y tipo de estos iconos dependen de
los SDK (Software Development Kit) que hayamos instalado en nuestro PC, en este
momento existe una versión de SDK para Pocket PC 2000 y una versión del SDK para
Pocket PC 2002 que es la ultima versión. Esto no es exacto, ya que ya salio al mercado
el nuevo sistema operativo Windows CE .NET, para el cual también existe su
correspondiente Compact FrameWork for Windows CE .NET (Entorno de desarrollo
para Plataforma .NET), este esta en su versión beta y solo lo están probando las
personas que son “betatesters” registrados en Microsoft. En su momento cuando los
“mortales” tengamos acceso a el, hablaremos de ello también.
En esta pantalla escogemos el tipo de proyecto a trabajar y presionamos el botón Open
para abrir o crear el proyecto propiamente.

Como se puede apreciar aparecen dos “solapas”, Existing y Recent para abrir un
proyecto que ya exista.

Nosotros escogeremos Windows CE for Pocket PC 2002 como tipo de proyecto, y se


nos abrirá el ambiente para empezar con nuestro trabajo.

Voy a asumir que tenemos conocimientos en Visual Basic 5.0 o 6.0 y haré algunas
analogías entre uno y otro. Como podemos apreciar en la grafica el ambiente de
desarrollo es Visual Basic!!!! Pues esa es una de las grandes ventajas, no es extraño el
ambiente ya que lo conocemos de Visual Basic para PC, tenemos la barra de
herramientas a la izquierda, la del explorador de proyectos a la derecha y arriba y la de
propiedades a la derecha y abajo. Al centro nuestra primera forma.

Los controles que aparecen en la barra de herramientas son los controles intrínsecos a
eVB. Aquí en este punto cabe anotar que no podemos trabajar con clases en este
ambiente, que los controles, a pesar de ser los mismos que para PC tienen restricciones
en sus propiedades, métodos y eventos. Esto debido a que eVB es una mezcla de VBA
y VBScript, sin embargo podemos desarrollar aplicaciones FUNCIONALES en este
ambiente.
Muy bien entonces:

Vamos a configurar nuestro proyecto: vamos al menú y en opción Project hacemos clic,
y en el submenú escogemos la opción Properties..., allí nos va a mostrar la siguiente
pantalla:

Aquí colocamos el nombre de nuestro proyecto, una descripción de lo que hace nuestro
proyecto, en que directorio en el handheld va a quedar localizado.
A medida que vayamos utilizando cada uno de los diferentes controles los iremos
explicando en la mejor forma posible.

Muy bien... empecemos con nuestro primer proyecto:

Entremos a eVB, escogemos Windows CE for Pocket PC 2002 como tipo de proyecto,
clic en el botón Open y nos aparecerá una forma en blanco para empezar.

Coloquemos dos controles TextBox en la forma un control CommandButton y un


listbox, el la siguiente figura aparece como se vera nuestro proyecto en tiempo de
diseño.

Hacemos clic sobre la barra de titulo de la forma y vamos a la ventana de Propiedades,


en la parte derecha inferior de la pantalla, aquí buscamos la propiedad Name de la
forma, que esta en la parte superior de las propiedades, aquí le vamos a poner nombre a
nuestra forma, este nombre se reflejara dentro del proyecto y también en el nombre del
archivo que se guarda en el disco. El nombre que le vamos a dar a nuestra forma es
frmProg1.

Haga clic sobre el textbox denominado Text1, busquemos en la ventana de propiedades


la propiedad Name y cambiémosla por txtNombre, luego busquemos la propiedad Text
del mismo y borremos el “Text1” que aparece por defecto en esta propiedad. Esta
propiedad es una de las últimas de la lista.

Igual vamos a hacer para el segundo TextBox, en donde el nombre será txtApellido.
El botón los vamos a llamar cmdAgregar, para esto en su propiedad Name vamos a
cambiarla, y en la propiedad Caption (o sea el mensaje a mostrar) vamos a colocar
Agregar.

Ahora vamos a acceder al código de un evento, un evento ocurre después de una


acción, esta acción puede ser el clic del mouse, el doble clic, etc.

Vamos a hacer clic sobre el botón cmdAgregar


eVB nos va a mostrar la pantalla de código, por defecto el evento para un
CommandButton es el evento CLIC, como podemos apreciar en la grafica, el combo
que aparece en el circulo rojo muestra o lista todos los objetos (nuestros controles) que
estén en la forma activa, y el combo del circulo azul mostrara todos los eventos que
soporta ese objeto. El evento OKClick de la forma que aparece en la grafica es el botón
OK de la parte superior derecha de la pantalla y con el cual cerramos o terminamos la
aplicación.

Nuestro código quedara de la siguiente manera:

Private Sub cmdAgregar_Click()


List1.AddItem txtNombre.Text & " " & txtApellido.Text
End Sub

Aquí lo que estamos haciendo es agregando una nueva lista al control List que se llama
List1.

Ahora ya hemos completado nuestro primer proyecto en eVB, algo sencillo pero un
abrebocas de todo lo que podemos realizar con esta sencilla herramienta de desarrollo
para Pocket PC. Solo nos queda ejecutar nuestro proyecto.

Antes verifiquemos el destino o target en donde se va a ejecutar nuestra aplicación, si


tenemos un Pocket, debemos tenerlo sincronizado y verificar que la opción escogida de
la lista que aparece en la grafica es la que dice “Default device”, si no entonces
“Emulation” y se ejecutara en el emulador.

En la barra de herramientas que aparece en la grafica siguiente presionamos el botón de


ejecución que se encuentra encerrado en un círculo rojo en la grafica.

Esto ejecutara nuestro proyecto en la pantalla:

A continuación vemos una captura de la aplicación ejecutándose en el emulador de


Pocket PC 2002.
Bueno eso es todo por hoy, nos vemos en la próxima entrega.

Un Saludo muy caluroso

Roberto.

2 Entrega
Hola a todos nuevamente, en esta nuestra Segunda entrega del Tutorial para Embedded
Visual Basic 3.0 vamos a seguir con los controles intrínsicos del eVB, a la par de seguir
con algo de teoría para que no se me aburran.

La barra de Herramientas (Tolva)


A continuación vamos a explicar cada uno de los controles intrínsicos de eVB,

Pointer. Con este podemos cancelar cualquier otro comando que tengamos
seleccionado, si nos arrepentimos de haber escogido un control TextBox, utilizamos a
Pointer para anular o cancelar la selección.

Shape. Nos permite crear figuras geométricas en la forma.

Line. Permite dibujar una línea de diferentes anchos y colores en la forma.

Labels. Es uno de los controles mas usados, pues en ellos vamos a colocar el texto que
deseamos aparezca en las formas para ayudar al usuario en la captura de los datos de
una aplicación, por ejemplo. El texto de los labels no puede ser cambiado por el
usuario.

TextBox. Es otro de los controles mas usados en nuestras aplicaciones, ya que en ellos
podemos capturar o visualizar información de diferente índole para actualizar nuestras
bases de datos en el Pocket PC.

Frames. Este control es un contenedor de controles, permite insertar en el, cualquier


control de los que tenemos en la barra de herramientas. Este control particularmente lo
utilizo mucho, para simular diferentes formas, debido al inconveniente de eVB que no
permite descargar las formas de memoria.

Button. Permite crear botones para seleccionar diferentes opciones por ejemplo para
guardar los datos o para cancelar la grabación de los mismos, para seleccionar una
opción diferente, etc.

CheckBox. Nos permite seleccionar una o varias opciones referentes a un tema.

OptionButton. Nos permite seleccionar una opción entre varias. Este es excluyente.

ComboBox. Este control permite mostrar una lista de datos desplegable que se muestra
y oculta cuando hacemos clic en el. Este control nos sirve para colocar en el la lista de
ciudades, por ejemplo, para escoger una.
ListBox. Este control es similar al ComboBox, la diferencia es que la lista no es
desplegable como la del ComboBox. Este control lo podemos utilizar para por ejemplo
mostrar los nombres de los empleados de una empresa. Como en el ejemplo de la
entrega anterior

HScrollBar y VScrollBar. Estos dos controles lo usamos para simular un


desplazamiento vertical u horizontal en la pantalla, por ejemplo.

Timer. Este control nos permite controlar la ejecución de un procedimiento cada


determinado tiempo.

Muy bien ahora vamos a desarrollar una aplicación para ir utilizando cada uno de los
diferentes controles, además de los controles Actives que aun no hemos visto.

La aplicación que vamos a desarrollar es: un teclado numérico controlado


completamente desde eVB.

La intención de este pequeño proyecto, es porque para llegar al teclado numérico del
SIP hay que realizar demasiados pasos, además que a mi parecer es más cómodo que el
usuario tenga un teclado en la pantalla.

Una de las ventajas es que podemos acomodarlo como más nos guste, ya que lo hemos
creado utilizando únicamente controles CommandButton.

En el proyecto tenemos dos Labels y dos TextBox para hacernos una idea de lo que
debemos hacer.

La idea del teclado es esta: generalmente (por no utilizar siempre), se piden los datos en
un TextBox, así que vamos a crear en nuestra forma una variable publica que sea de tipo
TextBox y cada vez que un TextBox tenga el foco vamos a asignar a esa variable el
TextBox en cuestión. Luego en el evento clic de cada uno de los botones del teclado
numérico le asignamos el valor correspondiente del botón a través de nuestra variable
publica de tipo TextBox.

Talvez lo único tedioso es que en el evento GotFocus de cada TextBox debemos colocar
esto:

Set CajaTexto = Text1

Donde CajaTexto es nuestra variable publica tipo TextBox y Text1, es el TextBox en


cuestión.

La verdad no es que sea difícil, pero mucho no sabemos por donde entrarle a la solución
del problema. Así que aquí esta una muy modesta solución que he probado y me ha
dado muy buenos resultados. Espero que la disfruten y les sirva de mucho a todos.

Aquí esta el código completo del proyecto

Option Explicit
Public CajaTexto As TextBox

Private Sub Form_Load()


Text7.Visible = True
Text1.Visible = True
End Sub

Private Sub Form_OKClick()


App.End
End Sub

Private Sub cmdBorrar_Click()


CajaTexto.Text = ""
End Sub

Private Sub cmdCero_Click()


CajaTexto.Text = CajaTexto.Text & "0"
End Sub

Private Sub cmdCinco_Click()


CajaTexto.Text = CajaTexto.Text & "5"
End Sub

Private Sub cmdCuatro_Click()


CajaTexto.Text = CajaTexto.Text & "4"
End Sub

Private Sub cmdDos_Click()


CajaTexto.Text = CajaTexto.Text & "2"
End Sub

Private Sub cmdEntrar_Click()


'Hago algo simulando en enter
End Sub

Private Sub cmdNueve_Click()


CajaTexto.Text = CajaTexto.Text & "9"
End Sub

Private Sub cmdOcho_Click()


CajaTexto.Text = CajaTexto.Text & "8"
End Sub

Private Sub cmdRutero_Click()


frmRutero.Show
frmTomaLectura.Hide
End Sub

Private Sub cmdSeis_Click()


CajaTexto.Text = CajaTexto.Text & "6"
End Sub

Private Sub cmdSiete_Click()


CajaTexto.Text = CajaTexto.Text & "7"
End Sub

Private Sub cmdTres_Click()


CajaTexto.Text = CajaTexto.Text & "3"
End Sub

Private Sub cmdUno_Click()


CajaTexto.Text = CajaTexto.Text & "1"
End Sub

Private Sub Text1_GotFocus()


Set CajaTexto = Text1
End Sub

Private Sub Text7_GotFocus()


Set CajaTexto = Text7
End Sub

A continuación vemos una grafica de cómo se aprecia la aplicación en el handheld

A continuación les muestro la descripción de cada uno de los controles contenidos en la


forma, esta es una forma (me parece a mi) mas clara, de mostrar los controles ya que
gráficamente a veces no nos cuadran las imágenes. Aquí no aparecen todas las
propiedades de los controles, solo las que necesitamos para este ejemplo. Luego les
explico como pueden documentar sus manuales técnicos de esta manera.
VERSION 5.00
Begin VB.Form Form1
Appearance = 0 'Flat
BackColor = &H80000005&
Caption = "Form1"
ShowOK = -1 'True
Begin VBCE.TextBox Text1
Height = 285
Left = 990
Top = 180
Visible = 0 'False
Width = 1425
BorderStyle = 1

Enabled = -1 'True

Text = ""

End
Begin VBCE.Label Label6
Height = 225
Left = 60
Top = 210
Width = 915
Caption = "LecAnterior:"
Alignment = 0
End
Begin VBCE.Label Label7
Height = 225
Left = 60
Top = 480
Width = 915
Caption = "LecActual:"
Enabled = -1 'True
Alignment = 0
End
Begin VBCE.TextBox Text7
Height = 285
Left = 990
Top = 450
Visible = 0 'False
Width = 1425
BorderStyle = 1
Enabled = -1 'True
Text = ""
Alignment = 0
End
Begin VBCE.CommandButton cmdUno
Height = 285
Left = 2400
TabIndex = 11
Top = 3090
Width = 315
Caption = "1"

Enabled = -1 'True

Style = 0

End
Begin VBCE.CommandButton cmdDos
Height = 285
Left = 2745
TabIndex = 10
Top = 3090
Width = 315
Caption = "2"
Enabled = -1 'True
Style = 0
End
Begin VBCE.CommandButton cmdTres
Height = 285
Left = 3090
TabIndex = 9
Top = 3090
Width = 315
Caption = "3"
Enabled = -1 'True
Style = 0
End
Begin VBCE.CommandButton cmdCuatro
Height = 285
Left = 2400
TabIndex = 8
Top = 2790
Width = 315
Caption = "4"
Enabled = -1 'True
Style = 0
End
Begin VBCE.CommandButton cmdCinco
Height = 285
Left = 2745
TabIndex = 7
Top = 2790
Width = 315
Caption = "5"
Enabled = -1 'True
Style = 0
End
Begin VBCE.CommandButton cmdSeis
Height = 285
Left = 3090
TabIndex = 6
Top = 2790
Width = 315
Caption = "6"

Enabled = -1 'True

Style = 0

End
Begin VBCE.CommandButton cmdSiete
Height = 285
Left = 2400
TabIndex = 5
Top = 2490
Width = 315
Caption = "7"
Enabled = -1 'True
Style = 0
End
Begin VBCE.CommandButton cmdOcho
Height = 285
Left = 2745
TabIndex = 4
Top = 2490
Width = 315
Caption = "8"
Enabled = -1 'True
Style = 0
End
Begin VBCE.CommandButton cmdNueve
Height = 285
Left = 3090
TabIndex = 3
Top = 2490
Width = 315
Caption = "9"
Enabled = -1 'True
Style = 0
End
Begin VBCE.CommandButton cmdCero
Height = 285
Left = 2745
TabIndex = 2
Top = 3390
Width = 315
Caption = "0"
Enabled = -1 'True
Style = 0
End
Begin VBCE.CommandButton cmdBorrar
Height = 285
Left = 2400
TabIndex = 1
Top = 3390
Width = 315
Caption = "B"

Enabled = -1 'True

Style = 0

End
Begin VBCE.CommandButton cmdEntrar

Height = 285

Left = 3090

TabIndex = 0

Top = 3390

Width = 315

Caption = "<-"

Enabled = -1 'True

Style = 0

End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

Bueno, eso es todo por hoy, disfruten del proyecto y espero que a los que han estado
esperando vean recompensada su espera que espero halla sido corta.

Unos Afectuosos saludos para todos.

Nos vemos

Roberto Alvarado.

3 Entrega

En esta tercera entrega de este tutorial, vamos a empezar a desarrollar una pequeña
aplicación muy apropiada para estas maravillosas máquinas llamadas handhelds, muy
útil para nosotros los desarrolladores de software, o para los que tenemos que hacer
labor de soporte técnico o helpdesk en nuestras empresas o con nuestros clientes. Es
algo que podemos aplicar a nuestra rutina diaria y nos va a servir muchísimo con un
poco de atención de nuestra parte. Estos datos que vamos a recolectar nos servirán
como estadísticas de atención, como soporte para facturarles a nuestros clientes, como
soporte de nuestra labor desarrollada, etc. A medida que lo conozcan van a salir más
justificaciones y aplicaciones para esta aplicación.

En esta entrega no vamos a tener código de ejemplo o un ejemplo que desarrollar para
afianzar los conocimientos de la entrega, aquí vamos a sentar las bases para desarrollar
una pequeña aplicación en la que podamos emplear la gran mayoría de los controles de
eVB y en la cual podamos manejar una base de datos con todas las de la ley en un PDA
o handheld que utilice como sistema operativo Pocket PC, inclusive pueden hacer el
ejercicio para dispositivos con Windows CE 3.0, es idéntico el desarrollo la diferencia
es la apariencia en la pantalla.
Bueno yo he titulado esta aplicación como Control de Tareas, este proyecto controlará y
manejará el tiempo gastado en cada una de las tareas que registremos en la aplicación.

La idea de esta aplicación es registrar todas las acciones que se ejecuten sobre una
determinada tarea o problema que se nos presente, por ejemplo un usuario de una
aplicación nos informa que no sabe como hacer una determinada función con el
programa, nosotros programamos o generamos una nueva tarea en la aplicación y
registramos las indicaciones hechas al usuario, al igual que el tiempo que gastamos en
instruir al usuario, en la aplicación ira quedando la historia del usuario (en nuestro caso
nuestro Cliente), y en un momento dado podremos saber cuantas tareas se han realizado
para ese Cliente (usuario) y de que tipo.

Ya están entendiendo como aplicar esta aplicación? Este es uno de los ejemplos más
comunes, pero podemos aplicarlo a muchas más situaciones.

Vamos a empezar diseñando los archivos o tablas que vamos a utilizar para nuestra
aplicación:

Necesitamos un Archivo Maestro para registrar nuestras Tareas, a esta Tabla o Archivo
le he llamado Tareas, la estructura de los datos es la siguiente:

IdTarea Int Identificador Único de la Tarea


Aplicación Text 5 Código de la Aplicación con problemas
Tarea Text 50 Descripción de la Tarea
Cliente Int Código del Cliente
Tiempo Text 8 Tiempo gastado en la Tarea
FecIni Date La fecha de inicio de la Tarea
FecFin Date La fecha de culminación de la Tarea
Estado Text 1 Activa, Pausa, Terminada, Cancelada
HoraInicio Text 8 Hora de Inicio de la Tarea
HoraFinal Text 8 Hora de terminación de la Tarea
ValorHora Int El valor de la Hora
Descripción Text 255 Descripción de la solución aplicada

Necesitamos un Archivo Maestro de Clientes en la cual se encuentra la información de


nuestros clientes, a esta tabla la llamaremos Clientes, la estructura de los datos es la
siguiente:

IdCliente Int Identificador Único de Clientes


Nombre Text 50 Nombre del Cliente
Direccion Text 50 Dirección del Cliente
Telefonos Text 20 Teléfonos del Cliente
CelularText 20 Celular del Cliente
Fax Text 20 Número del fax del Cliente
ValorHora Int Valor de la Hora para ese Cliente
Una tercera tabla para el Log del sistema en la cual se registraran todas las operaciones
o transacciones realizadas a cada una de las tareas. A esta tabla la he llamado Log, y su
estructura es la siguiente:

Fecha Date Fecha de la Transacción


Hora Text 8 Hora en que se realiza la transacción
IdTarea Int La tarea que se esta ejecutando
Tipo Text 1 Inicio, Pausa, Terminar, Cancelar
Observación Text 255 Observaciones sobre la transacción

Y una última tabla de Aplicaciones en la cual vamos a registrar las aplicaciones a


asociar a las tareas, por ejemplo, Excel de Microsoft es una aplicación que en todas las
empresas o casi todas existe y algunas veces las personas que lo utilizan se traban en
algo o no saben como enfocar una solución y nos preguntan a nosotros los que estamos
en Sistemas o Informática para que le echemos una manito a resolver sus problemas. La
estructura de esta tabla es la siguiente:

IdApp Text 5 Identificador de la Aplicación


Aplicación Text 30 Descripción o nombre de la aplicación

Muy bien esas son nuestras tres tablas para nuestra aplicación de Control de Tareas, si
alguno tiene una opinión sobre el titulo de nuestra aplicación, soy todo oídos para
sugerencias, envíenmelas a mi e-mail o colóquenlas en los post de esta web.

Esta pequeña aplicación vamos a desarrollarla utilizando para guardar los datos una
base de datos Pocket Access (*.cdb).

Vamos a verificar si el archivo cdb no existe y lo crearemos desde código, al igual que
las tablas descritas arriba.

Mis disculpas por haberme demorado un poco con esta entrega pero estoy fuera de mi
ciudad base. Espero que pueda cumplirles con la siguiente entrega que me imagino
estarán esperando ansiosos para poner en práctica toda la teoría descrita aquí.

Bueno no es mas por hoy... disfrútenlo.

Roberto Alvarado

4 Entrega
Hola nuevamente a todos otra vez!!!!

Les debo una disculpa por haberme demorado tanto en esta nueva entrega del tutorial,
pero tuve que salir de la ciudad por una semana que se convirtió en un mes... Uff!!!

Muy difícil eso de ir a una ciudad por unos días y resultar quedándose muchísimo mas
tiempo. Pero bueno a lo que vamos:
Vamos a desarrollar una pequeña aplicación muy útil para nosotros los de “Sistemas” o
de “Informática” como se dice en los diferentes países....

La aplicación es un Control de Tareas, estas tareas para nosotros los informáticos puede
ser desarrollo de una rutina de una aplicación en la que estemos trabajando, el helpdesk
que le demos a los usuarios de la compañía en la utilización de las diferentes
aplicaciones de escritorio que se manejen y de las aplicaciones propias de la compañía,
la instalación y configuración de un computador para alguna de las instalaciones de la
compañía, etc., etc.
(Creo que la idea ha quedado bastante ilustrada).

Esta pequeña, pero practica aplicación nos permitirá ver u justificar en que nos
gastamos el tiempo, además nos puede servir para facturar a nuestros clientes por
servicios prestados.

La aplicación permitirá crear una descripción muy básica de los clientes, un tipo de
aplicación, al cual le estamos trabajando, una descripción del problema o inconveniente
a resolver, el valor del servicio, el tiempo que llevamos gastado en la tarea, si la tarea
esta activa, en pausa o terminada.
Para esto vamos a crear un nuevo proyecto y escogemos la opción de Pocket PC 2002
como tipo de proyecto.

Vamos a ir al menú Project y luego Project1, Properties..., Nos va a aparecer la


siguiente pantalla en la cual vamos a rellenar en la casilla de Project Name con Tareas,
en la casilla Project Description, Aplicacion para el Control de Tiempos y Tareas y
presionamos el botón OK.

En la barra de menús escogemos la opción Project, y en el submenú la opción


Components, de la lista que aparece vamos a escoger los siguientes componentes:
Microsoft CE PictureBox Control 3.0
Microsoft PocketPC MenuBar Control 3.0

Con esto vamos a crear una pantalla con los siguientes datos dentro de un control frame,
a continuación les muestro como debe quedar nuestra pantalla:
Incluimos cuatro controles PictureBox en los cuales vamos a mostrar las graficas para
empezar una nueva tarea, para poner en Pausa una tarea que estemos desarrollando, para
Terminar una tarea en proceso o para Cancelar una Tarea. Son los cuatro botones que
aparecen en la parte inferior del frame.

Hacemos doble clic sobre el control MenuBar para incluirlo en la forma, este va a
aparecer en la parte central de la forma pero, no se preocupen, que este control es el que
nos permite crear los menús y las barras de herramientas, así que este control aparece en
la parte inferior de la pantalla de nuestra aplicación cuando se este ejecutando.

Hacemos clic sobre en control MenuBar cuando ya este en la forma, y en la ventana de


las propiedades del control, la ventana inferior de la derecha y escogemos la propiedad
NewButton, esta a True, la colocamos en False, esto lo hacemos para que no muestre
una opción de New al iniciar la aplicación. El resto de las propiedades no es problemas,
podemos cambiar el nombre del control por el que queramos también.

Ahora abrimos la ventana de código de nuestra forma y en le evento Load de la forma


vamos a configurar el control MenuBar para crear los menús que necesitamos y le
asignamos los archivos bmp a los picturebox:

Private Sub Form_Load()


Dim mnuTablas As MenuBarMenu
Dim mnuAccion As MenuBarMenu

PictureBox1.Picture = App.Path & "\Adelante.bmp"

PictureBox2.Picture = App.Path & "\Pausa.bmp"

PictureBox3.Picture = App.Path & "\Stop.bmp"

PictureBox4.Picture = App.Path & "\Undo.bmp"

'Configuro el MenuBar

Set mnuTablas = MenuBar1.Controls.AddMenu("Tablas", mnuTablas)

mnuTablas.Items.Add 1, "mnuTabTareas", "Tareas"

mnuTablas.Items.Add 2, "mnuTabClientes", "Clientes"

mnuTablas.Items.Add 3, "mnuTabApp", "Aplicaciones"

Set mnuAccion = MenuBar1.Controls.AddMenu("Accion", mnuAccion)

mnuAccion.Items.Add 1, "mnuNuevo", "Nuevo"

mnuAccion.Items.Add 2, "mnuEditar", "Editar"

mnuAccion.Items.Add 3, "mnuBorrar", "Borrar"

mnuAccion.Items.Add 4, "mnuCancelar", "Cancelar"

mnuAccion.Items.Add 5, "mnuGuardar", "Guardar"

mnuAccion.Items.Add 6, "mnuCerrar", "Cerrar"

End Sub

Hasta aquí hemos aprendido como trabajar con el control MenuBar para crear menús y
submenús. Ahora vamos a adicionarle a la barra de menús, botones, o sea vamos a
hacer un menú combinado.

Como vamos a colocarle graficas a nuestro botones necesitamos otro control: el control
ImageList para guardar las imágenes y poder asociarlas a los botones.

Nos vamos nuevamente al menú Project, Components y escogemos Microsoft CE


Image List Control 3.0, presionamos en el botón OK

Doble clic sobre el control ImageList para insertarlo en la forma, ahora en el mismo
evento Load de la forma configuramos el imageList y lo asignamos al MenuBar.

' Configuro el tamaño de las imágenes

ImageList1.ImageHeight = 16

ImageList1.ImageWidth = 16

' Agrego las imágenes

ImageList1.Add App.Path & "\Primero.bmp"

ImageList1.Add App.Path & "\Atras.bmp"

ImageList1.Add App.Path & "\Adelante.bmp"

ImageList1.Add App.Path & "\Ultimo.bmp"

'Le decimos al MenuBar que use el ImageList

MenuBar1.ImageList = ImageList1.hImageList

'Configuro los botones

Dim btnSepara As MenuBarButton

Dim btnInicio As MenuBarButton

Dim btnPrevio As MenuBarButton


Dim btnSigte As MenuBarButton
Dim btnFin As MenuBarButton

'botón Separador
Set btnSepara = MenuBar1.Controls.AddButton
btnSepara.Width = 80
btnSepara.Style = mbrSeparator

'botón Inicio
Set btnInicio = MenuBar1.Controls.AddButton("btnInicio")
btnInicio.Image = 1
btnInicio.Style = mbrDefault
'botón Previo
Set btnPrevio = MenuBar1.Controls.AddButton("btnPrevio")
btnPrevio.Image = 2
btnPrevio.Style = mbrDefault
'botón Sgte
Set btnSigte = MenuBar1.Controls.AddButton("btnSigte")
btnSigte.Image = 3
btnSigte.Style = mbrDefault
'botón Ultimo
Set btnFin = MenuBar1.Controls.AddButton("btnFin")
btnFin.Image = 4
btnFin.Style = mbrDefault

' Luego que los botones y los menús son agregados


' al MenuBar, los Objectos se liberan
Set mnuTablas = Nothing
Set mnuAccion = Nothing
Set btnSepara = Nothing
Set btnInicio = Nothing
Set btnSigte = Nothing
Set btnPrevio = Nothing
Set btnFin = Nothing
Aquí podemos apreciar como se observa el menú combinado en la parte inferior de la

pantalla del Pocket.

Aquí va la definición de los controles para que les quede exactamente igual a las

graficas:

VERSION 5.00

Object = "{338D5EA5-4BBD-11D1-9A7D-00C04FAD5AEC}#1.0#0";

"mscepicture.dll"

Object = "{F7DEA2C9-BA8F-446E-A292-B4840F3BD661}#1.0#0";

"mscemenubar.dll"

Object = "{E491F001-98EC-11D1-9B3D-00C04FAD5AEC}#1.0#0";

"msceimagelist.dll"

Begin VB.Form frmTareas

Appearance = 0 'Flat

BackColor = &H80000005&

Caption = "Control de Tareas"

ClientHeight = 3615

ClientWidth = 3480

ForeColor = &H80000008&

ShowOK = -1 'True

Begin CEImageListCtl.ImageList ImageList1

Left = 1890

Top = 3000

End

Begin MenuBarLib.MenuBar MenuBar1

Left = 2520

Top = 2940

Enabled = -1 'True

NewButton = 0 'False

End
Begin VBCE.Frame fraTareas

Height = 3225

Left = 60

TabIndex = 0

Top = 60

Width = 3405

BorderStyle = 1

Caption = "[Tareas]"

Enabled = -1 'True

BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}

Name = "Tahoma"
Size = 8.25

EndProperty

Begin PictureBoxCtl.PictureBox PictureBox1

Height = 325

Left = 150

Top = 2790

Width = 325

Enabled = -1 'True

End
Begin PictureBoxCtl.PictureBox PictureBox2

Height = 330

Left = 570

Top = 2790

Width = 330

Enabled = -1 'True

End
Begin PictureBoxCtl.PictureBox PictureBox3

Height = 330

Left = 990

Top = 2790

Width = 330

Enabled = -1 'True

End
Begin PictureBoxCtl.PictureBox PictureBox4

Height = 330

Left = 1380

Top = 2790

Width = 330

Enabled = -1 'True

End
Begin VBCE.TextBox txtSolucion
Height = 645
Left = 120
Top = 2100
Width = 3195
Enabled = -1 'True
Text = ""
MultiLine = -1 'True
ScrollBars = 2
End
Begin VBCE.Label Label1
Height = 255

Left = 90

Top = 210

Width = 765

Caption = "Cliente :"

End
Begin VBCE.ComboBox cboClientes
Height = 300
Left = 900
Top = 180
Width = 2415
Enabled = -1 'True
Text = "cboClientes"
End
Begin VBCE.Label Label2
Height = 255
Left = 90
Top = 510
Width = 765
Caption = "Aplicacion:"
Enabled = -1 'True
End
Begin VBCE.ComboBox Combo1
Height = 300
Left = 900
Top = 480
Text = "Combo1"
End
Begin VBCE.Label Label3
Height = 225
Left = 60
Top = 810
Width = 795
Caption = "Problema:"
End
Begin VBCE.TextBox txtProblema
Height = 615
Left = 90
Top = 1080
Width = 3225

BorderStyle = 1

Enabled = -1 'True

Text = ""

Alignment = 0

MultiLine = -1 'True

ScrollBars = 2

End
Begin VBCE.Label Label4

Height = 255

Left = 120

Top = 1740

Width = 675

Caption = "Estado :"

End
Begin VBCE.Label lblEstado

Height = 255

Left = 810

Top = 1740

Width = 915

BackColor = 65535

Caption = "Activa"

End
Begin VBCE.Label Label5

Height = 225

Left = 1980

Top = 1770

Width = 525

Caption = "Valor:"

End
Begin VBCE.TextBox txtValor

Height = 255

Left = 2520

Top = 1740

Width = 765

BorderStyle = 1

Enabled = -1 'True

Text = "$ 0.00"

Alignment = 1

End
Begin VBCE.Label Label6

Height = 225

Left = 1260

Top = 810

Width = 675

Caption = "Tiempo :"

End
Begin VBCE.TextBox txtTime

Height = 285

Left = 1950

Top = 780
Width = 1365
Text = "00:00:00"
End
End
End
Attribute VB_Name = "frmTareas"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

Bueno recuerden que solo les estoy mostrando las propiedades mas representatives para
que se guíen en las posiciones y tamaños de los controles y para que sus ejemplos se
vean lo mas parecido posible al que yo les estoy desarrollando.

Perdonen un poco el desorden de esta entrega por la premura pero se las debía desde
hacia bastante rato.

No es mas por hoy... esperen la próxima entrega, les aseguro que no se va a demorar
tanto.

Un Saludo a todos ¡!! Nos Vemos

Roberto Alvarado

5 Entrega

En esta nueva entrega vamos a hablar mas detenidamente sobre los controles utilizados
en la cuarta entrega.

Control MenuBar

Como pudimos ver en la anterior entrega, este control nos permite crear menús y / o
barras de herramientas o Toolbars como son mas conocidas. Podemos utilizar o crear
solo menús de textos, solo menús de botones o barras de herramientas, o la combinación
de ambos como en el ejemplo de la entrega anterior.

Dim mnuTablas As MenuBarMenu


Dim mnuAccion As MenuBarMenu

Como podemos observar se debe declarar dos variables de tipo MenuBarMenu, una
para cada opción del menú a crear.

'Configuro el MenuBar
Set mnuTablas = MenuBar1.Controls.AddMenu("Tablas", mnuTablas)
mnuTablas.Items.Add 1, "mnuTabTareas", "Tareas"
mnuTablas.Items.Add 2, "mnuTabClientes", "Clientes"
mnuTablas.Items.Add 3, "mnuTabApp", "Aplicaciones"

Set mnuAccion = MenuBar1.Controls.AddMenu("Accion", mnuAccion)


mnuAccion.Items.Add 1, "mnuNuevo", "Nuevo"
mnuAccion.Items.Add 2, "mnuEditar", "Editar"
mnuAccion.Items.Add 3, "mnuBorrar", "Borrar"
mnuAccion.Items.Add 4, "mnuSepara1", "------------"
mnuAccion.Items.Add 5, "mnuCancelar", "Cancelar"
mnuAccion.Items.Add 6, "mnuGuardar", "Guardar"
mnuAccion.Items.Add 7, "mnuSepara2", "------------"
mnuAccion.Items.Add 8, "mnuCerrar", "Cerrar"
mnuAccion.Items("mnuSepara1").Enabled = False
mnuAccion.Items("mnuSepara2").Enabled = False

Luego configuramos cada uno de estos objetos menú. En cada una de las instrucciones
Set estamos creando una instancia de los objetos declarados antes, e inmediatamente les
asignamos el texto o Caption que va a aparecer en la pantalla, como primer parámetro
del método Addmenu de la colección Controls del control MenuBar, el segundo
parámetro es la llave o Key del objeto, la cual nos va a permitir llamarlo o identificarlo
en forma correcta.

Para el caso de la colección Items, o sea los submenús de cada uno de los objetos menú,
llamamos al método Add para crear un Ítem, y los parámetros son, el índice del
elemento dentro de la colección, el segundo es la llave o Key (para nosotros es nuestro
identificador), el tercer parámetro es el Caption o mensaje que va a aparecer en la
pantalla, existe un cuarto parámetro que es el estilo, pero hasta el momento no he
podido ubicar los valores que deben ir y sus correspondientes efectos sobre el menú.
Como podemos apreciar en el código anterior he agregado un par de opciones para
simular unos separadores dentro del menú de Accion.

En las dos ultimas líneas del código anterior, desactivamos las opciones mnuSepara1 y
mnuSepara2 para simular una línea de separación de menús. gris.

Para capturar el evento de clic sobre alguno de las opciones del menú, utilizamos el
evento:

Private Sub MenuBar1_MenuClick(ByVal Item As MenuBarLib.Item)


Select Case Item.Key
Case "mnuTabTareas"
'TAREAS
Case "mnuTabClientes"
'CLIENTES
Case "mnuTabApp"
'APLICACIONES
Case "mnuNuevo"
'NUEVO
Case "mnuEditar"
'EDITAR
Case "mnuborrar"
'BORRAR
Case "mnuCancelar"
'CANCELAR
Case "mnuGuardar"
'GUARDAR, GRABAR O SALVAR
Case "Cerrar"
'CERRAR LA OPCION ACTUAL
End Select
End Sub

A medida que avancemos iremos colocando el código necesario para cada una de las
opciones del menú.

Ahora con botones

Ahora vamos a explicar mucho mas los menús pero como barras de herramientas o
Toolbars.

Podemos utilizar botones utilizando los iconos predefinidos del sistema, estos iconos
son los que aparecen en la grafica siguiente:

Primero definimos los objetos MenuBarButton que representa cada botón de la barra
que vayamos a crear.

'Configuro los botones


Dim btnSepara As MenuBarButton
Dim btnInicio As MenuBarButton
Dim btnPrevio As MenuBarButton
Dim btnSigte As MenuBarButton
Dim btnFin As MenuBarButton

Luego configuramos cada uno de los botones, en nuestro caso, el primer botón es un
separador para diferenciar el menú de texto del de los botones gráficos.

'botón Separador

Set btnSepara = MenuBar1.Controls.AddButton

btnSepara.Width = 80

btnSepara.Style = mbrSeparator

'botón Inicio

Set btnInicio = MenuBar1.Controls.AddButton("btnInicio")

btnInicio.Image = 1

btnInicio.Style = mbrDefault

'botón Previo

Set btnPrevio = MenuBar1.Controls.AddButton("btnPrevio")

btnPrevio.Image = 2

btnPrevio.Style = mbrDefault

'botón Sgte

Set btnSigte = MenuBar1.Controls.AddButton("btnSigte")

btnSigte.Image = 3

btnSigte.Style = mbrDefault

'botón Ultimo

Set btnFin = MenuBar1.Controls.AddButton("btnFin")

btnFin.Image = 4

btnFin.Style = mbrDefault

Para nuestro caso las imágenes que estamos asociando a cada botón las colocamos en un
control ImageList, el cual configuramos en esta parte del código:

' Configuro el tamaño de las imágenes

ImageList1.ImageHeight = 16

ImageList1.ImageWidth = 16

' Agrego las imágenes

ImageList1.Add App.Path & "\Primero.bmp"

ImageList1.Add App.Path & "\Atras.bmp"

ImageList1.Add App.Path & "\Adelante.bmp"

ImageList1.Add App.Path & "\Ultimo.bmp"

'Le decimos al MenuBar que use el ImageList

MenuBar1.ImageList = ImageList1.hImageList

Por eso asignamos a los botones las imagines 1, 2, 3 y 4 respectivamente.

Si vamos a utilizar los iconos del sistema no necesitamos crear un imagelist, eVb lo crea
Automáticamente con solo decirle el numero de los iconos del sistema en la propiedad
Image, teniendo en cuenta la imagen de arriba de los iconos del sistema.

Para capturar los eventos clic que se ejecuten sobre cada botón entonces usamos el
siguiente evento:

Private Sub MenuBar1_ButtonClick(ByVal Button As MenuBarLib.MenuBarButton)


Select Case Button.Key

Case "btnInicio"

Case "btnPrevio"

Case "btnSigte"

Case "btnFin"

End Select
End Sub

Para finalizar por hoy con esta charla teórica, eliminamos de memoria los objetos
utilizados
' Luego que los botones y los menús son agregados

' al MenuBar, los Objectos se liberan

Set mnuTablas = Nothing

Set mnuAccion = Nothing

Set btnSepara = Nothing

Set btnInicio = Nothing

Set btnSigte = Nothing

Set btnPrevio = Nothing

Set btnFin = Nothing

Frames

Me parece muy importante hablar de este control, particularmente en el desarrollo de


aplicaciones para Windows CE, principalmente por la característica de que no se
pueden descargar los forms (formas) de memoria en Windows CE.

El control Frame es Intrínsico en eVB, eso quiere decir que viene dentro de los archivos
del runtime de eVB, y no es necesario ir a la opción de referencias y referenciarlo, o ir a
la opción de Componentes y escogerlo de allá.

El control Frame es un contenedor de controles, esto quiere decir que este control puede
contener todos o casi todos los controles que maneja eVB dentro de el.

Nosotros, y particularmente yo -, utilizo los frames para simular diferentes ventanas de


la aplicación, solamente los pongo invisibles y los muestro cuando son necesarios y los
muevo a las posiciones de la pantalla correspondiente. Esto lo veremos a medida que
desarrollemos la aplicación y lo entenderán mejor .

Las propiedades que mas utilizo de los frames son: Visible, Top, Left.

Con visible muestro u oculto el frame de la pantalla


Con Top coloco la posición superior del frame en donde la necesito
Con Left coloco la posición izquierda del frame donde la necesito.

Resumen

Bien, en esta entrega explicamos el control MenuBar para crear menús y barras de
herramientas o botones gráficos, además se explica como podemos utilizar el control
ImageList y como asignarle imágenes.

Aprendimos como asignarle un control ImageList a un control MenuBar.

Además que podemos usar los iconos del sistema para utilizarlos en un MenuBar.
Que los frames van a ser nuestros mejores aliados para el desarrollo de aplicaciones en
Pocket PC y Windows CE para simular diferentes ventanas o pantallas (como quieran
decirles - ).

Bueno chicos.... no es mas por hoy. Que tengan un buen día y que trabajen mucho y
sean muy bien remunerados, denle gracias a Dios por todo lo que tienen.

Un Abrazo

Roberto Alvarado

6 Entrega
En esta nuestra Sexta entrega vamos a crear la pantalla para los clientes y para
aplicaciones.

Clientes

Luego de abrir el proyecto Tareas, vamos a hacer clic sobre la barra de titulo de la
forma frmTareas y en la ventana de propiedades, vamos a buscar la propiedad Width, y
le vamos a asignar el valor 7665.

Agregamos a nuestro proyecto un nuevo control frame con las siguientes características:
Visible False
Width 3405
Height 2835
Caption [Clientes]
Left 3510
Top 60
Name fraClientes

Y dentro del frame colocamos los siguientes controles, fíjense que aquí están de nuevo
las características del Frame:

Begin VBCE.Frame fraClientes

Height = 2835

Left = 3510

Top = 60

Visible = 0 'False

Width = 3405

Caption = "[Clientes]"

Begin VBCE.Label Label13

Height = 285

Left = 90

Top = 2040

Width = 705

Caption = "Abr. Hora:"

End

Begin VBCE.TextBox Text7

Height = 285

Left = 810

Top = 2010

Width = 1545

Text = ""

End
Begin VBCE.TextBox Text6

Height = 285

Left = 810

Top = 1710

Width = 1545

Text = ""

End
Begin VBCE.Label Label12

Height = 255

Left = 90

Top = 1770

Width = 645

Caption = "Fax : "

End
Begin VBCE.TextBox Text5

Height = 285

Left = 810

Top = 1410

Width = 1545

Text = ""

End
Begin VBCE.Label Label11

Height = 225

Left = 90

Top = 1470

Width = 675

Caption = "Celular :"

End
Begin VBCE.TextBox Text4

Height = 285

Left = 810

Top = 1110

Width = 1545

Text = ""

End
Begin VBCE.Label Label10

Height = 255

Left = 90

Top = 1140

Width = 705

Caption = "Teléfono:"

End
Begin VBCE.TextBox Text3

Height = 285

Left = 810

Top = 810

Width = 2505

Text = ""

End
Begin VBCE.Label Label9

Height = 195

Left = 90

Top = 840

Width = 675

Caption = "Diré. :"

End
Begin VBCE.TextBox Text2

Height = 255

Left = 810

Top = 540

Width = 2505

Text = ""

End
Begin VBCE.Label Label8

Height = 255

Left = 90

Top = 540

Width = 735

Caption = "Nombre :"

End
Begin VBCE.TextBox Text1

Height = 255

Left = 960

Top = 240

Width = 2055

Text = ""

End
Begin VBCE.Label Label7

Height = 255

Left = 90

Top = 240

Width = 945

Caption = "ID Cliente :"

End

End

Muy bien ahora ya tenemos la pantalla para capturar los clientes de nuestra aplicación.
Entonces vamos a crear también la pantalla para capturar las aplicaciones que vamos a
atender y enlazar a una tarea:

Begin VBCE.Frame fraAplicaciones

Height = 1215

Left = 3510

Top = 2940

Visible = 0 'False

Width = 3435

Caption = "[Aplicaciones]"

Begin VBCE.TextBox Text9

Height = 285

Left = 1230

Top = 570

Width = 2145

Text = ""

End
Begin VBCE.Label Label15

Height = 285

Left = 150

Top = 570

Width = 1005

Caption = "Aplicacion : "

End
Begin VBCE.TextBox Text8

Height = 255

Left = 1170

Top = 240

Width = 1725

Text = ""

End
Begin VBCE.Label Label14

Height = 285

Left = 120

Top = 270

Width = 1035

Caption = "ID Aplicacion :"

End

End

Quizás en este punto a muchos les es difícil colocar los controles en las misma posición
en la cual yo estoy dando y esto se debe a que tienen la grilla (los puntos que aparecen
en la forma) muy separados y no saben como configurarlos. Entonces, vamos a
configurar el espacio de los puntos de la grilla, en el menú Tools, escogemos la opción
Options... y nos muestra la siguiente pantalla:

En donde vamos a escoger la pestaña General y vamos a modificar los datos Width y
Height del recuadro Form Grid Settings, tal como se muestra en la figura.
Una vez hecho esto presionamos el botón OK para guardar los cambios.

En una de las entregas anteriores les mencione algo sobre como poder lograr imprimir
las características de todos los controles de la forma y del proyecto, en la forma en que
yo se las muestro también en el tutorial. (Vuelvo y recalco que solo les muestro las
propiedades que me interesan y las más relevantes de cada control, el resto de las
propiedades tienen sus valores por defecto).

Bien la manera de hacer esto es lo siguiente: llamen o ejecuten el NotePad, y escojan la


opción de abrir un archivo, busquen el directorio en donde tengan el proyecto y la forma
que quieran ver. Escójanla y en el editor del NotePad aparecerán todas las propiedades
de cada uno de los controles que se encuentren en la forma, después aparecerá el código
que hayamos escrito para los diferentes controles.

Bueno... ese es el truco. Espero lo disfruten y aprovechen tanto como a mi me ha


servido.

Por hoy no es más....

Un Saludo

Roberto Alvarado

7 Entrega
Hola a todos nuevamente…..
Aquí venimos con otra entrega del tutorial de eVB, para empezar aquí les muestro como
debe quedar aproximadamente nuestra pantalla en tiempo de desarrollo de nuestra
aplicación de tareas:

En esta entrega vamos a poner a funcionar las opciones del menú que creamos en la
anterior entrega.

Para nuestro menú de Tablas tenemos tres opciones: Tareas, Clientes y Aplicaciones,
vamos a colocar el código para cada vez que escojamos esta opción nos muestre la
pantalla correcta.

Para esto el código del evento MenuClick quedaría de la siguiente manera:

Private Sub MenuBar1_MenuClick(ByVal Item As MenuBarLib.Item)


Select Case Item.Key
Case "mnuTabTareas"

'TAREAS

fraTareas.Top = 0

fraTareas.Left = 30

fraTareas.Visible = True

Case "mnuTabClientes"

'CLIENTES

fraClientes.Top = 0

fraClientes.Left = 30

fraClientes.Visible = True

Case "mnuTabApp"
'APLICACIONES

fraAplicaciones.Top = 0

fraAplicaciones.Left = 30

fraAplicaciones.Visible = True

Case "mnuNuevo"

'NUEVO

Case "mnuEditar"

'EDITAR

Case "mnuborrar"

'BORRAR

Case "mnuCancelar"

'CANCELAR

Case "mnuGuardar"

'GUARDAR, GRABAR O SALVAR

Case "mnuCerrar"

'CERRAR LA OPCION ACTUAL

If fraTareas.Visible Then

fraTareas.Visible = False

End If

If fraClientes.Visible Then

fraClientes.Visible = False

End If

If fraAplicaciones.Visible Then

fraAplicaciones.Visible = False
End If
End Select
End Sub

Como podemos apreciar colocamos cada uno de los frames en la posición superior de la
pantalla y lo mostramos, en la opción de cerrar ocultamos el frame si esta visible.

Lo mas importante y esperados por todos.... la BD

Ahora vamos a empezar a trabajar con la base de datos, lo primero es verificar si el


archivo cdb existe para ir a crearlo, al igual que las tablas que conforman nuestra base
de datos.

Para poder hacer esto necesitamos el control FileSystem, y necesitamos activarlo en el


proyecto, vamos al menú Project, y escogemos la opción Componnents, aquí
seleccionamos Microsoft CE File System Control 3.0. Con esto en nuestra barra de
herramientas de la parte izquierda nos van a aparecer dos controles: FileSystem y File.

Para insertar el control FileSystem en nuestro proyecto hacemos doble clic sobre el

icono de la barra de herramientas , se inserta el control en la forma con el nombre


FileSystem1; se puede cambiar el nombre de este control que seria la mas relevante de
las 5 propiedades que muestra, ya que en ejecución este control es totalmente invisible a
la vista del usuario.
Este es el código en el evento Load de la forma para verificar si existe el archivo o no:

'Verifico si existe el archivo CDB


If FileSystem1.Dir(App.Path & "\Tareas.cdb") = "" Then
'No existe el Archivo
Call CrearBaseDatos

End If

Como podemos apreciar si el archivo no existe llamamos a una rutina o procedimiento


llamada CrearBaseDatos. Esta rutina la vamos a colocar en un Modulo .BAS. Para
crear este modulo .Bas nos vamos a la opción Project, escogemos Add Module y
hacemos clic sobre el botón Open, esto nos creara un modulo en blanco, al cual le
vamos a asignar el nombre de modTareas. Esto lo podemos hacer en la propiedad
Name del Modulo.

En el modulo modTareas vamos a desarrollar la rutina CrearBasedatos, como vamos a


crear las tablas que vamos a utilizar en el programa me permito colocar tal y como
vienen en la ayuda de las EVT la descripción de los tipos de campos que podemos
utilizar para nuestras tablas. No traduzco la descripción, porque considero esta sencilla
y no quiero entrar en errores de interpretación. así que aquí esta la descripción de los
campos que podemos utilizar:

Data Type Description


Varchar[(n)] NULL-terminated Unicode character string of length n,
with a maximum of 255 characters. If n is not supplied,
then 1 is assumed.
Text Variable length string that can hold up to 32,000
characters. It is typically used for more than 255
characters.
Varbinary[(n)] Binary value of less than 256. If n is not specified, the
default is 1.
Long Varbinary Binary value of less than 65,469 bytes. This type is also
known as OLE Object.
Integer, int 4-byte signed integer.
Smallint 2-byte signed integer.
Float Double-precision floating point value.
Datetime Date object value.
Bit Logical or Boolean value. Zero is FALSE and nonzero
is TRUE.
Uint Unsigned 4-byte integer, which is provided for
backward compatibility only.
Usmallint Unsigned 2-byte integer, which is provided for
backward compatibility only.

Enseguida les muestro el código de la rutina para crear la base de datos cdb y sus
respectivas tablas, de acuerdo al diseño de la tercera entrega.
Sub CrearBaseDatos()
'Creo el archivo de Base de datos en la
'misma carpeta de la aplicación
Dim rs As ADOCE.Recordset
Dim DB As String
Dim cnn As ADOCE.Connection

'Creamos el archivo CDB

DB = App.Path & "\Tareas.cdb"

Set rs = CreateObject("ADOCE.Recordset.3.0")

rs.Open "CREATE DATABASE '" & DB & "'"

Set rs = Nothing

'Creamos las tablas

'Tabla de Tareas

Set cnn = CreateObject("ADOCE.Connection.3.0")

cnn.Open DB

cnn.Execute "CREATE TABLE Tareas (IdTarea Int, " & _

"Aplicacion varchar(5), " & _

"Tarea varchar(50), " & _

"Cliente Int, " & _

"Tiempo varchar(8), " & _

"FecIni DateTime, " & _

"FecFin DateTime, " & _

"Estado Varchar, " & _

"HoraInicio Varchar(8), " & _

"HoraFinal Varchar(8), " & _

"ValorHora Int, " & _

"Descripcion Varchar(255) )"

'Ahora la Tabla existe en la Base de Datos CDB


cnn.Close
'Tabla de Clientes
cnn.Open DB
cnn.Execute "CREATE TABLE Clientes (IdCliente Int, " & _
"Nombre varchar(50), " & _
"Direccion varchar(50), " & _
"Telefonos Varchar(20), " & _
"Celular varchar(20), " & _
"Fax Varchar(20), " & _
"ValorHora Int )"
cnn.Close
'Tabla del LOG
cnn.Open DB
cnn.Execute "CREATE TABLE Log (Fecha DateTime, " & _
"Hora varchar(8), " & _

"IdTarea Int), " & _

"Tipo Varchar, " & _

"Observacion varchar(255) )"

cnn.Close
'Tabla Aplicaciones

cnn.Open DB

cnn.Execute "CREATE TABLE Aplicaciones (IdApp Varchar(5), " & _

"Aplicacion varchar(30) ) "

cnn.Close

Set cnn = Nothing

End Sub

Con esto contesto una de las preguntas que mas se hacen en los post, Como se pueden
crear base de datos en Windows CE.

Bueno por hoy hasta aquí les dejo....

Que la pasen MUY BIEN!!!!!

Su Amigo

Roberto Alvarado

Buenas a todos !!!!!

8 Entrega
Aquí regreso con la octava entrega....

En esta entrega vamos a empezar a trabajar con las tablas, vamos a crear nuevos
registros a modificarlos, eliminarlos, así que aquí vamos.......

Muy bien, para empezar vamos ha hacer algunas consideraciones :

En Embedded Visual Basic, existe un Bug con respecto a la liberación de memoria, eso
en palabras mas castizas quiere decir, que si abrimos un objeto connection este no se va
a eliminar de la memoria hasta que no cerremos la aplicación igualmente va a suceder
con el objeto recordset. Igual sucede con todos los objetos que creemos con
CreateObject. La intrusión Set Objeto = Nothing NO LIBERA MEMORIA. Tengan en
cuenta esto!
Como ya habíamos utilizado un objeto connection y un objeto recordset, vamos a
cambiar de posición su definición para hacerlos públicos y que podamos accesarlos
desde cualquier punto de nuestra aplicación. Todo esto para aplicar la teoría que todos
hemos discutido en el foro acerca de la liberación de memoria o de su uso en EVB. Esta
posición y línea de desarrollo es mía, no quiere decir en ningún momento que ustedes
deban seguirla, lo único que trato es de decirles como es más óptimo para que en lo
posible no haya problemas mas tarde con la memoria.

Muy bien, entonces nos vamos a ir al modulo que creamos y vamos a escoger el
procedimiento CrearBasedatos, para corregir algunas líneas del código:

Dim rs As ADOCE.Recordset

Dim cnn As ADOCE.Connection

Estas líneas que están en el procedimiento CrearBaseDatos, las vamos a eliminar y la


vamos a colocar en la sección de definiciones del modulo de esta manera:

Option Explicit
Public rs As ADOCE.Recordset
Public cnn As ADOCE.Connection

Ahora las instrucciones:

Set rs = Nothing
Set cnn = Nothing

Que están en el procedimiento CrearBaseDatos, del modulo, las trasladamos al evento


Terminate de la forma:

Private Sub Form_Terminate()


Set rs = Nothing
Set cnn = Nothing
End Sub

también debemos trasladar al evento Load de la forma la apertura de objeto connection,


esto quedaría de esta manera:

'Verifico si existe el archivo CDB


If FileSystem1.Dir(App.Path & "\Tareas.cdb") = "" Then
'No existe el Archivo
Call CrearBaseDatos

End If

Set cnn = CreateObject("ADOCE.Connection.3.0")


cnn.Open App.Path & "\Tareas.cdb"

Después de verificar que el archivo de la base de datos existe para que no saque error al
intentar abrir la conexión.

Ahora hasta este momento las opciones del menú Accion están Activas, estas opciones
no deben activarse hasta que no se escoja alguna de las opciones del menú Tablas.

Vamos a desactivar estas opciones de la siguiente forma, esto lo colocamos en el evento


Load de la Forma:

'Configuro menú Accion


mnuAccion.Items("mnuNuevo").Enabled = False
mnuAccion.Items("mnuEditar").Enabled = False
mnuAccion.Items("mnuBorrar").Enabled = False
mnuAccion.Items("mnuCancelar").Enabled = False
mnuAccion.Items("mnuGuardar").Enabled = False
mnuAccion.Items("mnuCerrar").Enabled = False
Además eliminamos del evento Load las instrucciones Set ... Nothing y las trasladamos
al evento Terminate de la forma, con esto el código quedaría de esta manera:

Private Sub Form_Terminate()


Set rs = Nothing
Set cnn = Nothing
' Luego que los botones y los menús son agregados
' al MenuBar, los Objectos se liberan
Set mnuTablas = Nothing
Set mnuAccion = Nothing
Set btnSepara = Nothing
Set btnInicio = Nothing
Set btnSigte = Nothing
Set btnPrevio = Nothing
Set btnFin = Nothing
End Sub

Muy bien ya hemos ajustado todo lo necesario, ahora continuemos, cada vez que
escojamos alguna de las opciones del menú Tablas debemos activar las opciones del
menú Accion para esto utilizamos el procedimiento ActivarMenu

Sub ActivarMenu(ByRef mnuAccion As MenuBarMenu)


mnuAccion.Items("mnuNuevo").Enabled = True
mnuAccion.Items("mnuEditar").Enabled = True
mnuAccion.Items("mnuBorrar").Enabled = True
mnuAccion.Items("mnuCerrar").Enabled = True
End Sub

Observen que estamos utilizando ByRef para indicarle que el objeto mnuAccion debe
cambiar en la forma.

también debemos sacar la definición de las variable mnuTablas y mnuAccion a la


sección de definiciones de la forma.

Cuando escojamos la opción Nuevo del menú Accion, las opciones anteriores deben
restringirse y activar las opciones Cancelar y Grabar, para eso crearemos un
procedimiento llamado ActivarGuardar en el modulo. El código es el siguiente:

Sub ActivarGuardar(ByRef mnuAccion As MenuBarMenu, ByRef mnuTablas As


MenuBarMenu)
mnuAccion.Items("mnuNuevo").Enabled = False
mnuAccion.Items("mnuEditar").Enabled = False
mnuAccion.Items("mnuBorrar").Enabled = False
mnuAccion.Items("mnuCancelar").Enabled = True
mnuAccion.Items("mnuGuardar").Enabled = True
mnuAccion.Items("mnuCerrar").Enabled = False
mnuTablas.Items("mnuTabTareas").Enabled = False
mnuTablas.Items("mnuTabClientes").Enabled = False
mnuTablas.Items("mnuTabApp").Enabled = False
End Sub
Además desactivamos las opciones del menú Tablas, con esto aseguramos que mientras
estemos creando un registro nuevo de algún tipo, no van a abrir cualquiera de las otras
opciones del menú Tablas.

Ahora vamos a codificar cuando escojamos la opción Nuevo del menú Accion

Case "mnuNuevo"
'NUEVO
ActivarGuardar
If fraClientes.Visible Then
'Limpio los textbox

For i = 0 To Me.Controls.Count - 1

If Mid(Me.Controls(i).Name, 1, 4) = "Text" Then

Me.Controls(i).Text = ""

End If

Next i

End If

En el código anterior recorremos la colección Controls de la forma y cuando sea un


TextBox cuyo nombre empiece por Text, pone en blanco su propiedad Text. Esta es la
única manera que he encontrado hasta ahora de trabajar con las colecciones intrínsecas
de eVB.

Como estamos trabajando con la librería ADOCE vamos a activar la referencia de esta,
vamos al menú de Project, escogemos References y activamos la referencia Microsoft
CE ADO Control 3.0.

Para diferenciar si estamos creando un nuevo registro o si lo estamos modificando,


vamos a utilizar una variable publica en el modulo que vamos a llamar xNuevo, esta
variable cuando escojamos la opción Nuevo del menú Accion, la vamos a hacer igual a
uno (1) y cuando escojamos Modificar será igual a dos (2).

En la opción Guardar del menú Accion vamos a preguntar si esta variable es igual a uno
(1), entonces adicionamos un registro en blanco a la tabla con el método AddNew,
llenaremos uno a uno cada uno de los campos utilizando la colección Fields del
recordset y luego guardaremos la información con el método Update.

En la opción Cerrar del menú Accion vamos a cerrar el Recordset que este activo en el
momento.

Cuando escogemos las opciones Cancelar o Guardar debemos volver a activar las
opciones de ambos menús, aquí esta el código del procedimiento que usamos en estas
opciones del menú Accion:

Sub desActivoGuardar(ByRef mnuAccion As MenuBarMenu, ByRef mnuTablas As


MenuBarMenu)
mnuAccion.Items("mnuNuevo").Enabled = True
mnuAccion.Items("mnuEditar").Enabled = True
mnuAccion.Items("mnuBorrar").Enabled = True
mnuAccion.Items("mnuCancelar").Enabled = True

mnuAccion.Items("mnuGuardar").Enabled = False

mnuAccion.Items("mnuCerrar").Enabled = False

mnuTablas.Items("mnuTabTareas").Enabled = True

mnuTablas.Items("mnuTabClientes").Enabled = True

mnuTablas.Items("mnuTabApp").Enabled = True

End Sub

La opción de Borrar la vamos a dejar para más adelante cuando hayamos implementado
un método de búsqueda para los registros de las tablas.

A continuación listo el código del evento MenuClick en donde hemos desarrollado casi
todo :

Private Sub MenuBar1_MenuClick(ByVal Item As MenuBarLib.Item)


Dim i As Long

Select Case Item.Key


Case "mnuTabTareas"

'TAREAS

fraTareas.Top = 0

fraTareas.Left = 30

fraTareas.Visible = True

ActivarMenu

Case "mnuTabClientes"

'CLIENTES

fraClientes.Top = 0

fraClientes.Left = 30

fraClientes.Visible = True

ActivarMenu

'Creo la instancia del objeto recordset

Set rs = CreateObject("ADOCE.Recordset.3.0")

'Abro el recordset

rs.Open "Clientes", cnn, adOpenDynamic, adLockOptimistic

Case "mnuTabApp"

'APLICACIONES

fraAplicaciones.Top = 0

fraAplicaciones.Left = 30

fraAplicaciones.Visible = True

ActivarMenu

Case "mnuNuevo"

'NUEVO

ActivarGuardar

xNuevo = 1

If fraClientes.Visible Then

'Limpio los textbox

Text1.Enabled = True

For i = 0 To Me.Controls.Count - 1

If Mid(Me.Controls(i).Name, 1, 4) = "Text" Then

Me.Controls(i).Text = ""

End If

Next i

End If

Case "mnuEditar"

'EDITAR

xNuevo = 2

If fraClientes.Visible Then

'El ID no puede Modificarse

Text1.Enabled = False

End If

Case "mnuBorrar"

'BORRAR

Case "mnuCancelar"

'CANCELAR

desActivoGuardar mnuAccion, mnuTablas

Case "mnuGuardar"

'GUARDAR, GRABAR O SALVAR

If xNuevo = 1 Then

rs.AddNew

End If

rs.Fields("IdCliente") = Text1.Text

rs.Fields("Nombre") = Text2.Text

rs.Fields("Direccion") = Text3.Text

rs.Fields("Telefonos") = Text4.Text

rs.Fields("Celular") = Text5.Text

rs.Fields("Fax") = Text6.Text

rs.Fields("ValorHora") = Text7.Text

rs.Update

desActivoGuardar mnuAccion, mnuTablas

Case "mnuCerrar"

'CERRAR LA OPCION ACTUAL

rs.Close

If fraTareas.Visible Then

fraTareas.Visible = False

End If

If fraClientes.Visible Then

fraClientes.Visible = False

End If

If fraAplicaciones.Visible Then

fraAplicaciones.Visible = False
End If
End Select
End Sub

Ahora les dejo de tarea que hagan lo mismo para la opción de Aplicaciones... la de
Tareas es un poco mas complicada y la desarrollaremos en nuestra próxima entrega.

Que tengan un agradable desarrollo y espero poder ir ayudándolos a entender la forma


de desarrollo de esta herramienta y de despejarles las dudas que tienen o que tenian
sobre todo en el manejo de las bases de datos.
Un cariñoso saludo a todos.... y hasta la próxima

Su Amigo

Roberto Alvarado

9 Entrega
En esta novena entrega vamos a terminar la captura de los datos de la opción
Aplicaciones.

Para empezar vamos a modificar la sección del menú en donde escogemos un nuevo
registro para configurar la pantalla y los campos de Aplicaciones, vamos a agregar el
siguiente fragmento de código :

If fraAplicaciones.Visible Then

Text8.Enabled = True

Text8.Text = ""

Text9.Text = ""

End If

En la opción de Grabar Agregamos el código correspondiente a la Tabla Aplicaciones y


modificamos algo el código anterior, a continuación mostramos el código para esta
opción:

If fraClientes.Visible Then

rs.Fields("IdCliente") = Text1.Text

rs.Fields("Nombre") = Text2.Text

rs.Fields("Direccion") = Text3.Text

rs.Fields("Telefonos") = Text4.Text

rs.Fields("Celular") = Text5.Text

rs.Fields("Fax") = Text6.Text

rs.Fields("ValorHora") = Text7.Text

End If
If fraAplicaciones.Visible Then

rs.Fields("IdApp") = Text8.Text

rs.Fields("Aplicacion") = Text9.Text

End If
Rs.Update

Note que el Update lo colocamos al final y colocamos dentro de una instrucción if los
datos para clientes y los datos para las Aplicaciones.

Vamos a trasladar la instanciacion del objeto recordset rs al evento Load de la forma, lo


eliminamos de la opción Nuevo de Clientes y lo colocamos en el evento Load de la
forma . Entonces el código para los menús de Clientes y Aplicaciones quedaría de la
siguiente manera:

Case "mnuTabClientes"
'CLIENTES

fraClientes.Top = 0

fraClientes.Left = 30

fraClientes.Visible = True

ActivarMenu mnuAccion

'Abro el recordset

rs.Open "Clientes", cnn, adOpenDynamic, adLockOptimistic

Case "mnuTabApp"

'APLICACIONES

fraAplicaciones.Top = 0

fraAplicaciones.Left = 30

fraAplicaciones.Visible = True

ActivarMenu mnuAccion

'Abro el recordset con la tabla Aplicaciones

rs.Open "Aplicaciones", cnn, adOpenDynamic, adLockOptimistic

Muy bien... ha llegado la hora de colocarle código a los botones de navegación que
tenemos, entonces nos vamos al procedimiento MenuBar1_ButtonClick y colocamos el
siguiente código:

Private Sub MenuBar1_ButtonClick(ByVal Button As MenuBarLib.MenuBarButton)


Select Case Button.Key
Case "btnInicio"
rs.MoveFirst
Case "btnPrevio"

rs.MovePrevious

If rs.BOF Then

rs.MoveFirst
MsgBox "Es el PRIMER Registro", vbApplicationModal + vbOKOnly,
"Consultando..."
End If
Case "btnSigte"

rs.MoveNext

If rs.EOF Then

rs.MoveLast
MsgBox "Es el ULTIMO Registro", vbApplicationModal + vbOKOnly,
"Consultando..."
End If
Case "btnFin"
rs.MoveLast

End Select

MuestraRegistros

End Sub

Con este código si presionamos el botón Primero nos colocamos en el primer registro
del recordset, si lo hacemos en el botón anterior, nos movemos un registro atrás, si
presionamos siguiente, nos desplazamos al siguiente registro y si le decimos ultimo, no
vamos al ultimo registro del recordet. Cada vez que nos movamos vamos actualizando
los datos en la pantalla dependiendo de que opción tengamos escogida.
Muy bien debemos tener cuidado cuando estemos editando o creando un nuevo registro
para desactivar los botones, ya que si los dejamos activos en estos momentos podemos
tener errores al momento de guardar la información.

Vamos a crear dos procedimientos, uno para desactivar los botones y otro para
activarlos nuevamente, aquí esta el código de estos dos procedimientos:

Sub DesactivoNavega()
MenuBar1.Controls.Item(4).Enabled = False
MenuBar1.Controls.Item(5).Enabled = False
MenuBar1.Controls.Item(6).Enabled = False
MenuBar1.Controls.Item(7).Enabled = False
End Sub

Sub ActivoNavega()
MenuBar1.Controls.Item(4).Enabled = True
MenuBar1.Controls.Item(5).Enabled = True
MenuBar1.Controls.Item(6).Enabled = True
MenuBar1.Controls.Item(7).Enabled = True
End Sub

El procedimiento DesactivoNavega lo vamos a utilizar en la opción Nuevo y Editar, el


procedimiento ActivoNavega lo vamos a utilizar en las opciones Guardar y Cancelar del
menú.

Si ya han probado la opción Cancelar del menú Accion, se habrán dado cuenta que esta
mal cuando retorna el menú, el error se soluciona colocando estas líneas de la siguiente
forma:

mnuAccion.Items("mnuCerrar").Enabled = True

mnuAccion.Items("mnuCancelar").Enabled = False

Coloquemos este procedimiento:

Private Sub Text8_LostFocus()


Text8.Text = UCase(Text8.Text)
End Sub

Con esto convertimos a mayúsculas cuando el textbox pierda el foco. así estamos
seguro que el ID de la aplicación siempre va a estar en mayúscula.

Ahora hagamos la opción de borrado para estas dos opciones que están activas en este
momento.

Case "mnuborrar"
'BORRAR
Dim Resp As Long
Resp = MsgBox("Esta seguro de eliminar este registro?", vbApplicationModal +
vbCritical + vbYesNo, "Eliminando Registros...")
If Resp = vbYes Then
rs.Delete

rs.MoveFirst

MuestraRegistro

End If

Ese seria el código para borrar registros de la tabla. La misma rutina nos sirve para
todas las tablas, dependiendo de la complejidad de su aplicación así será de compleja su
rutina de borrado.

La rutina MuestraRegistro será esta:

Sub MuestraRegistro()
If fraClientes.Visible Then

Text1.Text = rs.Fields("IdCliente")

Text2.Text = rs.Fields("Nombre")

Text3.Text = rs.Fields("Direccion")

Text4.Text = rs.Fields("Telefonos")

Text5.Text = rs.Fields("Celular")

Text6.Text = rs.Fields("Fax")

Text7.Text = rs.Fields("ValorHora")

End If
If fraAplicaciones.Visible Then

Text8.Text = rs.Fields("IdApp")

Text9.Text = rs.Fields("Aplicacion")

End If
End Sub

Bueno por hoy hasta aquí esta bien... nos vemos en la próxima entrega

Saludos
Roberto Alvarado

Vous aimerez peut-être aussi