APUNTES

DE

VISUAL BASIC

 

 

 

 

 

 

Autor: Alvaro Canteiro Martínez.

Email: acm@cryogen.com

http://www.cryogen.com/acm

 

 

 

 

 

 

PROLOGO

Esta es una guía de Visual Basic, no contiene todo lo que es Visual Basic, pero desde luego que está bastante bien como punto de partida para el que quiera tener una guía rápida acerca de algunos aspectos de Visual Basic.

Tengo intención de ir ampliando esta guía cuando tenga algo de tiempo y según vaya aprendiendo mas aspectos de dicho lenguaje, así que por el momento y como no tengo tiempo para mas, pues habrá que conformarse con lo que hay.

En el mismo paquete que esta guía también vienen una recopilación de prácticas hechas en Visual Basic, espero que os sirvan de algo.

Este documento y las prácticas en Visual Basic que vienen con él son completamente freeware, no obstante si alguien quiere hacerme un donativo, para que me tome unas cervezas a su salud, que me envié un email y ya veremos como solucionar ese problema. J

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

INTRODUCCION

 

 

Variable -> Lugar donde se almacenan temporalmente los datos.

Nombre - empezar por letra

- 255 caracteres

- ningún punto (.)

Definición de variables

DIM nombre_variable AS tipo_dato

 

 

TIPOS DE DATOS

 

- Entero (Integer) – 32768 a 32767 %(no decimales)

- Largo (Long) - 147483368 a 214 millones & (no decimales)

- Simple (Single) – 1.4E-45 a 34E68 !(si decimales)

- Doble (Double) – 4.9E-324 a 1.7E308 #(si decimales)

- Carácter (string) – 0 a 65.500

- Otras

- Bytes (Byte) - enteros de 0 a 255

- Boolean (true,false) - verdadero o falso

- Fecha (Date) Fecha

- Variant – tipo especial

 

 

BUCLES Y CONDICIONALES

 

CASE

Select case n

Case 0

.......................

Case 1

.......................

End Select

Si se desea utilizar una estructura de case else se hace asi:

 

 

Select case n

Case 1

...........

Case 2

...........

Case else

...........

End select

 

FOR

For n = 1 to 20 step 1

...........

Next n

 

WHILE

While n < 0

..................

wend

 

LOOP

Do

...............

loop until n = 1

 

Do while n = 1

...............

loop

 

IF

If <condicion> then

.............

else

.............

end if

 

 

 

 

 

 

CONTROLADORES

CONTROLADOR RELOJ

Todo lo que se ponga dentro se ejecuta cada tiempo indicado dentro de propiedades.interval.

 

CONTROLADOR COMBO(lista desplegable)

Con la propiedad .additem se van añadiendo elementos al combo.

 

CONTROLADOR LISTBOX(lista de elementos)

Este controlador dispone de las siguientes propiedades:

.listcount – cuenta el número de elementos

.additem – añade elemento

.listindex – devuelve el numero de elemento seleccionado

.list(n) – devuelve elemento n

.removeitem(n) – borra el elemento n

.selected(n) – true o false dependiendo de si el elemento esta seleccionado o no lo esta

 

CONTROLADOR FRAME(agrupamientos)

Sirve para agrupar varios controles de tipo botón y que se activen las posibilidades correspondientes a poder seleccionar uno de los agrupados dentro de este controlador.

 

CONTROLADOR OPTIONBUTTON

Ejecuta lo que tenga dentro al seleccionar, se agrupa con controlador frame para seleccionar uno de varios.

 

MULTIPLES BOTONES CON INDEX

Todos apuntan a una misma función la cual tiene un parámetro "index" que indica el botón pulsado. Se crea un botón, se le pone el index a cero (propiedad) y desde el se crean otros con ctrl-c y ctrl-v (copiar y pegar).

 

 

 

 

MSGBOX

Si se introduce la siguiente instrucción:

Msgbox("...............................")

