interface design vb6 - spanish.pdf
Embed Size (px)
TRANSCRIPT

Diseño de interfaces
Comenzar a utilizar VB6Autor: Andre Saffin
Indice.
• Instalación, conceptos y primeros pasos (en proyectos Xestión)
• Variables
• Funciones de cadena
• Otras funciones
• Objetos:
◦ Formulario
◦ Formulario MDI
◦ MsgBox
◦ TextBox
◦ ListView
• Agregar elementos en un Menú (en proyecto Editor)
• Ayuda
• Crear un informe simple utilizando DataReport(xestionDataReport)
• Los Módulos
• Conexión de objetos ADODB
◦ Objeto Connection
◦ Objeto Command
◦ Objeto Recordset
Instalación:Instalación de Daemon Tools para virtualizar imágenes ISO.
Instalación de Visual Studio 6 Profesional (*no seleccionar FoxPro)
Conceptos:IPO: interacción persona ordenador
IDE: Entorno integrado de desarrollo para:
• Editar,
• Compilar
• Depurar
• Hacer paquetes de instalación.
Se comienza realizando un proyecto que puede ser una aplicación con formularios, procesos, informes, módulos...

Dentro de un proyecto VB6Formulario [FORM] objeto dentro de Visual Basic 6 con :
Propiedades: características.
Métodos: funciones que hacen tareas
Eventos: recoge información de los métodos
Módulos [MOD]: solo tienen código, funciones, aplicaciones y procedimientos.
Informes.
Clases
Controles:
· Definidos por el usuario: botones, mensajes emergentes, menús...
· Por defecto.
Ventana del Visual Basic:Dispone de un MDI: multiple document interface como la siguiente:
Varios documentos abiertos en los cuales si se selecciona se muestra el menú adecuado.
El objeto principal es el proyecto entero , dentro de el hay otros objetos.
En la opción ver, puedo ver el código asociado al objeto o el objeto final en pantalla.
Los módulos solo tienen disponible ver el código. Es reutilizable y se pueden llamar desde cualquier parte del proyecto y su contenido (variables y métodos )es visible desde todos los elementos.
Empezar a usar VB6Tras guardar en el momento del inicio tenemos un archivo .vbp, en el se van a guardar varios tipos de datos como las partes de las que consta nuestro proyecto, que elemento se ejecuta al inicio y otros datos que harán que funcione el proyecto de forma correcta. El contenido de uno de nuestros proyectos es como se muestra en la imagen.

Al iniciar Microsoft Visual Basic 6.0 escogemos crear un archivo “ejecutable” (.exe)
Definición de variables y funciones en VB6:Dim NombreVariable as tipo
Cosnt nombreConstante as tipo = valor
Public nombreVarPublica as tipo
Private Sub nombreProcedimiento()
Código
End Sub
Concepto de ámbito en variables:
Public en FORM abarca todo el formulario→
Private en FORM ámbito local en formulario, sólo para esa función o Sub →
si se cierra formulario se pierde toda la información. ¡¡¡¡GUARDAR FRECUENTEMENTE!!!!!
Tipos simples: ·Integer ·Long ·String ·Boolean
Si no se indica el ámbito es privado por defecto.
Dim hace referencia a la dimensión.
Funciones, métodos y procedimientos. Sintaxis:
Pocedimientos → sub (parámetros as tipo)
Funciones → function (parámetros as tipo) as tipo_retorno
Diferencia: los procedimientos o subrutinas hace una operación sin retorno de información y la función devuelve un dato tras su ejecución.
El ámbito de las funciones o sub es equiparable en significado al de las variables.
Sintaxis:
function nombreFuncion [(parametros as tipo )] [as tipo_retorno]
Para hacer el retorno de la función hacemos:
nombreFuncion = valor_resultado
sub nombreProcedimiento [(parametros as tipo)]
Si no se indica el tipo de retorno de una función se asume por defecto que es Boolean

Los nombres de elementos recomendados según las guías de estilo se escriben:
frmNombre para formularios
txtNombre para caja de texto
btnNombre para botones
cmdNombre para command button
lstNombre para lista
lswNombre para list view
modNombre para módulos
Se recomienda introducir alguna mayúscula en los nombres de las variables, para luego a la hora de escribirlas en el código, el editor al cambio de línea automaticamente hará el UPPERCASE de las letras adecuadas si está escrita correctamente. De no estarlo las letras no se “elevarán” lo que nos dará una idea de que algún error de sintaxis ha ocurrido y debemos corregirlo. Lo mismo sucede con las palabras reservadas del lenguaje de VB.
Funciones de Cadena:
Ltrim, Rtrim, Trim Devuelve un tipo Variant (String) que contiene una copia de una cadena determinada sin espacios a la izquierda (LTrim), sin espacios a la derecha (RTrim) o sin espacios ni a la derecha ni a la izquierda (Trim).
LTrim(cadena)
RTrim(cadena)
Trim(cadena)
Left Devuelve un tipo Variant (String) que contiene un número especificado de caracteres del lado izquierdo de una cadena.
Left(string, length)
Right Devuelve un tipo Variant (String) que contiene un número especificado de caracteres del lado derecho de una cadena.
Right(string, lenght)
Mid Devuelve un tipo Variant (String) que contiene un número especificado de caracteres de una cadena.
Mid(string, start[, length])
Devuelven un tipo Variant (String) que contiene el resultado de dicha operación.
Split Devuelve una matriz de una dimensión, basada en ceros, que contiene un número especificado de subcadenas.
Split(expresión[, delimitador[, contar[, comparar]]])
Ubound Devuelve un tipoLong que contiene el mayor subíndice disponible para la dimensión indicada de unamatriz.
UBound(nombre_matriz[, dimensión])
Len Devuelve un tipo Long que contiene el número de caracteres en una cadena o el número de bytes necesarios para almacenar una variable.
Len(cadena | nombrevar)
Otras funciones
Weekday Devuelve un valor de tipo Variant (Integer) que contiene un número entero que representa el día de la semana.
Weekday(fecha, [primerdíasemana])
Time Devuelve un valor de tipo Variant (Date) indicando la hora actual del sistema.

Timer Devuelve un tipo Single que representa el número de segundos transcurridos desde la medianoche.
Day, Month, Year Devuelve un valor de tipo Variant (Integer) que especifica un número entero entre 1 y 31, inclusive, que representa el día del mes , entre 1 y 12 inclusive, que representa el mes del año y un número entero que representa el año.
Day(fecha), Month(fecha), Year(fecha)
Ejemplo:Dim MiFecha, MiDiaMiFecha = #12 febrero 1969# ' Asigna una fecha.MiDía = Day(MiFecha) ' MiDía contiene 12.
Second, Minute, Hour Devuelven un valor de tipo Variant (Integer) que especifica un número entero entre 0 y 59, entre 0 y 59 y entre 0 y 23 inclusive, que representa el segundo, el minuto de la hora y la hora del día.
Second(hora), Minute(hora), Hora(hora)
Ejemplo:
Dim MiTiempo, MiMinutoMiTiempo = #4:35:17 PM# ' Asigna una hora.MiMinuto = Minute(MiTiempo) ' MiMinuto contiene 35.
Now Devuelve un valor de tipo Variant (Date) que especifica la fecha y hora actuales de acuerdo con la configuración de la fecha y la hora del sistema de su equipo.
Las funciones fueron usadas en el proyecto convertir:
Char, Asc Devuelve un tipoString que contiene el carácter asociado con el código de carácter especificado y un tipoInteger que representa el código de carácter correspondiente a la primera letra de una cadena.
Chr(códigoCaracter), Asc(cadena)
InStr Devuelve un tipo Variant (Long) que especifica la posición de la primera aparición de una cadena en otra.
InStr([start, ]string1, string2[, compare])

