martes, 3 de julio de 2007

Control ListView

Junto con el control TreeView el control ListView debe su popularidad al Explorador de windows. En la actualidad muchas aplicaciones desarrolladas para Windows utilizan este par de controles lado a lado y por lo tanto se les denomina aplicaciones similiares al Explorador de Windows.


Este Control Cuenta con 4 modos de Visualizacion o Presentacion (como lo quieres entender)y son Icon,SmallIcon,List y Report, para ver el aspecto que presenta cada modo , puedes probar las distintas opciones con el mismo explorador de Windows en todas sus vistas.

Otras de las cualidades de este control es que nos permite mostrar iconos en columnas y celdas de rejillas, tambien es compatible con "hot tracking", permite la seleccion de filas completas y la reordenacion de las columnas y sus elementos pueden tener atributos como Bold y Color Independientes, tambien puede mostrar un mapa de bits como fondo, lineas de rejilla y casillas de verificacion al lado de cada elemento.

Propiedades Importantes
View: define el aspecto del control.
- Valores Posibles (
Icon,SmallIcon,List,Report ).
Arrange: le permitira decidir la alineacion de los Iconos.
- Valores Posibles (
1-lvwAutoLeft,2-lvwAutoTop,0-lvwNone).
LabelEdit: Determina si el usuario puede editar el texo asociado con un elemento del control

sábado, 12 de mayo de 2007

Enlazar MSHFlexgrid a ADO

En esta ocasion mostrare una aplicacion sencilla que permite enlazar una base de datos SQL Server (Northwind) con el control MshFlexgrid.

Private Sub Form_Load()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cad As String
cad = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;Data Source=FAMILIA"
cn.ConnectionString = cad
cn.Open
rs.Open "select * from Products", cn, adOpenKeyset, adLockOptimistic
Set MSHFlexGrid1.DataSource = rs
rs.Close
Set rs = Nothing
End Sub

como vemos el codigo es lo habitual que hacemos cuando nos enlazamos a ADO, hasta aca este pequeño Post un saludo. bye que buena cancion la mejor!!!!!!!!

viernes, 11 de mayo de 2007

Devolver Valores desde el DataGrid

Cuando usamos el control datagrid con una base de datos remota, como SQLServer, se puede alterar la estructura de la tabla. Por ejemplo, se puede agregar un campo a la tabla. En ese caso, se puede invocar al método Rebind para volver a crear la cuadricula con la nueva estructura. se observa que si hemos alterado la distribucion de las columnas de la cuadricula en tiempo de diseño, el control DataGrid intentará volver a crear la distribución actual, incluida cualquier forma vacia, no obstante , podemos obligar a que la cuadricula restablezca todas las columnas si invoca el método ClearFields.

Una vez que estamos conectados a la base de datos , podemos usar el evento del datagrid RowcolChange para mostrar el registro completo.

Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Debug.Print DataGrid1.Text; DataGrid1.Row; DataGrid1.Col
End Sub

este codigo nos devuelve en primer lugar el campo en el cual hemos hecho click ademas del numero de columna y su respectivo numero de fila.

Los Métodos CellText y CellValue son útiles cuando se ha dado formato a una columna mediante la propiedad NumberFormat, esta propiedad cambia el formato de cualquier columna que contenga un número, sin cambiar el formato de los datos. Por ejemplo , dada una cuadricula con el nombre ProductId que contiene numeros enteros, el código que aparece abajo hará que datagrid1 muestre los valores en el formato "P-000"

DataGrid1.Columns("ProductID").NumberFormat = "P-000"

si queremos devolver el valor real de la columna usamos el metodo CellValue:

Debug.Print DataGrid1.Columns("ProductId").CellValue(DataGrid1.Bookmark)

bueno hasta aca llegamos , ya me dare tiempo para seguir viendo más comportamientos de este control

sábado, 28 de abril de 2007

fhgfhgfhgfhgfhgfhgfhgfhgfh

sábado, 21 de abril de 2007

sábado, 10 de marzo de 2007

Validar email en VB

Para el ejemplo incluir la librería Microsoft VbScript Regular Expressions desde el menú referencias de visual basic

La propiedad en donde se indica la expresión regular es la propiedad Pattern, y el método que comprueba ( devolviendo True o False ) es el método Test del objeto RegExp

Colocar un CommandButton para abrir un InputBox que pide una dirección para comprobar