Saldrá un cuadro conteniendo el texto entre comillas y pedirá pinchar en enter para continuar.

 

CONTROLADOR HSCROLL/VSCROLL

Son los deslizadores verticales y horizontales.

.max – número de elementos máximo

.min – número de elementos mínimo

.value – valor actual

Tambien se puede poner desde la ventana de propiedades.

 

COLORES

Se utiliza la función RGB(r,g,b) siendo los parámetros que se le dan la intensidad de color rojo, verde y azul. El valor que devuelve se le pasa a label.backcolor = rgb(.......).

 

CONTROLADOR DE UNIDAD/SUBDIRECTORIOS/FICHEROS

Una vez creados los controladores drive, dir y filelist se utilizan así:

Dentro de drive – dir1.path = drive1.drive

Dentro de dir - dir1.path = dir1.path

Dentro de filelist – (nada si es solo visualizar)

Para ver un fichero de imagen seleccionado en filelist:

.pattern = "*.bmp" muestra en filelist solo los bmp’s

se crea control image

image.stretch – centra imagen (=true)

image.picture=load.picture (fichero)

 

MOVER ELEMENTOS DESDE FILELIST A LISTBOX

En filelist se indica el icono inicial y se activa el drag

.dragicon = loadpicture("fichero.ico")

.drag

En listbox

Procedimiento dragdrop – list.additem file1.path & file1

Procedimiento dragover – file1.dragicon = loadpicture("fichero2.ico") (indica icono final)

En dragover el parámetro state indica el estado de movimiento.

 

 

 

CONTROLADOR CADENAS

Right(cadena,1) - devuelve primer carácter por la derecha

Left(cadena,1) – devuelve primer carácter por la izquierda

Len(cadena) – tamaño cadena

 

PROCEDIMIENTO KEYPRESS DENTRO DE CONTROLADOR TEXT

Se ejecuta cuando se pulsa una tecla.

Keyascii – valor ascii de la tecla pulsada

 

CREA/BORRA BOTONES

Load command1(3) – el 3 es el valor index (si lo tiene)

Command1(3).visible = true

.left = n

. up = n

. caption = "............"

unload command1(3) – borra el boton creado

 

FUNCION DE ORDENACION DE TABLAS

Dada una tabla de nombre tabla y cuyo maximo elemento esta en posición 10.

Dim tabla(10)

Function ordena_por_intercambio

Dim mayorpos,m as single

Dim final as single

Final = 10

Mayorpos = 1

Do

For m = 1 to final step 1

If val(tabla(m)) > val(tabla(mayorpos)) then mayorpos = m

Next m