InstrRev Devuelve la posición de una aparición de una cadena dentro de otra, desde el final de la cadena.
InstrRev(cadena1, cadena2[, inicio[, comparar]])
Funciones de conversión de tipos
Cada función de las siguientes convierte una expresión a un tipo de datos específico.
Función Tipo devuelto Intervalo del argumento expresión
Cbool Boolean Cualquier expresión de cadena o numérica válida.
Cbyte Byte 0 a 255.
Ccur Currency -922.337.203.685.477,5808 a 922.337.203.685.477,5807.
Cdate Date Cualquier expresión de fecha.
CDbl Double-1,79769313486232E308 a -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos.
Cdec Decimal
+/-79.228.162.514.264.337.593.543.950.335 para números basados en cero, es decir, números sin decimales. Para números con 28 decimales, el intervalo es +/-7,9228162514264337593543950335. La menor posición para un número que no sea cero es 0,0000000000000000000000000001.
Cint Integer -32.768 a 32.767; las fracciones se redondean.
CLng Long -2.147.483.648 a 2.147.483.647; las fracciones se redondean.
CSng Single -3,402823E38 a -1,401298E-45 para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos.
CStr String El mismo intervalo que Double para valores numéricos. El mismo intervalo que String para valores no numéricos.
Cvar Variant El valor de retorno de CStr depende del argumento expresión.
Sintaxis genérica: Función(expresión)
El argumento obligatorio expresión es cualquier expresión de cadena o expresión numérica.
Cualquier expresión cuyo valor es equivalente a una secuencia de caracteres contiguos es una expresión de cadena. Los elementos de la expresión pueden incluir una función que devuelve una cadena, un literal de cadena, una constante de cadena, una variable de cadena, una cadena Variant o una función que devuelve una cadena Variant (VarType 8).
Cualquier expresión numérica que puede ser evaluada como un número. Los elementos de una expresión pueden incluir cualquier combinación de palabras clave, variables, constantes y operadores que dan como resultado un número.
Objetos:
Formulario: Propiedades, métodos y eventos
Creamos un formulario con extensión .frm, para ello hacemos clic en la ventana de proyecto>agregar>formulario, se vería así:
En el siguiente menú desplegable podemos ver todas las posibilidades de elementos que podemos agregar a nuestro proyecto: Formularios, Módulos, Módulos de Clase, informes(Data Report)...etc

Propiedades de un formulario:
Appearance apariencia del objeto, puede ser plano o 3D
AutoRedraw Devuelve o establece el resultado de un método gráfico como gráfico persistente.
BackColor devuelve o establece el color de fondo de un objeto.
BorderStyle
Estilo del borde de un objeto. Para el objeto Form y el control TextBox es de sólo lectura entiempo de ejecución.0.-vbBSNone1.-VbFixedSingle2.-VbSizable3.-vbFixedDouble4.-vbFixedToolWindow5.-vbSizableToolWindow
Caption título de la ventana
ControlBox Devuelve o establece un valor que indica si se muestra un cuadro del menú Control en un formulario
DrawModeDrawStyleDrawWidth
unos valores que determinan la apariencia, estilo de línea y el ancho de línea, respectivamente, del resultado de un método gráfico.
Enabled Activado para responder a eventos generados por usuario
FillColorFillStyle
Color de relleno(Hex) y estilo del relleno(Transparent, Horizontal o Vertical Line, Upward o Downward Diagonal, Cross o Diagonal Cross).
Font
-FontBold-FontItalic-FontName-FontSize-FontStrikethrough-FontUnderline
ForeColor devuelve o establece el color de primer plano utilizado para mostrar texto y gráficos en un objeto.
Height Alto del fromulario

HelpContextID número de contexto asociado a un objeto para proporcionar Ayuda interactiva para la aplicación
Image/Icon Devuelve el icono que aparece al minimizar un formulario.
Left Distancia entre borde interno izqdo y el izquierdo de su contenedor.
LinkModeLinkTopic
permite que una aplicación de destino inicie una conversación con un formulario, se especifica en las propiedades LinkTopic y LinkItem
MaxButton Si tiene o no boton de Maximizar
MDIChild valor que indica si un formulario debe mostrarse como formulariosecundario MDI dentro de unformulario MDI.
MinButton Si tiene o no boton de Minimizar
MouseIcon Icono personalizado para el mouse
MousePointer Tipo de puntero mostrado sobre el formuario (u objeto)
Moveable Indica si se puede mover el formulario
Name Nombre del fromulario
NegotiateMenus Si incorpora los menús de un objeto en la barra de manús.
OLEDropMode Si actua como destino para operación de colocar de OLE
PalettePaletteMode
Imagen que contiene la paleta utilizada en el control(ruta) archivos .dib, .gif o .bmp para establecer la paleta.
Picture gráfico o imagen de fondo del form, formato .bmp, .jpg, .gif, cubre fondo visible, ojo con la imagen al maximizar!!!
RightToLeft:TrueFalse
booleano que indica el sentido de presentación del texto
ScaleHeightScaleLeftScaleModeScaleTopScaleWidth
número de unidades de medida horizontal y vertical del interior de un objeto al usarmétodos gráficos o al colocar controles.ScaleMode para definir una escala basada en una unidad de medida estándar, comotwips,puntos,píxeles, caracteres, pulgadas, milímetros o centímetros.
StartUpPosition:0 – Manual1 – CenterOwner2 – CenterScreen3 – Windows Default
especifica la posición de un objeto la primera vez que aparece
Top distancia entre el borde interno superior de un objeto y el borde superior de su contenedor
Visible Indica si está visible o no
WhatsThisButton determina si el botón ¿Qué es esto? debe aparecer en la barra de título
WhatsThisHelp determina si la Ayuda interactiva utiliza el menú emergente ¿Qué es esto?
Width Ancho del formulario
WindowState indica el estado visual de una ventana de formulario en tiempo de ejecución.(vbNormal,vbMinimized,vbMaximized)

Métodos de un formulario:
CircleDibuja un círculo, una elipse o un arco en un objeto.
objeto.Circle [Step] (x, y), radio, [color, inicio, fin, aspecto]
Cls Borra los gráficos y el texto generados en tiempo de ejecución de los controles Form o PictureBox.
HideOculta un objeto MDIForm o Form pero no lo descarga.
Objeto.Hide
LineDibuja líneas y rectángulos en un objeto. Sintaxis:
objeto.Line [Step] (x1, y1) [Step] - (x2, y2), [color], [B][F]
MoveMueve objetos MDIForm o Form, o controles. No acepta argumentos con nombre. Sintaxis
objeto.Move izquierda, superior, ancho, alto
OLEDragHace que un componente inicie una operación OLE de arrastrar y colocar. Sintaxis
objeto.OLEDrag
PaintPicture
Dibuja el contenido de un archivo gráfico (.bmp, .wmf, .emf, .cur, .ico o .dib) en un objeto Form, PictureBox o Printer. No acepta argumentos con nombre. Sintaxis:
objeto.PaintPicture imagen, x1, y1, ancho1, alto1, x2, y2, ancho2, alto2, códigoOp
Point
Devuelve, como un valor de tipo Integer Long, el color rojo-verde-azul (RGB) delpunto especificado de un objeto Form o un control PictureBox. No acepta argumentos con nombre.
objeto.Point(x, y)
PopupMenu
Presenta un menú emergente en un objeto MDIForm o Form en la posición actual del mouse o en las coordenadas especificadas. No acepta argumentos con nombre.Sintaxis
objeto.PopupMenu nombreMenú, indicadores, x, y, negrita
PrintFormEnvía a la impresora una imagenbit a bit de un objeto Form.
objeto.PrintForm
PsetEstablece un punto de un objeto a un color especificado.
objeto.PSet [Step] (x, y), [color]
RefreshFuerza el volver a dibujar un formulario o un control completo.
objeto.Refresh
Scale
ScaleX
ScaleY
Define el sistema de coordenadas para un control Form, PictureBox o Printer. No acepta argumentos con nombre.
objeto.Scale (x1, y1) - (x2, y2)
Convierten el valor del ancho o el alto de un control Form, PictureBox o Printer de una unidad de medida de la propiedad ScaleMode a otra. No aceptan argumentos con nombre. Sintaxis
objeto.ScaleX (ancho, escalaOrigen, escalaDestino)
objeto.ScaleY (alto, escalaOrigen, escalaDestino)