Private Function Comprobar_Mail(Direccion As String) As Boolean

On Error GoTo ErrFunction

Dim oReg As RegExp

' Crea un Nuevo objeto RegExp
Set oReg = New RegExp

' Expresión regular
oReg.Pattern = "^[\w-\.]+@\w+\.\w+$"

' Comprueba y Retorna TRue o false
Comprobar_Mail = oReg.Test(Direccion)

Set oReg = Nothing

Exit Function

'Error
ErrFunction:

MsgBox Err.Description, vbCritical

If Not oReg Is Nothing Then
Set oReg = Nothing
End If

End Function

Private Sub Command1_Click()
Dim ret As Boolean
Dim Direccion As String

' Abre el inputBox para entrar la dirección
Direccion = InputBox(" Ingresar la direccion de correo " & _
" para verificar si es válida ")

If Direccion = vbNullString Then Exit Sub

' ejecuta la función
ret = Comprobar_Mail(Direccion)

' Resultado
If ret Then
MsgBox " Dirección válida ", vbInformation ' Ok
Else
MsgBox " No es válida ", vbCritical ' El mail no es correcto
End If

End Sub

Private Sub Form_Load()
Command1.Caption = " Comprobar Dirección de Mail "
End Sub

Enviado por: Luis Ramirez

jueves, 8 de marzo de 2007

Llenar Datagrid

El siguiente ejemplo muestra la forma de llenar los datos de una base de datos en este caso Access a un Datagrid una tabla llamada usuarios con 5 campos .


el código correspondiente es el siguiente:

Private Sub Form_Load()
On Error GoTo aviso
If cn.State = 1 Then cn.Close
conectarse

cmd.ActiveConnection = cn
cmd.CommandType = adCmdText
cmd.CommandText = "select * from usuarios"
'rs.Open "select * from usuarios", cn, adOpenKeyset, adLockOptimistic
Set rs = cmd.Execute
rs.Close
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockReadOnly
rs.Open
'Set rs = cmd.Execute
Set DataGrid1.DataSource = rs
total = rs.RecordCount
Label1.Caption = "Total " & total & " Usuarios "
Call formato
Exit Sub

Enviado por : Luis Ramirez

Arrays de Control

Visual Basic cuenta con el concepto de array de controles, en elque varios controles comparten el mismo conjunto de procedimientos de suceso, incluso aunque cada uno de los elementos individuales en el array pueda tener asignados diferentes valores para sus propiedades. Sólo podrá crear un array de control en tiempo de diseño y, como mínimo, al menos un control debe pertenecer al array. Podrá crear un array de controles utilizando cualquiera de los siguientes métodos:
  1. Crear un control y, posteriormente, asihnar un valor numérico (no negativo) a su propiedad Index; de esta forma habrá creado un array de control con un único elemento.
  2. Crear dos controles de la misma clase y asignarles el mismo valor a su propiedad Name. Visual Basic muestra un cuadro de diálogo avisándole que ya existeun control con el mismo nombre y le preguntara sidesea crear un array de controles.
  3. Seleccionar un control del formulario, pulsar Crtl + C para copiarlo en el portapapales y, posteriormente, pulsar Ctrl + V para pegar una nueva isntancia del control con la misma propiedad Name que el objeto inicial. Visual Basic muestra el mensaje de aviso mencionando en el punto anterior.
Los array de controles son una de las caracteristicas más interesantesdel entorno Visual Basic y añade una gran flexibilidad a sus programas:

  • Los controles que pertenecen al mismo array comparten el mismo conjunto de procedimientos de suceso; de esta forma podrá reducir drasticamente la cantidad de código que tendra que escribir en respuesta a una acción del usuario.
  • Podrá añadir dinamicamente nuevos elementos al array de controles en tiempo de ejecución; en otras palabras, podrá crear nuevos controles que no existan en tiempo de diseño.
  • Los elementos de los array de controles consumen pocos recursos en comparación con los controles normales y producen archivos ejecutables de menor tamaño. Además , los formularios de Visual Basic pueden almacenar hasta 256 nombres de controles distintos, pero un array de controles cuenta como uno solo de estos nombres. En otras palabras , los arrays de controles le permiten superar con facilidad esa limitacion.
Como Compartir Procedimientos de Suceso