Aux = val(tabla(final(final))

Tabla(final) = val(tabla(mayorpos))

Tabla(mayorpos) = val(aux)

Final = final – 1

Mayorpos = 1

Loop until final = 1

End function

PASO POR VALOR O POR REFERENCIA

Private function ----------------- (byval operando) <- valor

----------------- (operando) <- referencia

 

CONTROLADOR GRID(hoja calculo)

.rows -> número filas

.cols -> número columnas

Escribir un dato en la posicion x,y:

.col = x

.row = y

.text = ...........

 

CONTROL DATA(manejo de bases de datos)

Propiedad DataBaseName – nombre de base de datos

Comment – tipo de base de datos

RecordSource – establece la tabla de la base de datos a utilizar

El control permite ir avanzando o retrocediendo registros. En un textbox elejido se busca DataField y DataSource dentro de Dato (ordenado por categorías).

En DataSource se pone el control data referenciado y en DataField se seleciona el campo que se mostrara según se mueve el control data.

Propiedad EOFAction (que hacer ante un finde fichero)

MoveLast – va al último registro que hay datos

EOF – se llega a un registro en blanco

AddNew – se genera un registro en blanco para añadir datos

El data control es feo y en vez de eso se van a utilizar otros botones que hagan la misma función.

Data1.Recordset.Movefirst – va al primer registro

.Movenext – va al siguiente registro

.Moveprevious – va al registro anterior

.MoveLast – va al último registro

.EOF – comprueba si es fin de fichero

.BOF – comprueba si es principio de fichero

.AddNew – añade un registro y lo edita

.Delete – borra el registro actual

Esto da errores cuando se esta al principio y se hace un moveprevious, esto se arregla comprobando con .BOF antes de retroceder (se pregunta si es principio de fichero y si no se mueve).

En el caso de final de fichero seria igual pero con .EOF.

Data1.Recordset.Field(n) -> numero campo

.("Nombre") -> nombre del campo

text1.enabled = true -> permite editar controles text

= false -> no permite editar controles text

 

DBCOMBO(control combo para bases de datos enlazadas)

.boundcolumn -> campo enlazado en data2

lo que se guarda internamente

.datafield -> campo de enlace desde data1

.datasource -> data1 (origen)

.listfield -> campo a mostrar en data2

lo que se muestra

.rowsource -> data2 (origen del campo a mostrar)

.boundtext -> leer lo que guarda

 

CONTROL TREEVIEW,IMAGELIST (en microsoft windows common controls 5.0)

Primero se introducen las imágenes.

En propiedades>personalizado>subcarpeta imágenes insertar imagen y seleccionar buscando las que se quieren poner.

Despues se introduce un control treeview y en la propiedad personalizado se pone imagelist el nombre edl controlador imagelist creado anteriormente. Con esto se prepara el control treeview para que en cada nodo muestre las imágenes de imagelist.

Ahora hay que crear el nodo padre, lo primero que hay que definir son los nodos.

DIM <nombre> as node

Primer paso

Definir el nodo padre

DIM NP as node

Segundo paso

Nodo padre

Set NP = T1.Nodes.Add(,,,"Agenda",1,2)

Tercer paso

Nodos hijo

For i = 1 to 10 step 1

Set n2 = t1.nodes.add(np,4,i,4,3)

Next i

T1.Nodes.Clear – borrar nodos del treeview

 

FORMATO DE FECHA

Se crea una variable de tipo fecha:

Fecha = 1/1/99

Luego se utiliza el comando format para extraer datos de la fecha

Format(fecha,"d mmmm")

Para ver las posibilidades de el comando format se busca en la ayuda de Visual Basic.

Para calcular el numero de dias transcurridos entre dos fechas:

Dias = #31/12/1999# ... #1/1/1998#

 

CONTROL PROGRESSBAR

Se utiliza a modo de barra que va incrementandose para poder ver lo que queda para acabar un proceso.

.Min -> Valor mínimo

.Max -> Valor máximo

.Value -> Valor actual

Se hace en base a utilizar la instrucción:

Progressbar.value = progressbar.value + 1

 

CONTROL LISTVIEW

Crear un columnheader

DIM col as columnheader

Se añade columnas (tantas como se necesite)

Set col = lv1.columnheaders.add(,,"texto",ancho)

En "texto" se pone lo que se quiere que aparezca en la columna

En "ancho" se pone el valor del ancho de la columna

Para ver la visualiazacion hay 4 formas:

.view = 0

.view = 1

.view = 2

.view = 3 (este es el que se utiliza para ver en columnas)

Para añadir la información:

Crear variable DIM lista as ListItem

Set lista = lv1.listitems.add(,,"texto",1,2)

A continuación se pone lo que se quiere que aparezca en cada dato de la lista

Lista.subitems(1) = ...........

Lista.subitems(2) = ............

En personalizado de listview se pone el control imagelist para que se seleccionen las imágenes para poner en el control listview.

EDITAR REGISTRO

Data1.Recordset.Edit

Data1.Recordset("codigo") = 1

Data1.Recordset("nombre") = "Pepe"

Data1.recordset("Edad") = 23

Data1.Recordset.Update – (Graba registro)

Data1.recordset.cancelupdate – (Cancela grabación)

AÑADIR REGISTRO

Data1.Recordset.Addnew

( Editar registro )

Data1.Recordset.Update

BORRAR REGISTRO

Data1.recordset.Delete

BUSQUEDAS DE REGISTROS

Se declara la variable para el criterio

Dim criterio as string

Se declara un criterio de busqueda

Criterio = "codigo=" & str(tex1.text) (text1.text es la cadena que se busca)

C2 = "nombre=""" & str(text2.text) & """ nombre = "pepe" (suponiendo que text2.text=pepe)

Se busca el primer registro que cumpla el criterio

Data1.recordset.findfirst criterio

Se ejecutan las instrucciones pertinentes dependiendo de si ha sido encontrado o nó.

If data1.recordset.nomatch then

No encontrado

Else

Encontrado

End If

En este caso "no encontrado" implica las intrucciones que se ejecutarán en caso de que no se encuentre el registro que cumpla el criterio de búsqueda, y "encontrado" implica las instrucciones que se ejecutarán en caso de que se encuentre un registro que cumpla el criterio de búsqueda.

CRITERIO DE BUSQUEDA DE FECHAS

Para buscar en bases Access hay que buscar como mes/dia/año

1 –> fecha = format (fecha, "m d yy")

2 -> criterio = "fecha=" & "#" & fecha & "#" & ""

En Visual Basic antes de buscar fechas hay que aplicarles el formato correcto, por eso antes de establecer el criterio, se adapta la fecha al formato que se necesita.

Criterio equivale al criterio de búsqueda.

ACTUALIZAR EL SUBITEM DE UN LISTVIEW

Listview1.selecteditem.subitems(1) = ..............

Esta instrucción sirve para modificar el contenido de un listview.

FORMULARIOS MODALES

Hay dos tipos de apertura de formularios:

Form2.show 1 -> apertura de formulario modal.

Form2.show -> apertura de formulario no modal.

Para descargar un formulario se emplea la instrucción "unload form2".

SQL DESDE VISUAL BASIC

Se hace una consulta desde Access, luego se accede a ella desde Visual Basic como si fuera una tabla más.

Luego desde Visual Basic se pone:

Data1.recordsource = "select ..................."

Todo lo que haya entre comillas (empezando por select) equivale a la instrucción sql.

UNIR UN CONTROL DBGRID A UNA TABLA

En la propiedad datasource se pone el control data deseado y entonces saldrá una tabla con su contenido.

 

 

 

 

 

 

 

 

 

 

 

FICHEROS

 

ALEATORIO

Hay que definir unos registros de tamaño fijo.

Type reg amigo

Nombre as char*80;

Dir as char*80;

End type

  1. apertura
  2. open path/fichero for random as numarchivo len = tamaño_registro

  3. lectura/escritura
  4. get -> get numarchivo numeroregistro variable

    put -> put numarchivo numeroregistro variable

  5. Close numfichero

 

BINARIO

Tamaño de registro variable

Open path/fichero for binary as intarchivo

Lectura/escritura

Get nuamrchivo [posicion] variables

Put nuamrchivo [posicion] variables

 

VB – TRATAMIENTO DE ARCHIVOS

Abrir – open

Leer – get

Escribir – put

Cerrar – close

Se puede acceder como secuencias, aleatorio o binario.

 

SECUENCIAL

Leer

Open path/fichero for input/output/append as numarchivo

Antes de abrirlo hay que obtener numero de archivo

Numarchivo = freefile numarchivo = entero

 

Escribir y leer

Write (con formato)

Print (sin formato)

Write #numarchivo <variable> (input)

Print #numarchivo <variable> (input)

Leer – input

Leer sin formato – line input

Cerrar

Close (listanumarchivo)

 

CREACION DE UNA BASE DE DATOS

Pasos:

1 – Definir variables para cada componente de la base de datos

Dim bd as database

Dim tbd as table

Dim idx as index

Dim rel as relation

Dim fld as field

Añadir componente DAO

2 – Crear la BD – Create Database

Set bd = create database(".....")