SetFocusMueve elenfoque al control o formulario especificado.Sintaxis
objeto.SetFocus
Show
Presenta un objeto MDIForm o Form. No acepta argumentos con nombre. Sintaxis
objeto.Show estilo, formularioPropietario
Si estilo es 0, el formulario es no modal; si estilo es 1, el formulario es modal.
TextHeight
Devuelve el alto de una cadena de texto tal y como se imprimiría con la fuente actual de un objeto Form, PictureBox o Printer. No acepta argumentos con nombre. Sintaxis
objeto.TextHeight(cadena)
TextWidth
Devuelve el ancho de una cadena de texto tal y como se imprimiría con la fuente actual de un objeto Form, PictureBox o Printer. No acepta argumentos con nombre. Sintaxis
objeto.TextWidth(cadena)
ValidateControls
Asegura que el contenido del último control del formulario es válido antes de la existencia del formulario. Sintaxis
objeto.ValidateControls
Hace que el puntero del mouse adopte la forma de ¿Qué es esto? y prepara la aplicación para mostrar Ayuda de tipo ¿Qué es esto? correspondiente al objeto seleccionado. Sntaxis
objeto.WhatsThisMode
WhatsThisMode
Hace que el puntero del mouse adopte la forma de ¿Qué es esto? y prepara la aplicación para mostrar Ayuda de tipo ¿Qué es esto? correspondiente al objeto seleccionado. Sintaxis
objeto.WhatsThisMode
ZOrder:0 – vbBringToFront1 - vbSendToBack
Coloca un objeto MDIForm o Form, o un control al principio o al final del orden z dentro de su nivel gráfico. No acepta argumentos con nombre. Sintaxis:
objeto.ZOrder posición
Eventos de un formulario:
Activate Ocurre cuando un objeto se convierte en la ventana activa. Private Sub objeto_Activate( )
Click, DblClickSe produce cuando un usuario presiona y suelta un botón del mouse una o dos veces sobre un objeto.
Private Sub Form_DblClick ( )
Deactivate ocurre cuando un objeto deja de ser la ventana activa.Private Sub objeto_Deactivate( )
DragDrop
DragOver
Drop:Ocurre cuando se completa una operación de arrastrar y colocar como resultado de arrastrar un control sobre un objeto y soltar el botón del mouse o usar el método Drag con su argumento acción establecido a 2 (Drop). Sintaxis
Private Sub Form_DragDrop(origen As Control, x As Single, y As Single)

Over:Ocurre cuando una operación de arrastrar y colocar está en curso
Private Sub Form_DragOver(origen As Control, x As Single, y As Single, estado As Integer)
GotFocus
cuando un objeto recibe el enfoque, ya sea mediante una acción del usuario, como tabular o hacer clic en el objeto, o cambiando el enfoque en el código mediante el método SetFocus.
Initializecuando una aplicación crea una instancia de un formulario
Private Sub objeto_Initialize( )
Keypress
KeyDown, KeyUp
Ocurren cuando el usuario presiona (KeyDown) o suelta (KeyUp) una tecla mientas un objeto tiene el enfoque. (Para interpretar los caracteres ANSI, utilice el evento KeyPress.)
Private Sub Form_KeyDown(códigoTecla As Integer, mayús As Integer)
LinkCloseLinkErrorLinkExecuteLinkOpen
Se utilizan para notificar al usuario sobre una conversación DDE. Que termina(Close), envío una cadena de comandos(Execute),se produce un error durante una conversación(Error) y cuando se está iniciando una conversación DDE(Open). También puede incluir información sobre solución de problemas, sobre el restablecimiento de la conexión o dónde acudir en busca de asistencia. Para mostrar mensajes breves, utilice la función MsgBox.
LoadCarga en memoria un formulario o un control.
Private Sub objeto_Load( )
MouseDown
MouseUpOcurren cuando el usuario presiona (MouseDown) o suelta (MouseUp) un botón del mouse.
MouseMove Ocurre cuando el usuario mueve el mouse.
OLECompleteDragOLEDragDropOLEDragOverOLEGiveFeedbackOLESetDataOLEStartDrag
OLE: Vinculación e incrustación de objetos. La tecnología que permite crear aplicaciones que contienen componentes de otras aplicaciones. Se produce cuando:
-CompleteDrag: un componente de origen se coloca en un componente de destino
-DragDrop:se arrastra,
-DragOver:se arrastra sobre otro,
-GiveFeedback: ocurre después de cada evento OLEDragOver.
-SetData:en un componente de origen cuando un componente de destino realiza el método GetData sobre el objeto DataObject del origen, pero antes de que se carguen los datos del formato especificado.
-StartDrag:se ejecuta el método OLEDrag de un componente o cuando inicia una operación OLE de arrastrar y colocar
QueryUnload Ocurre antes de que se cierre un formulario o una aplicación.
SetFocus Ocurre cuando un objeto pierde el enfoque, ya sea por una acción del usuario, como tabular o hacer clic en otro objeto, o bien mediante un cambio del enfoque en el código con el método SetFocus.

Private Sub Form_LostFocus( )
Private Sub objeto_LostFocus([índice As Integer])
Terminate
cuando todas las referencias a una instancia de un formulario se quitan de la memoria estableciendo a Nothing todas las variables que hacen referencia al objeto
Private Sub objeto_Terminate( )
Unload
Ocurre cuando un formulario está a punto de quitarse de la pantalla. Cuando ese formulario se vuelve a cargar, el contenido de todos sus controles se reinicializa. Este evento se desencadena porque un usuario cierra el formulario mediante el comando Cerrar del menú Control o una instrucción Unload.
Private Sub objeto_Unload(cancelar As Integer)
Si cancelar es 0, el formulario se quita. Establecer cancelar a cualquier valor distinto de cero impide que el formulario se quite.
Set cancel = 1
Pantalla de código:
1ª parte combo de objetos en el formulario. Frames, CommandButtons, Labels y TextBox
2ª parte combo de declaraciones y eventos asociados en este caso con el lblDatos. Esto se repite en cada uno de los elementos de cada uno de los componentes proyecto, cada uno con sus respectivas posibles declaraciones.
El primer evento que se dispara es el Load(). Ahí vamos a declarar todas las acciones que deseamos que se hagan al visualizarlo por 1ª vez.
Hay dos formas de alterar las propiedades de un objeto, en diseño en el cuadro de propiedades del mismo o en tiempo de ejecución por código en alguno de los eventos, procedimientos o funciones.

En la ventana del formulario si deseamos ajustar y colocar gráficamente los objetos cómodamente, podemos mejorar la cuadrícula en el menú herramientas>opciones>General y ahí cambiar las opciones de cuadrícula Ancho y Alto, poner un nº más bajo para reducir la separación entre puntos. Por ejemplo 30, el antes (120) y el después a la derecha (30)
Formulario MDI:
Multiple Document Interface. Un formulario MDI (interfaz de múltiples documentos) es una ventana que actúa como fondo de una aplicación y es el contenedor de formularios que tienen su propiedad MDIChild establecida a True.
Es un tipo especial de formulario que engloba a otros llamados formularios secundarios. El formulario MDI es el contenedor de cualquier formulario secundario MDI de la aplicación.
Un formulario MDI se crea con el comando Agregar formulario MDI (ver imagen) del menú Proyecto; un formulario secundario MDI se crea eligiendo Nuevo formulario en el menú Archivo y, a continuación, estableciendo la propiedad MDIChild a True.
Una aplicación sólo puede tener un objeto MDIForm, pero varios formulariossecundarios MDI. Si un formulario secundario MDI tiene menús, la barra de menús del formulario secundario reemplazará automáticamente a la barra de menús del objeto MDIForm cuando el formulario secundario MDI esté activo. Un formulario secundario MDI minimizado se mostrará como un icono en el MDIForm.
Un objeto MDIForm sólo puede contener controles Menu y PictureBox, y controles personalizados que tengan una propiedad Align. Para colocar otros controles en un MDIForm, puede dibujar un cuadro de imagen en el formulario y después dibujar otros controles dentro del cuadro de imagen. Puede usar el método Print para mostrar texto en un cuadro de imagen de un MDIForm, pero no puede usar este método para mostrar texto en el MDIForm propiamente dicho.
Un objeto MDIForm no puede ser modal.
Los formularios secundarios MDI se diseñan de forma independiente del MDIForm, pero siempre están contenidos en el MDIForm entiempo de ejecución.