Los Procedimientos de suceso relacionados con los ementos de un array de control son facilmente reconocibles porque cuenatn con un parámetro Index adicional, que precede a todos los demás parámetros. Este parámetro adicional recibe el indice del elemento que ha provocado el suceso, como puede ver el siguiente ejemplo:

Private Sub Text1_keyPress(Index As Integer, Keyascii As Integer)
Msgbox " Se ha pulsado una tecla sobre el control Text1 ( " & Index &" )"
End Sub

El hecho de que varios controles puedan compratir el mismo conjunto de procedimientos de suceso suele ser, con frecuencia, un buen motivo para crear un array de controles. Por Ejemplo, suponga que desea definir como amarillo el color de fondo de cada uno de los controles TextBox cuando reciban el foco de entrada y restaurar su color de fondo como blanco cuando el usuario pulse en otro campo:

Private Sub Text1_GotFocus(Index As Integer)
Text1(Index).BackColor = vbYellow
End Sub

Private Sub Text1_LostFocus(Index As Integer)
Text1(Index).BackColor = vbWhite
End Sub

Los Array de controles son especialmente útiles congrupos de controles OPtionButton por que podrá recordar cuál esel elemento del grupo que se ha activado sin más que añadir una linea de código a su suceso click compartido. Esta forma de actuar le permitirá ahorrarse unas cuantas lineas de código cuando el programa necesite determinar qué boton es el que se encuentra activo.






miércoles, 7 de marzo de 2007

Control ListBox

Una vez que hayamos depositado un control ListBox en un formulario podremos asignar algunas propiedades.
  • Propiedad Sorted , como true para crear controles ListBox que se ordenan automaticamente siguiendo un orden alfabético.
  • Propiedad Columns , se utiliza para para crear un tipo diferente de cuadro de lista con varias columnas y un barra de desplazamiento horizontal.
  • Propiedad IntegralHeight se modifica en contadas ocasiones, pero merece algún comentario por que indirectamente aparecerá en su camino durante la programacion. De manera predeterminada Visual basic ajusta automaticamente la altura de los controles ListBox para que puedan mostrar filas completas; ningun elemento se muestra sólo parcialmente. La altura asignada exactamente el control depende de varios factores, incluyendo los atrinutos defuente . este comportamiento suele ser correcto y normalmente no tendrá que preocuparse de este tema. pero si desea modificar el tamaño del control para alinearlo con otros controles contenidos en el formulario o con el borde del formulario, esta caracteristica puede impedir que realice este tipo de ajuste. En este caso, deberá asignar el valor de false a la propiedad IntegralHeight en la ventana de propiedades.
  • Método AddItem , permite llenar los controles Listbox en tiempo de ejecución.
Private Sub Form_Load()
List1.AddItem "Primero"
List1.AddItem "Segundo"
List1.AddItem "Tercero"
End Sub

En el mundo de las aplicaciones reales rara véz se cargaran los datos asi, con frecuencia sus datos estaran almacenados en un array o en una base de datos, tendra que barrer el origen de sus datos con un bucle for..Next.

Private Sub Form_Load()
' misdatos es un array de cadenas
For i = LBound(misdatos) To UBound(misdatos)
List1.AddItem misdatos(i)
End Sub

Si deseamos cargar muchos elementos en un listbox tambien podemos usar la funcion Choose

For i = 1 To 5
List1.AddItem Choose(i, "Lima", "Arequipa", "Tumbes", "Cajamarca", "Tacna")
Next

O tambien podemos usar las funciones de visual basic

For i=1 to 12
list1.AddItem MonthName(i)
Next

For i=1 to 7
list1.AddItem WeekDayName(i)
Next

Si desea cargar docenas o cientos de elementos, una mejor forma de actuar es almacenarlos en un archivo de texto y hacer que su programa lea el archivo cuando se cargue el formulario. De esta forma, más tarde podrá modificar el contenido de sus controles ListBox sin tener que tocar el codigo fuente:

Private Sub Form_Load()
Dim elemento As String
On Error GoTo aviso
Open "Nombres.dat" For Input As #1
Do Until EOF(1)
Line Input #1, elemento
List1.AddItem elemento
Loop
Close #1
Exit Sub
aviso:
MsgBox "No fue posible cargar los datos al cuadro de lista"
End Sub


ADO, Conexion a Sql Server