Mi ejemplo anterior(proyecto 14-12-2012) es de la forma siguiente: a la izquierda con el fondo negro se ve el menú del MDIform y a la derecha el resultado en el árbol de proyectos de agregar dicho formulario. Luego agregamos el menú de archivo (ver Agregar menús) para seleccionar entre visualizar frmListaClientes y frmListaArtículos según pulsemos uno u otro. Para permitir que eso suceda he tenido que realizar varios cambios.
• Eliminar las instrucciones de Unload que ejecutaba cada vez que cargaba un formulario que hacía que se quitara de pantalla el otro.
• Establecer el valor de la propiedad de frmListaClientes y frmListaArtículos MDIChild a True, como ya comento mas arriba.
• Debemos cambiar la forma de mostrar ambos formularios. Disponemos de un botón en cada uno de ellos que nos muestra directamente el otro, pues debemos cambiar en el código de dicho botón la forma en que se muestran, pues en un MDI los formularios no pueden ser Modales. El código nuevo sería el de la derecha:
• Modificar la propiedad ZOrder a 0 en el método Activate de los dos formularios. Como en la imagen siguiente:
MsgBox
Es una ventana emergente que permite mostrar un mensaje o solicitar elección de opciones al usuario mediante determinados botones. La sintaxis es la siguiente
MsgBox (prompt[, buttons][, title][, helpfile, context])
prompt: Diálogo o mensaje que muestra la ventana. 1024 caracteres incluye Chr(13) y Chr(10). Cadena de texto.
buttons: opcional, especifica el nº y tipo de los botones en la ventana. Predeterminado = 0
title: representa el título del cuadro de diálogo. Cadena texto
helpfile y context: opcionales pero se deben dar en conjunto. Cadena que identifica el archivo de Ayuda y Expresión numérica que es igual al número de contexto de Ayuda asignado por el autor al tema de Ayuda anterior.

Icono pregunta o Question
el icono de alerta Icono de Información Icono Critical
En button se pueden incluír mediante el signo + los siguientes parámetros:
Ejemplos en mi código con su resultado por pantalla:
<--El código de arriba
El código de abajo-->
Cajas de texto TextBox:
Se guarda en ellas lo que tecleamos. Para editar sus propiedades se usan estos y otros parámetros:
Miembro Valor DescripciónOKOnly 0 Muestra sólo el botón Aceptar.OKCancel 1 Muestra los botones Aceptar y Cancelar.AbortRetryIgnore 2 Muestra los botones Anular, Reintentar y Omitir.YesNoCancel 3 Muestra los botones Sí, No y Cancelar.YesNo 4 Muestra los botones Sí y No.RetryCancel 5 Muestra los botones Reintentar y Cancelar.Critical 16 Muestra el icono Mensaje crítico.Question 32 Muestra el icono Consulta de advertencia.Exclamation 48 Muestra el icono Mensaje de advertencia.Information 64 Muestra el icono Mensaje de información.DefaultButton1 0 El primer botón es el predeterminado.DefaultButton2 256 El segundo botón es el predeterminado.DefaultButton3 512 El tercer botón es el predeterminado.
ApplicationModal 0
SystemModal 4096
MsgBoxSetForeground 65536MsgBoxRight 524288 Texto alineado a la derecha.
MsgBoxRtlReading 1048576
Aplicación modal: el usuario debe responder al cuadro de mensaje antes de continuar trabajando en la aplicación actual.Sistema modal: se suspenden todas las aplicaciones hasta que el usuario responda al cuadro de mensaje.Especifica la ventana del cuadro de mensaje como ventana de primer plano.
Especifica que el texto debe aparecer para ser leído de derecha a izquierda en los sistemas árabe y hebreo.

Alignment determina la alineación → objeto.Alignment [= número] . Para los TextBox, VbeftJustify(0), VbRightJustify (1), Center(2).
Appearence Establece el estilo de los controles de un objeto MDIForm o Form como plano o 3D.
BackColor, Forecolor color de fondo y color de primer plano para texto y gráficos.
BorderStyle 0 Ninguno, 1 Simple Fijo, 2 (Predeterminado)Ajustable, 3 diálogo fijo, 4 ventana fija, 5 ventana de tamaño ajustable.
DataField: devuelve nombre de un campo al que será enlazado un receptor de datos.
DataFormat: objeto de un tipo de formato. Obj.Dataformat = ObjetoDeFormato
DataSource enlaza con una base de datos. Objeto.DataSource [=dataSource]
DragIcon el icono de arrastrar. Objeto.DragIcon [=icono]
DragMode modo de arrastre: normal o automátic
Enabled si un objeto responde a eventos del usuario
Font fuente de la letra
Height, Width alto y ancho obj.height [= numero] // obj.width [= numero]
HelpCotextId ayuda interactiva
HideSelection determina si el texto aparece resaltado o no.
Index establece un nº que identifica al objeto
Left,Top
Left devuelve o establece la distancia entre el borde interno izquierdo de un objeto y el borde izquierdo de sucontenedor. Top: devuelve o establece la distancia entre el borde interno superior de un objeto y el borde superior de su contenedor.
LinkItem enlaza con un objeto
readOnly establece atributos de solo lectura
MaxLengthDevuelve o establece un valor que indica si existe un número máximo de caracteres que se pueden introducir en un control TextBox y, en caso afirmativo, especifica dicho valor máximo.
MouseIcon establece o devuelve el icono del ratón
MultiLine establece posibilidad de introducir saltos de linea dentro de la TextBox. Hasta 32kb
OLEDragModeDevuelve o establece un valor que indica si las operaciones OLE de arrastrar y colocar las controla el componente o el programador. Mover datos de un lugar a otro arrastrando.
PasswordChar Si aparecen los caracteres o no
RightToLeft sentido de presentacion del texto. True or false

ScrollBarsDevuelve o establece un valor que indica si un objeto tiene barras de desplazamiento horizontal o vertical. True (tiene Hor/Vert/ambas) False(no). 0 pred.(ninguna) 1 Hor. 2 Ver 3 H&V
TabIndex Orden de tabulación
Tabstop si el usuario puede usar tecla TAB para llevar el foco al objeto.
Text el contenido de la caja de texto
TooltipText información sobre herramientas.
Visible visible u oculto
WhatsThisHelpIDDevuelve o establece un número de contexto asociado a un objeto. Se utiliza para dotar a las aplicaciones de Ayuda interactiva con el menú emergente ¿Qué es esto? de la Ayuda de Windows 95.
ListView: Propiedades, métodos y eventosPropiedades nuevas no definidas o no comunes a los anteriores:
AllowColumnReorder Devuelve o establece un valor booleano que determina si el usuario puede volver a ordenar las columnas mediante el mouse (ratón).
Arrange
valor que determina cómo se organizan los iconos en la vista Iconos o Iconos pequeños de un control
ListView.lvwNone 0 (Predeterminado) Ninguno.
lvwAutoLeft 1 Izquierda.
LvwAutoTop 2 Superior
CausesValidation valor que determina si el evento Validate se producirá en un segundo control desde el que está cambiando el enfoque. Booleano
Checkboxes valor que determina si se muestran las casillas de verificación. Booleano
DragIcon Devuelve o establece el icono que se presenta como puntero en una operación de arrastrar y colocar.
DragMode valor que determina si se usa el modo de arrastre manual 0 o automático 1, en una operación de arrastrar y colocar.
Enabled Si puede responder a eventos generados por el usuario. Booleano
FlatScrollBar determina la apariencia de la barra de desplazamiento en el objeto. (Bool)
FullRowSelect Devuelve o establece un valor que especifica si está seleccionada toda la fila. Booleano
GridLines determina si se muestran líneas de cuadrícula en la vista Informe del control ListView. Booleano
HideColumnHeaders establece si los objetos ColumnHeader de un control ListView están ocultos en la vista Informe. Booleano

HideSelection determina si el texto seleccionado aparece resaltado cuando un control pierde el enfoque. Booleano
HotTracking determina si está activado el resalte sensible al puntero del ratón.(Bool)
HoverSelection determina si se seleccionará un objeto ListItem cuando el puntero del mouse se sitúe encima del mismo. (Bool)
Index número que identifica inequívocamente un objeto de una colección.
LabelEdit
determina si el usuario puede modificar las etiquetas de los objetos ListItem o Node de un control ListView o TreeView. Automatic 0, manual 1
objeto.LabelEdit [ = entero]
LabelWrap determina si se produce o no ajuste de línea en las etiquetas cuando un control ListView está en la vista Iconos.
MultiSelect valor que indica si un usuario puede seleccionar múltiples objetos o elementos. (Bool)
PictureAlignment
determina la alineación de la imagen de un objeto.
lvwTopLeft 0 Esquina superior izquierda.
lvwTopRight 1 Esquina superior derecha.
lvwBottomLeft 2 Esquina inferior izquierda.
lvwBottomRight 3 Esquina inferior derecha.
lvwCenter 4 Centrado.
lvwTile 5 (Predeterminado) En mosaico.
Sorted determina si los elementos de una colección están ordenados. Booleano
SortKey
determina cómo se ordenan los objetos ListItem de un control ListView.
0 Ordena mediante la propiedad Text del objeto Text.
> 1 Ordena mediante el subelemento cuyo índice de colección se especifica aquí.
SortOrder determina si los objetos ListItem de un control ListView se muestran en orden ascendente 0 o descendente 1.
TextBackground determina si el fondo del texto de un objeto ListItem es opaco 1 o transparente 0.
ToolTipText Devuelve o estableceInformación sobre herramientas.
objeto.ToolTipText [= cadena]
Métodos de ListView:
Drag Inicia, termina o cancela una operación de arrastre de cualquier control excepto los controles Line, Menu, Shape, Timer o CommonDialog. No acepta argumentos con nombre.
objeto.Drag acción
vbCancel 0 Cancela la operación de arrastre
vbBeginDrag 1 Inicia el arrastre del objeto

vbEndDrag 2 Termina el arrastre y coloca el objeto
FindItem
Busca y devuelve una referencia a un objeto ListItem de un control ListView.
objeto.FindItem (cadena, valor, índice, coincidencia)
valor:
lvwText 0 (Predeterminado) Hace coincidir la cadena con la propiedad Text de un objeto ListItem.
lvwSubitem 1 Hace coincidir la cadena con cualquier cadena de la propiedad SubItems de un objeto ListItem.
lvwTag 2 Hace coincidir la cadena con cualquier propiedad Tag
GetFirstVisible Devuelve una referencia al primer objeto visible en el área interna de un control.
Move Mueve. objeto.Move izquierda, superior, ancho, alto
OLEDrag Hace que un componente inicie una operación OLE de arrastrar y colocar.
Refresh Fuerza que se redibuje completamente un formulario o un control.
SetFocus Mueve elenfoque al control o formulario especificado. objeto.SetFocus
ShowWhatsThis menú emergente ¿Qué es esto?
StartLabelEdit Permite al usuario modificar una etiqueta.
ZOrder Coloca un objeto MDIForm o Form, o un control al principio o al final del orden z dentro de su nivel gráfico. No aceptaargumentos con nombre.
Eventos de ListView:
AfterLabelEdit
BeforeLabelEdit
Se produce cuando un usuario termina(after) o intenta(before) de modificar la etiqueta del objeto Node o ListItem seleccionado actualmente.
Private Sub objeto_AfterLabelEdit/objeto_BeforeLabelEdit
(cancelar As Integer, nuevaCadena As String)
ColumnClick cuando se hace clic en un objeto ColumnHeader de un control ListView. Sólo está disponible en la vista Informe.
ItemClick
Se produce cuando se hace clic en un objeto ListItem de un control ListView.
Private Sub objeto_ItemClick(ByVal elemento As ListItem)
Validate
Ocurre cuando el foco cambia a un (segundo) control que tiene su propiedad CausesValidation establecida a True.
Private Sub objeto_Validate(mantenerFoco As Boolean)
Agregar elementos en un menú:
El ejemplo de este tipo de Tarea es el pryecto “Editor”. El menú estará compuesto por 4 menús de cabecera, el primero llamado "Archivo", el segundo "Edición", el tercero utilidades (que no se

va a usar) y el último "Ayuda"(que tampoco se usará). A su vez cada menú tendrá los siguientes submenues:
1.Archivo: Este menú contendrá los submenús " Abrir ", " Guardar ", " Imprimir " y " Cerrar "
2.Edición: Contendrá los submenús " Cortar ", " Copiar ", " Pegar ", " Seleccionar todo "
El cuadro de diálogo del editor de menú de visual basic posee los siguientes campos para rellenar. Algunos son opcionales y otros son obligatorios, como la propiedad Caption y Name:
•Caption: en este campo debemos colocar la leyenda que mostrará el menú, es decir el
texto que mostrará el mismo. Si a una letra le anteponemos el símbolo &, indica que al
pulsar la combinación Alt+Tecla (siendo tecla la posterior a &) nos accede a dicho menú.
En nuestro caso, usamos las letras A, E, U e Y para cada uno de los cuatro
•Name: en este campo debemos introducir un nombre para cada menú. Este es
obligatorio y no puede estar duplicado ya que por medio de este nombre identificaremos
al menú en el código. Nosotros estableceremos “mnuArch” para Archivo, y “mnuE” para
Editar, cada uno de ellos con sus indices de orden, que representan el campo siguiente.

•Index: en este campo que es opcional podemos introducir un número para formar
vectores de menús o arreglos de menús, en este ejemplo no se usa, por ejemplo para
crear menús en forma dinámica en tiempo de ejecución
•Helpcontextid: este campo opcional podemos introducir un n° para el tópico de ayuda,
por si el usuario presiona la tecla F1 justo cuando está posicionado en el menú.
•Shortcut: Podemos ingresar una tecla de acceso rápido al menú para que se despliegue
el mismo automáticamente, como por ejemplo Ctrl + a, Ctrl + b, etc...
•Checked: este campo indica si el menú tendrá un tilde a la izquierda o no. Si está en
true lo muestra si está en False no. El campo es de tipo opcional.
•Enabled: propiedad booleana que determina si el menú está habilitado o no. Esta
propiedad es exactamente igual a la propiedad Enabled de cualquier control de visual
basic. El campo por defecto, mejor dicho la propiedad está en True
•Visible: propiedad opcional y de tipo booleana que determina si el menú estará visible o
no. Esta propiedad es ideal para crear los menús contextuales o PopUp (mas adelante hay
un ejemplo de como crear uno).
Pasos a seguir:
1.Una vez abierto el editor de menú, hay que ingresar los elementos que componen el
mismo.
Para crear el menú "Archivo" que es un menú de cabecera o de nivel superior, debemos
ingresar en la propiedad Caption la cadena “&Archivo”
Ahora le asignaremos un nombre en el campo Name.
Utilizaremos el prefijo mnu para luego poder distinguirlo fácilmente en el código. Entonces
ingresamos en este campo mnuArch, pero no le colocaremos el índice. Porque no va a
tener asociado ningún evento, solo desplegará el menú del cual es cabecera.
2.El segundo paso será ingresar los submenús que están por debajo del menú archivo.
Para ello presionamos el botón "siguiente" donde ingresaremos el menú "Abrir".
Como este es un submenú debemos indicarlo con el botón que tiene una flecha hacia la
Derecha.
Al presionarlo ahora el mismo se marca con una doble comilla (“”), para indicarnos que
este menú deriva o está contenido en el menú de cabecera "Archivo". Ahora pasamos a
ingresarle el nombre y la leyenda del menú. En la propiedad Caption ingresamos “Load” y
en el campo Name : mnuArch, sin olvidarse de colocar el Index con el primero de los
valores que vamos a asignar: el 0.
3.Ahora repetimos los pasos anteriores para
ingresar los submenús restantes del menú
Archivo como en la imagen que se puede ver aquí
a la izquierda.
4.Si habrás observado los clásicos menús de
las aplicaciones, los submenús se agrupan en
secciones. Por ejemplo en el menú archivo del