Para desarrollar verdaderas aplicaciones con acceso a Bases de Datos visual basic dispone de los Objetos ADO pudiendo utilizar las siguientes herramientas:
  1. El Control ADO.
  2. Los Objetos ADO.
  3. El DataEnvironment.
Esta entrada abarcara la segunda herramienta Objetos ADO.

lo primero que debemos hacer es activar la referencia a la libreria Microsoft Activex Data Object 2.8 o similar desde el menu Proyecto/Referencias.... y activar la correspondiente casilla.

De esta manera, cuando se cree la instancia a un objeto encontraremos el prefijo ADODB el cual nos permitira utilizar los objetos Ado. acontinuación veremos los objetos ADO.

El Objeto Connection

se utiliza para conectarnos a la base de datos. su propiedad principal es ConnectionString que siginifica cadena de conexión y sirve para indicar la forma de conexión a la base de datos. La cadena de conexión para una autenticacion en SQL Server esta formada básicamente por los siguientes parámetros que van separados por un punto y coma:
  • Provider , Se utiliza para indicar el nombre del proveedor de los Datos.
  • DataSource , Se utiliza para indicar el nombre del servidor SQL donde se encuentra la base de datos a Conectarse.
  • Initial Catalog , Se utiliza para indicar el nombre de las bases de datos a la cual nos queremos conectar.
  • User ID , Se utiliza para indicar el nombre del usuario que se conecta a la base de datos.
  • Password , Se utiliza para indicar la clave del usuario que esta conectándose a la base de datos.
La siguiente cadena de conexión utiliza el proveedor nativo de SQL server para conectarse a la base de Datos:

"Provider=SQLOLEDB.1;Initial Catalog=Empresa;Data Source=FAMILIA;User Id=sa;Password=esparta"

La siguiente cadena de conexión utiliza la autenticación de Windows

"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Empresa;Data Source=FAMILIA".

Método Open

Este Método permite abrir o activar la conexion indicada en la propiedad ConnectionString del objeto Connection.

Dim Cn As New ADODB.Connection
Dim Cadena As String
Cadena = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Empresa;Data Source=FAMILIA"
Cn.ConnectionString = Cadena
Cn.Open

Método Close

Este método permite cerrar la conexión indicada en la propiedad ConnectionString del objeto Connection.

Cn.Close
set Cn= Nothing

para finalizar esta entrada te presento una sencilla conexión a sql server con el método de autenticación de Windows .



el código es el siguiente:

Private Sub CmdIngresar_Click()
On Error GoTo aviso
Dim cn As New ADODB.Connection
Dim cadena As String
cadena = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Empresa;Data Source=FAMILIA"
cn.ConnectionString = cadena
cn.Open
MsgBox "Conexion conforme", vbExclamation + vbOKOnly
Exit Sub
aviso:
MsgBox Err.Description

End Sub


Enviado Por : Luis Ramirez
Lima, Perú

Control CheckBox

Los controles CheckBox son útiles cuando quiera ofrecer a sus usuarios una opcion dual (del tipo si-no, verdadero o falso). cada vez que pulse sobre este control, conmutará entre los estados activado y desactivado. También podrá desabilitar este control cuando el estado del checkbox no esté disponible, pero tenga que administrar su estado mediante código.

Una vez introduicdo un control CheckBox en un formulario todo lo que tendra que hacer, normalmente es definir su porpiedad Caption asignándole el titulo adecuado. En ocasiones, también podrá emplazar la pequeña casilla a la derecha de su titulo, algo que podrá hacer asignado la opcion 1-Right justify (alienado a la derecha) a su propiedad alignament, pero en la mayoria de las ocasiones , la opción pord efecto es adecuada. Si desea mostrar el control ene stado activado( con la marca deverificacion en la casilla), deberá asignar el valor 1-Checked a su propiedad value en la ventana de propiedades y definira un estado desabilitado mediante la opcion 2-Grayed.

El unico suceso importante para los controles Checkbox es el suceso Click que se pondra en marcha cuando el usuario o el código modifiquen ele stado del control. En la mayoria no tendrá que escribir código para manejar este suceso. Por el contrario,tan sólo tendrá que consultar la propiedad Value del control cuando el código necesite procesar las opciones del usuario. Si tendrá que escribir código en el suceso click del control CheckBox cuando afecte al estado de otros controles.

Enviado por: Luis Ramirez
Lima, Perú