internet explorer, el submenú Salir está separado del resto por una línea. para lograr esto
se debe crear un submenú como cualquier otro justo arriba del menú que queremos que
aparezca la línea divisoria, y en la propiedad caption del mismo le colocamos el carácter
menos -
5.Ahora ingresaremos el código para que muestre la leyenda en el control Label cada vez
que presionemos un menú.
6.El menú se va incorporando al formulario en tiempo de diseño como cualquier otro
control de visual basic. Para ingresar el código necesario diremos que cada menú
responde a un evento llamado click y que se dispara cuando presionamos el menú con el
mouse o cuando le damos un enter, para ingresar el código en el menú "Abrir" le damos
un click en el mismo menú desde la ventana de diseño. Una vez abierta la ventana de
código aparecerá una rutina como la siguiente:
En este caso no incorporamos ningún código
pues el menú Utilidades de nuestro ejemplo no
llevará ninguna acción.
Ahora vamos a ver como sería el código de las acciones de dichos menús antes configurados.
Cerramos el editor, y vemos que ya nos aparecen los menús configurados en la ventana de
objetos. Vamos al menú Archivo y hacemos clic en uno de los submenús, y nos salta a la ventana
de código en el evento mnuArch_Click(), y ahí es donde a través del índice Index, mediante un
bucle switch decidiremos qué hacer en función de cual de los submenús serán pussados.
Opciones del menú Archivo:
Load: abrir un fichero o archivo de texto y cargarlo en el textBox(multiLine).
Declaramos dos variables de tipo cadena. Para Almacenar el nombre del fichero y el contenido leído de cada línea.
Para el Load le corresponde el Index 0.
Vamos a marcar los pasos básicos y los controles que vamos a usar y sus características.
Usaremos CommonDialog, TextBox (que ya se ha descrito anteriormente)

La ayuda:
Para usar la ayuda de VB tenemos que seleccionar la palabra en cuestión en el editor y pulsar F1 en el teclado. La ayuda se despliega mostrando el contenido correspondiente a dicha palabra.
Crear un informe simple utilizando DataReport
Paso 1 – Crear la base de datos
•Crear una tabla llamada Clientes en la base de datos “xestión”.
•Añadimos campos correspondientes a los datos de los clientes.
•Añadir algunos datos de clientes (insert)
Añadir el Datareport y Crear el reporte.Pasos:
Para poder ver el DataReport debemos en “agregar componentes”, click derecho sobre la barra componentes/componentes/diseñadores/marcamos data Report y data environment.
Se ha añadido una nueva carpeta llamada Diseñadores a nuestro proyecto.
Lo mejor es cambiarle el nombre por rptInformeConcepto, donde Concepto indicará a que se va a dedicar o qué mostrará el informe.
•Añadir un reporte desde el menú Proyecto, seleccionando la opción DataReport. Para
agregarlo basta con ir al menú (Proyecto/Agregar Data Report)
•En la propiedad del botón imprimir lo asociamos con el rptInformeConcepto en el click
del botón . Se explica más adelante.
•Hacemos clic con el botón derecho sobre el diseño y le desmarcamos forzar a la
cuadrícula, de este modo podremos poner las cosas sin estar obligados por las extrañas
dimensiones que te indican los cuadros del diseño.
•Seleccionar el Reporte y cambiarle el nombre a rptInforme(en el caso de muestra es el
único informe del proyecto). Desde el menú Explorador de proyecto se verá algo similar al
siguiente gráfico:

La vista del reporte está dividida por secciones:
•Encabezado del informe : aparece una vez al principio del informe (primera hoja/portada)
•Encabezado de la página ( campoCabecera ): aparece en la cabecera de cada página
(nombre de los campos)
•Detalle ( campoDetalles ) :Donde se visualizarán los datos de la tabla concreta de la base
de datos xestión en cada uno de los campos de la cabecera.
•El pie de página. Podemos incluir datos del informe, como fecha, número de página,
autor o sección del propietario. Aparecerá en todas las páginas del informe.
Al añadir un reporte al proyecto, en el Cuadro de controles de Visual Basic, ahora se añadió automáticamente una pestaña con controles para el DataReport .

En este ejemplo solo se usarán los RptLabel, RptTextBox RptLine. El primero para usarlo en la sección de Encabezados, y los textBox para mostrar los registros de la base de datos.
Ahora en este paso se agregará un control rptLabel en la sección de Encabezado de reporte ( El primero de todo ). Para ello dibujar un rptLabel en dicha sección, si se quiere cambiarle el color de la fuente, el tamaño etc.. eso es opcional y se puede hacer desde la ventana de propiedades de vb y también en tiempo de ejecución. Para cambiar el texto del rptLabel, utilizar la propiedad Caption
La vista quedará algo así:
Nota: Se coloca una línea con el control RptLine, para separar cada encabezado principal del resto.
Ahora se agregarán los RptLabel mas en la sección Encabezado de página. Estos label servirán para mostrar las columnas. En el DataField colocar el nombre de los campos de la base de datos que se había creado. En nuestro caso se incluyen:
ID, nombre, apellidos, dirección, población, CP y en otra línea el comentario.
Se puede establecer un color y estilo de fuente a gusto desde la ventana de propiedades
Ahora, se utilizará el control rptTextBox para la sección de " Detalle ". Los rptTextBox, que serán lógicamente los mismos y del mismo tamaño que los indicados en cabecera del informe.
Se deben establecer los tamaños del mismo con las propiedades:
•Height : la altura del rptLabel o del rptTextBox, todas iguales y ajustadas al texto que
incluye. Así se ahorra papel al imprimir el informe.
•Left : nos dice donde se ubica el elemento con respecto al margen izquierdo.
•Width : es la anchura que va a ocupar el elemento.
•Top : nos indica la ubicación del elemento con respecto al margen de la sección
correspondiente.En el formulario frmLista estarán enlazados mediante la propiedad DataField, a cada campo correspondiente de la tabla Clientes.
Añadir los rptTextBox como se ve en el gráfico:
Al añadirlos, el texto por defecto que visualiza es: " No enlazado " . Esto es por que todavía no se ha especificado ningún campo para ese textbox en la propiedad DataField de los mismos.
Cada elemento del campoDetalles se enlazará en el código del commandButton Imprimir en frmLista.
Quedará mas o menos de esta forma:

Código fuente en el formulario para visualizar el reporte
En este último paso se añadirá un commandButton en el formulario frmLista.
Un botón será para añadir un nuevo registro a la base de datos. Otro para eliminar un registro, y el otro para visualizar el informe.
•El Commandbutton para crear un nuevo registro renombrarlo a cmdNuevo(caption
Nuevo)
•El Command para eliminar un registro renombrarlo a cmdEliminar(caption Eliminar)
•El Command para visualizar el informe renombrarlo a cmdReporte(caption Imprimir)
Más adelante se añadirá un nuevo botón que alternará entre las distintas tablas de la base de datos, mediante la opción de hacer loads y unloads en método on_click() de dicho botón en cada uno de los frmListaConcepto. Vista del formulario:
Ahora añadir desde el menú del frmListaClientes (en este caso) en el click del botón imprimir cmdImprimir, el código siguiente para que al pulsar se cree el reporte correspondiente.
Vamos a mostrar un diseño y su resultado correspondiente.

Los MódulosMás cosas sobre VB6: los módulos son elementos solamente con código, sin representación gráfica, que engloban un conjunto de variables, instrucciones o funciones que se definen, se pueden acceder y se emplean desde y en todo el proyecto. Todas las variables declaradas en sus funciones se pierden fuera de ellas, para eso debemos declararlas fuera de ellas si es lo que necesitamos.
Hemos usado varios tipos de módulos. Al hacer clic derecho sobre nuestro proyecto en Agregar nos aparecen (ver imagen).
• Módulo de clase : Módulo que contiene la definición de una clase (sus definiciones de propiedad y método).
• Módulo de código : Módulo que contiene código público que se puede compartir entre todos los módulos de un proyecto. Los módulos de código se denominan módulos estándar en versiones posteriores de Visual Basic.
• Módulo de formulario : Archivo en un proyecto de Visual Basic con una extensión de nombre de archivo .frm que puede contener descripciones gráficas de un formulario; sus controles y sus valores de propiedad; declaraciones a nivel de formulario de constantes, variables y procedimientos externos; eventos y procedimientos generales.
• Módulo de objeto : Módulo que contiene un código específico a un objeto, por ejemplo, módulo de clase, módulo de formulario y módulo de documento. Los módulos objeto contienen el código detrás de sus objetos asociados. Las reglas para módulos objeto difieren de las de los módulos estándar.

Las clases difieren de los módulos estándar en la forma de almacenar los datos. Nunca hay más de una copia de los datos de un módulo estándar. Esto significa que cuando una parte del programa modifica una variable pública de un módulo estándar y otra parte del programa la lee después, obtendrá el mismo valor.
Por otra parte, los datos de un módulo de clase existen por separado para cada instancia de la clase, es decir, por cada objeto creado a partir de la clase.
Según el mismo razonamiento, los datos de un módulo estándar tienen el alcance del programa; es decir, existen durante toda la ejecución del programa, mientras que los datos de cada instancia de un módulo de clase sólo existen durante la duración del objeto; se crean cuando se crea el objeto y se destruyen cuando se destruye el objeto.
Por último, las variables declaradas Public en los módulos estándar son visibles desde cualquier parte del proyecto, mientras que sólo puede tener acceso a las variables Public de los módulos de clase si dispone de una variable de objeto que contenga una referencia a una instancia concreta de una clase.
Hemos usado los módulos de código (Módulos) para definir métodos en varios proyectos, por ejemplo para conectarnos a la base de datos, para leer un elemento o varios de una base de datos, pues son métodos que serían llamados varias veces y desde varios sitios. En el módulo están accesibles para todos los objetos del proyecto donde se ubica el módulo por lo que podemos decir que son reutilizables. A la hora de definirlos se tiene en cuenta ese detalle: van a ser usados varias veces, para ello se va a evitar programar particularizando para una tarea y se harán procedimientos genéricos.

Conexión de objetos ADODB.Conceptos:El objeto de conexión ADO se utiliza para crear una conexión abierta a un origen de datos. A través de esta conexión, se puede acceder y manipular una base de datos.
Si desea acceder a una base de datos varias veces, hay que establecer una conexión mediante el objeto Connection.También puede establecer una conexión con una base de datos pasando una cadena de conexión a través de un objeto Command o registros.Sin embargo, este tipo de conexión sólo es buena para una consulta específica, única.
Objeto Connection
Programa
Public Function AccederBD() As ADODB.ConnectionDim sCad As String On Error GoTo errorAbrindo sCad = "Driver={MySQL ODBC 5.2w Driver};" & _ "Server=" & mvarServidor & ";" & _ "Port=" & mvarPuerto & ";" & _ "Database=" & mvarBaseDatos & ";" & _ "UID=" & mvarUsuario & ";" & _ "Password=" & mvarPasswd & ";" Set mvarConector = New ADODB.Connection mvarConector.CommandTimeout = 30 mvarConector.CursorLocation = 1 mvarConector.ConnectionString = sCad mvarConector.Open Set AccederBD = mvarConector Exit FunctionerrorAbrindo: Set AccederBD = Nothing Err.ClearEnd Function
Propiedades:
Propiedad Descripción
Attributes Establece o devuelve los atributos de un objeto Connection
CommandTimeout Establece o devuelve el número de segundos de espera al intentar ejecutar un comando
ConnectionString Establece o devuelve los detalles utilizados para crear una conexión a una fuente de datos
ConnectionTimeout Establece o devuelve el número de segundos de espera para una conexión se abra
CursorLocation Establece o devuelve la ubicación del servicio cursor
DefaultDatabase Establece o devuelve el nombre de la base de datos predeterminada
IsolationLevel Establece o devuelve el nivel de aislamiento
Mode Establece o devuelve el permiso de acceso proveedor

Provider Establece o devuelve el nombre del proveedor
State Devuelve un valor que describe si la conexión está abierta o cerrada
Version Devuelve el número de versión de ADO
Métodos
Método Descripción
BeginTrans Inicia una nueva transacción
Cancel Cancela una ejecución
Close Cierra una conexión
CommitTrans Guarda los cambios y finaliza la transacción actual
Execute Ejecuta una consulta de texto, declaración, procedimiento o proveedor específico
Open Abre una conexión
OpenSchema Devuelve información de esquema del proveedor acerca del origen de datos
RollbackTrans Cancela cualquier cambio en la transacción actual y finaliza la transacción
Eventos
Nota: No se puede controlar eventos mediante VBScript o JScript (sólo Visual Basic, Visual C + + y Visual J + + lenguas pueden manejar eventos).
Evento Descripción
BeginTransComplete Se activa después de la operación BeginTrans
CommitTransComplete Se activa después de la operación CommitTrans
ConnectComplete Se activa después de una conexión comienza
Disconnect Se activa después de una relación termina
ExecuteComplete Se activa después de que un comando ha terminado de ejecutarse
InfoMessage Se activa cuando se produce una advertencia durante una operación de ConnectionEvent
RollbackTransComplete Se activa después de la operación RollbackTrans
WillConnect Se activa antes de que una conexión se inicia
WillExecute Se activa antes de que se ejecute un comando
Objeto Command El objeto Command de ADO se utiliza para ejecutar una consulta contra una base de datos única.La
consulta se puede realizar acciones como crear, agregar, recuperar, eliminar o actualizar registros.
Si la consulta se utiliza para recuperar los datos, los datos se devuelven como un objeto RecordSet. Esto
significa que los datos recuperados pueden ser manipulados por las propiedades, colecciones, métodos y
eventos del objeto Recordset.
La principal característica del objeto Command es la capacidad de utilizar las consultas y procedimientos
almacenados con parámetros.
Programa:
Public Function LeerMiBD(miTabla As String, Optional campoAleer As String, Optional valorCampoAleer As String) As ADODB.Recordset Dim cRex As ADODB.Recordset Dim cCmd As ADODB.Command Set cCmd = New ADODB.Command cCmd.ActiveConnection = mvarConector cCmd.CommandType = 1

If Trim(campoAleer) <> "" And Trim(valorCampoAleer) <> "" Then cCmd.CommandText = "select * from " & miTabla & _ " where " & campoAleer & " = " & valorCampoAleer Else cCmd.CommandText = "select * from " & miTabla End If Set cRex = New ADODB.Recordset cRex.Open cCmd, , adOpenDynamic, adLockOptimistic Set LeerMiBD = cRexEnd Function
Propiedades
Propiedad Descripción
ActiveConnection Establece o devuelve una definición para una conexión si la conexión está cerrada, o el objeto de conexión actual si la conexión está abierta
CommandText Establece o devuelve un comando de proveedor
CommandTimeout Establece o devuelve el número de segundos de espera al intentar ejecutar un comando
CommandType Establece o devuelve el tipo de un objeto Command
Name Establece o devuelve el nombre de un objeto Command
Prepared Establece o devuelve un valor booleano que, si se establece en True, indica que el comando debe guardar una versión preparada de la consulta antes de la primera ejecución
State Devuelve un valor que describe si el objeto Command es abierto, cerrado, la conexión, la ejecución o la recuperación de datos
Métodos
Método Descripción
Cancel Cancela la ejecución de un método
CreateParameter Crea un nuevo objeto Parameter
Execute Ejecuta la consulta SQL o procedimiento en la propiedad CommandText
Colecciones
Colección Descripción
Parameters Contiene todos los objetos de los parámetros de un objeto de comando
Properties Contiene todos los objetos de propiedad de un objeto de comando
Objeto RecordsetEl objeto ADO Recordset se utiliza para mantener un conjunto de registros de una tabla de base de datos.
Un objeto Recordset constará de registros y las columnas (campos).
En ADO, este objeto es el más importante y el más usado para manipular los datos de una base de datos.
Programa:
Dim cRex As ADODB.Recordset Dim inDex As String Set cRex = miA.LeerMiBD(tablaBD, "cliId", _frmListaClientes.lvClientes.SelectedItem.Text)
If cRex.EOF = False Then