Control CommandButton

Utilizar los controles CommandButton es una operación trivial. En la mayoria de los casos, tan sólo tendrá que dibujar el control en la superficie del formulario, definir su propiedad Caption asignandole el Titulo adecuado(preceda la letra adecuada con el caracter & para definirla como tecla de acceso directo) y habrá terminado, al menos en lo que respecta a la interfazde usuario. para que el botón funcione tendrá que escribir
codigo en su procedimiento de suceso Click, como sigue :

Private Sub Command1_Click()
'guardar datos , luego descarga este formulario
Call guardanelo
Unload Me
End Sub

Podrás utilizar otras dos propiedades durante la fase de diseño para modificar el comportamiento de un control CommandButton. Podrá definir su propiedad Default como true si se trata del botoón de iopcion predeterminado para este tipo de control (True si esta Pulsado, false en caso contrario). Value es tambien la propiedad predeterminada para este tipo de control. En la mayoria de los casos, no tendrá que consultar esta propiedad por que si se encuentra dentro de un suceso click del bootn está claro que será porque el boton se encuentra activado.

Enviado por: Luis Ramirez
Lima Perú

Control TextBox

Los Controles TextBox ofrecen a los usuarios una forma natural para introducir un valor en el programa, por lo que es muy utilizado en nuestras aplicaciones. este control cuenta con numerosas propiedades y eventos por lo que lo convierte en uno de los controles intrinsecos más complejos en cuanto a su programación, por lo que veremos las propiedades y eventos más comunes.

Propiedades

  • Propiedad Multiline , permite definir si el control sera de varias lineas valor predeterminado (false).
  • Propiedad Alignament, permite alinear texto tanto a la derecha, izquierda o al centro los valores correspondientes son( left align,right align y center) .
  • Propiedad Locked permite bloquear para que el usuario no modifique el contenido, asigandole a la propiedad el valor de (True).
  • Propiedad PasswordChar permite al usuario convertir el campo en campo oculto para las contraseñas.
Eventos

  • KeyDown.- En este evento podemos hacer modificaciones al contenido de nuestro control TextBox , en el código que sigue a continuación tenemos un TetxBox que acepta entradas numericas y con las teclas de desplazamiento arriba y abajo aumentamos y disminuimos el contenido del TextBox.
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyUp
Text1.Text = CDbl(Text1.Text) + 1
Case vbKeyDown
Text1.Text = CDbl(Text1.Text) - 1
End Select
End Sub
  • Keypress.- En este evento podemos verificar el contenido ingresado a nuestro control, en el siguiente ejemplo vemos una rutina que nos permite que el usuario solo ingrese numeros a nuestro control.
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case Is < keyascii =" 0">

  • Validate.- Permite validar un campo y nos obliga a cumplir la regla de validación por lo que el foco regresara al control hasta que se valide correctamente el control.
Private Sub Text1_Validate(Cancel As Boolean)
If Text1.Text = "" Then
MsgBox "Por favor ingrese algo ", vbExclamation
Cancel = True
End If
End Sub

vemos como al querer cambiar el foco al txtnombre nos sale el mensaje y nos regresara al txtID, esto se repetra hasta que no se cumplan las reglas de Validación.

A continuación el siguiente código solo permite el ingreso de numeros pero que estan comprendidos entre un determinado rango de 1 a 1000.

Private Sub Text1_Validate(Cancel As Boolean)
If Not IsNumeric(Text1.Text) Then
Cancel = True
ElseIf CDbl(Text1.Text) <> 1000 Then
Cancel = True
End If
If Cancel Then
MsgBox "Por favor, escriba un numero perteneciente al rango 1-1000 ", vbExclamation
End If
End Sub


Campos Auto-Tabulados

A los Usuarios no les gusta perder el tiempo con el teclado por lo que tu trabajo como programador es facilitar su trabajo y, por ello , debera esforzarte por suavizar su trabjo tanto como sea posible. una forma de aplicar este concepto es proporcionarle campos auto-tabulados que son campos que avanzan automaticamente siguiendo el orden de tabulación.


Private Sub Text1_Change()
If Len(Text1.Text) = Text1.MaxLength Then SendKeys "{tab}"
End Sub

Bueno hasta aca llego el tema de los controles Texbox.
Enviado por: Luis Ramirez
Lima , Perú