' estas sentencias se ejecutan mientras no se llegue al final de los campos 'del registro RECORDSET leido' el puntero del registro cRex esta apuntando en este caso al primero de los 'registros en la BD' si deseasemos leer una nueva fila de la tabla, debemos hacer un 'cRex.MoveNext para apuntar al next frmClientes.TxtDatos(0) = cRex.Fields("cliId") frmClientes.TxtDatos(1) = cRex.Fields("cliComent") frmClientes.TxtDatos(2) = cRex.Fields("cliApe") frmClientes.TxtDatos(3) = cRex.Fields("cliNome") frmClientes.TxtDatos(4) = cRex.Fields("cliDir") frmClientes.TxtDatos(5) = cRex.Fields("cliPoblacion") frmClientes.TxtDatos(6) = cRex.Fields("cliCP")' con estas sentencias asignamos cada campo (fields(id)) DEL RECORDSET a la 'caja de texto correspondiente de nuestro formulario End If
Al abrir por primera vez un conjunto de registros, el puntero del registro actual apuntará al primer registro y las propiedades BOF y EOF son falsas. Si no hay registros, las propiedades BOF y EOF son True .
Objetos Recordset admite dos tipos de actualizaciones:
• Actualización inmediata - todos los cambios se escriben inmediatamente en la base de datos una vez que se llama al método Update.
•La actualización por lotes- el proveedor almacenará en caché múltiples cambios y luego enviarlos a la base de datos con el método UpdateBatch.
En ADO hay 4 diferentes tipos de cursores definidos:
•Dynamic cursor - Le permite ver las adiciones, cambios y eliminaciones por otros usuarios.
•Keyset cursor - Al igual que un cursor dinámico, excepto que usted no puede ver las adiciones por otros usuarios, e impide el acceso a los registros que otros usuarios han sido eliminados. Cambios en los datos de otros usuarios todavía será visible.
•Static cursor- Proporciona una copia estática de un conjunto de registros para que usted pueda utilizar para encontrar datos o generar informes. Las adiciones, cambios o supresiones de otros usuarios no será visible. Este es el único tipo de cursor permite cuando se abre un objeto Recordset de cliente.
•Forward-only cursor - Le permite desplazarse hacia delante sólo a través del Recordset. Las adiciones, cambios o supresiones de otros usuarios no será visible.
El tipo de cursor se puede establecer mediante la propiedad CursorType o por el parámetro CursorType en el método Open.
Nota: No todos los proveedores soportan todos los métodos y propiedades del objeto Recordset.
Propiedades
Propiedad Descripción
AbsolutePage Establece o devuelve un valor que especifica el número de página en el objeto Recordset
AbsolutePosition Establece o devuelve un valor que especifica la posición ordinal del registro actual en el objeto Recordset
ActiveCommand Devuelve el objeto Command asociado con el conjunto de registros
ActiveConnection Establece o devuelve una definición para una conexión si la conexión está cerrada, o el objeto de conexión actual si la conexión está abierta
BOF Devuelve true si la posición del registro actual es antes del primer registro, de lo contrario falso
Bookmark Establece o devuelve un marcador. El marcador guarda la posición del registro actual

CacheSize Establece o devuelve el número de registros que se pueden almacenar en caché
CursorLocation Establece o devuelve la ubicación del servicio cursor
CursorType Establece o devuelve el tipo de cursor de un objeto Recordset
DataMember Establece o devuelve el nombre del miembro de datos que se recupera del objeto al que hace referencia la propiedad DataSource
DataSource Especifica un objeto que contiene datos que se representa como un objeto Recordset
EditMode Devuelve el estado de edición del registro actual
EOF Devuelve true si la posición del registro actual es posterior al último registro, de lo contrario falso
Filter Establece o devuelve un filtro para los datos en un objeto Recordset
Index Establece o devuelve el nombre del índice actual de un objeto Recordset
Locktype Establece o devuelve un valor que especifica el tipo de bloqueo al editar un registro en un Recordset
MarshalOptions Establece o devuelve un valor que especifica qué registros deben ser devueltos al servidor
MaxRecords Establece o devuelve el número máximo de registros para devolver un objeto Recordset desde una consulta
PageCount Devuelve el número de páginas de datos en un objeto Recordset
PageSize Establece o devuelve el número máximo de registros permitidos en una sola página de un objeto Recordset
RecordCount Devuelve el número de registros en un objeto Recordset
Sort Establece o devuelve los nombres de campo en el conjunto de registros para ordenar
Source Establece un valor de cadena o una referencia de comandos de objeto, o devuelve un valor de tipo String que indica el origen de datos del objeto Recordset
Estate Devuelve un valor que describe si el objeto Recordset está abierto, cerrado, la conexión, la ejecución o la recuperación de datos
Estatus Devuelve el estado del registro actual con respecto a las actualizaciones por lotes u otras operaciones a granel
StayInSync Establece o devuelve si la referencia a los registros secundarios cambiará cuando los padres los cambios de posición de registro
Métodos
Método Descripción
AddNew Crea un nuevo registro
Cancel Cancela una ejecución
CancelBatch Cancela una actualización por lotes
CancelUpdate Cancela los cambios realizados en un registro de un objeto Recordset
Clone Crea un duplicado de un objeto Recordset existente
Close Cierra un conjunto de registros
CompareBookmarks Compara dos marcadores
Delete Borra un registro o un grupo de registros
Find Busca un registro en un conjunto de registros que cumple con los criterios especificados
GetRows Copias múltiples registros de un objeto Recordset en una matriz de dos dimensiones
GetString Devuelve un conjunto de registros como una cadena
Move Mueve el puntero de registro de un objeto Recordset
MoveFirst Mueve el puntero de registro al primer registro
MoveLast Mueve el puntero de registro al último registro
MoveNext Mueve el puntero de registro al registro siguiente
MovePrevious Mueve el puntero de registro al registro anterior

NextRecordset Borra el objeto Recordset actual y devuelve el objeto Recordset siguiente por recorrer a través de una serie de comandos.
Open Abre un elemento de base de datos que da acceso a los registros de una tabla, los resultados de una consulta, o para un conjunto de registros guardado
Requery Actualiza los datos en un conjunto de registros de volver a ejecutar la consulta que hizo el conjunto de registros originales
Resync Actualiza los datos del conjunto de registros actual de la base de datos original
Save Guarda un objeto Recordset en un archivo o un objeto Stream
Seek Busca el índice de un conjunto de registros para buscar un registro que coincida con los valores especificados
Supports Devuelve un valor booleano que define si un objeto Recordset admite un tipo específico de funcionalidad
Update Guarda todos los cambios realizados en un solo registro de un objeto Recordset
UpdateBatch Guarda todos los cambios en un conjunto de registros a la base de datos. Se usa cuando se trabaja en modo de actualización por lotes
Eventos
Nota: No se puede controlar eventos mediante VBScript o JScript (sólo Visual Basic, Visual C + + y Visual J + + lenguas pueden manejar eventos).
Evento Descripción
EndOfRecordset Se activa cuando se intenta mover a un registro después del último registro
FetchComplete Se activa después de que todos los registros de una operación asincrónica se han exagerado
FetchProgress Se activa periódicamente en una operación asincrónica, para indicar cuántos registros que se han exagerado
FieldChangeComplete Se activa después de que el valor de un cambio objeto Field
MoveComplete Se activa después de la posición actual en el conjunto de registros ha cambiado
RecordChangeComplete Se activa después de un registro ha cambiado
RecordsetChangeComplete Se activa después de que el conjunto de registros ha cambiado
WillChangeField Se activa antes de que el valor de un cambio objeto Field
WillChangeRecord Se activa ante un cambio de registro
WillChangeRecordset Se activa antes de un cambio de registros
WillMove Se activa antes de la posición actual en los cambios de registros
Colecciones
Colección Descripción
Fields Indica el número de objetos Field en el objeto Recordset
Properties Contiene todos los objetos propiedad del objeto Recordset
Propiedades de Fields del Recordset
Propiedad Descripción
Count Devuelve el número de elementos de la colección de campos.Empieza en cero.
Ejemplo:
countfields = cRex.Fields.Count

Item (named_item / número) Devuelve un elemento especificado en la colección de campos.
Ejemplo:
itemfields = cRex.Fields.Item (1)
o
itemfields = cRex.Fields.Item ("Nombre")
Propiedades de Properties del Recordset
Propiedad Descripción
Count Devuelve el número de elementos de la colección de campos.Empieza en cero.
Ejemplo:
countprop=cRex.Properties.Count
Item (named_item / número) Devuelve un elemento especificado en la colección de campos.
Ejemplo:
itemprop = cRex.Properties.Item(1)
o
itemprop=cRex.Properties.Item("Name")
Fuentes y enlaces de interés:http://www.recursosvisualbasic.com.ar (documentación y el formato del documento)
http://www.elguille.info/vb/cursos_vb/basico/indice.htm (documentación)
http://www.w3schools.com/ado (para objetos ADO)
http://www.aivosto.com/vbtips/regex.html (para expresiones regulares)
http://www.vb6.us/ (documentación sobre VB6)
http://msdn.microsoft.com/en-us/library/kehz1dz1%28v=vs.80%29.aspx (msdn en línea)
Todos los proyectos realizados en clase. (código y capturas)