En la figura puede ver que la propiedad DataSource puede desplegarse, mostrando en este caso el nombre del único control Data que tenemos en el formulario: Data1 Si tuviésemos mas controles Data, aparecerían los nombres de todos ellos. Se elige uno.
A continuación debemos señalarle qué campo queremos que nos presente. Podemos desplegar la lista, donde podemos ver los campos de la tabla elegida para la propiedad RecordSource del control Data. Elegimos uno y ejecutamos la aplicación.
Podemos observar que ya funciona. Si ponemos tantos TextBox como campos tiene la tabla elegida, podemos ver todo el contenido de la Base de datos moviéndonos a lo largo de ella mediante las flechas de cursor del control Data. Todo ello sin escribir una línea de código tal y como habíamos prometido.
Entremos ahora en un estudio un poco más avanzado del control Data.
El control Data proporciona acceso a datos almacenados en bases de datos usando uno de los tres tipos de objetos Recordset. El control Data le permite ir de registro en registro y presentar y manipular los datos de los en controles enlazados. Sin un control Data, los controles enlazados con datos de un formulario no pueden tener acceso automáticamente a los datos.
Los controles enlazados solamente pueden tener acceso a un control Data si este está en el mismo Formulario.
En el tema de Bases de Datos se emplean términos no conocidos aún. Se irán viendo a lo largo del curso, pero no queda otro remedio más que comenzar a utilizarlos. Se irán haciendo avances de estos términos, que serán explicados en profundidad en su momento.
Avance de términos.
Objeto Recordset (conjunto de registros)
Es un conjunto lógico de registros. Los tres tipos de objetos Recordset son Dynaset, (Permite la lectura y escritura de un registro) Snapshot (Realiza una lectura instantánea de los registros, no permitiendo modificarlos) y Table. (Representación en el código de una tabla base que puede utilizarse para agregar, modificar o eliminar registros de una sola tabla).
Controles enlazados
Son los controles que pueden presentar directamente datos de uno o varios campos de una Base de Datos. Los controles DBList, DBCombo y DBGrid tienen la posibilidad de presentar un conjunto de registros cuando se asocian con un control Data. Los controles CheckBox, TextBox, Label, Picture, Image, ListBox y ComboBox también son controles enlazados con datos y pueden asociarse a un único campo de un Recordset administrado por un control Data.
La mayoría de las operaciones de acceso a datos se pueden realizar usando el control Data sin escribir ningún código. Los controles enlazados con un control Data presentan de forma automática los datos de uno o más campos del registro actual o, en algunos casos, de un conjunto de registros a ambos lados del registro actual. El control Data realiza todas las operaciones sobre el registro actual.
Avance de términos
Registro Actual. Un registro es un conjunto completo de campos. Una base puede tener muchos registros, pero el " puntero" de la base de datos apunta a un único registro en cada momento. Ese registro al que apunta el puntero se llama registro actual.
Si el control Data recibe instrucciones de moverse a un registro diferente, todos los controles enlazados pasan automáticamente los cambios al control Data para ser guardados en la base de datos. El control Data se sitúa después en el registro requerido y pasa los datos del registro actual a los controles enlazados donde son presentados. Esto significa que se pueden modificar los datos de una base de datos simplemente cambiando los datos en los controles enlazados que lo permitan, y moviendo el puntero de la base de datos, es decir, cambiando el registro actual.
Una vez iniciada la aplicación, Visual Basic usa las propiedades del control Data para abrir la base de datos seleccionada, abrir un objeto Database y crear un objeto Recordset. Las propiedades Database y Recordset del control Data hacen referencia a los objetos Database y Recordset recién creados que pueden ser manipulados por el control Data. Siempre podremos conocer el Recordset usado por el control Data leyendo esa propiedad
VariableTipoRecordset =Data1.Recordset
Y si tenemos otro control Data en la aplicación (Puede estar en otro formulario) siempre podemos hacer que el recordset de este segundo control Data sea igual al del primero
Set Data2.Recordset = VariableTipoRecordset
(Obviamente el ámbito de VariableTipoRecordset debe permitir que se vea en los formularios donde está Data1 y Data2
Cuando se usa un control Data para crear un objeto Recordset o cuando se crea un objeto Recordset en el código y se asigna al control Data, el motor de base de datos Jet de Microsoft puebla automáticamente el objeto Recordset. Como resultado, los marcadores (y en los objetos Recordset de tipo snapshot, los datos del conjunto de registros) se guardan en la memoria local; el usuario no necesita manipular el control Data y no es necesario invocar el método MoveLast en el código para conocer el número total de registros. Los bloqueos de página usados para crear el Recordset se liberan más rápidamente, haciendo posible que otros objetos Recordset accedan a los mismos datos. Los objetos Recordset creados en el código pero que no se asignan a un control Data no son poblados automáticamente por el motor Jet. Se deben poblar desde el código.
El párrafo anterior, tomado casi literalmente de la información de Microsoft, exige al menos una explicación.
Cuando se crea un Recordset mediante un control Data, se leen inmediatamente todos los registros que forman parte de ese Recordset (Recuerde que un Recordset es un conjunto de registros). De esta forma, en una base que estuviera compartida por varios usuarios a través de una Red de Area Local (RAL) un usuario leería todos los datos en el mismo momento de la creación del Recordset por el control Data, llevaría esos datos a su memoria RAM y no volvería a estorbar en la base de datos (cuando un usuario de una RAL lee un dato en una BD, bloquea esta BD mientras dura su lectura y no pueden acceder a ella otros usuarios) Si el Recordset se crea por código, se lee solamente un registro (la base se bloquea en el momento de la lectura e inmediatamente se libera), y cuando se le pide otra operación (p.e. que avance un registro) vuelve a bloquear la BD, lee ese registro y la desbloquea. En principio el leer el Recordset de una vez parece que tiene ventajas en aquellas instalaciones que tienen una base de datos compartida. Todo ello a un precio. Ocupar más memoria RAM en cada uno de los PCs de los usuarios. Esta limitación hace en algún caso que no sea posible utilizar un control Data por falta de memoria RAM en los puestos de usuario.
El control Data puede manipularse con el mouse, moviéndose de registro en registro o al principio o al final del Recordset. El control Data no permite que el usuario se pase de los límites del Recordset usando el mouse. No se puede mover el enfoque al control Data.
MSFLEXGRID
Es una herramienta que posee visual Basic el cual ofrece una función indispensable en el ingreso de datos y la capacidad que tiene y solo es un objeto.
En el siguiente ejemplo puedo mostrarles la forma de editar un msflexgrid en visual Basic el cual lo experimentado en el laboratorio que es de mucha importancia.-
Este ejemplo que tenía lo coloqué en un Módulo de clase para poder reutilizarlo en forma un poco más óptima si se desea utilizar varios FlexGrid.
El mismo sirve para Editar un Flex simulándolo con un control textbox que se sitúa en la celda del control.
En el siguiente cuadro nos muestra la forma de del cuadro en el formulario.
Para usar el módulo de clase, primero hay que crear una instancia de la clase, por ejemplo: Set oEditFlex = New Class1 Luego tiene una sola función llamada Iniciar que tiene 2 parámetros, el control FlexGrid y el textBox que se usará asociado al Flex para que se posicione en la celda correspondiente, por ejemplo para Iniciar sería el siguiente código Call oEditFlex.Iniciar (UnControlFlex, UnControlText) Este simple ejemplo pasa o copia el contenido de un Array o Matriz de datos a un control FlexGrid. Antes de pasar los datos, en el ejemplo, se utiliza un array de 2 Dimensiones que previamente se carga con algunos valores en un For-next. Luego de cargarse los valores en la matriz, se llama a la sub Array_a_FlexGrid y se le envía como parámetro el Array y el control Ms FlexGid Luego dentro de la sub obtiene los valores máximos y mínimos de las dimensiones para poder, mediante un bucle For-Next llenar el Flex con el método TextMatrix del control
Controles
Agegar un control FlexGid en el Formulario un Command1 26. 27. Private Sub Command1_Click() 28. ' le pasa el Msflexgrid como argumento 29. Call Pasar_a_Matriz(MSFlexGrid1) 30. End Sub 31. 32. Private Sub Form_Load() 33. 34. With MSFlexGrid1 35. .FixedCols = 0 36. ' Tres encabezados 37. .FormatString = "Col 1|Col 2|Col 3" 38. ' ancho de las Cols 39. .ColWidth(0) = 2000 40. .ColWidth(1) = 2000 41. .ColWidth(2) = 2000 42. 43. Dim i As Integer 44. Dim item As String 45. ' llena una cuadrícula o matriz de 3 x 12 46. For i = 1 To 12 47. item = "Item: " & "Fila: " & i & " " 48. .AddItem item & "Col:1" & vbTab & _ 49. item & "Col:2" & vbTab & _ 50. item & "Col:3", i 51. Next 52. 53. End With 54. 55. Command1.Caption = "pasar grilla a la matriz" 56. End Sub COMO CAMBIAR EL COLOR DE LAS COLUMNAS. Este ejemplo utiliza la propiedad CellBackColor para cambiar de color las celdas del FlexGrid. Primero se recorre en un bucle las columnas. Dentro de ese bucle hay otro For-next que recorre las filas y le va estableciendo el color por columna: Para especificar los colores, cambiar los valores de constante Color1 y Color2 Código fuente en un formulario con un MsFlexgrid y un control CommandButton Texto planoCopiar código fuenteImprimir 1. 'Colores para las celdas del MsFlex 2. Const Color1 As Long = &HC0FFFF 3. Const Color2 As Long = &H80FFFF 4. 5. Private Sub Command1_Click() 6. 7. Dim Color As Long 8. Color = Color1 9. 10. With MSFlexGrid1 11. .FixedCols = 0 12. 13. 'Recorre las columnas 14. For columna = 0 To .Cols – 1 15. .Col = columna 16. 17. ' Intercambia el color para cada columna 18. If Color = Color1 Then 19. Color = Color2 20. Else 21. Color = Color1 22. End If 23. 24. 'Recorre las filas del FlexGRid y le aplica el color 25. For i = 1 To .Rows – 1 26. .Row = i 27. .CellBackColor = Color 28. Next 29. Next 30. 31. End With 32. 33. End Sub 34. 35. Private Sub Form_Load() 36. Me.Caption = " Ejemplo de CellBackColor " 37. Command1.Caption = " Cambiar color de celda " 38. End Sub ________________________________________
Propiedad CellBackColor – Ejemplo 2 – Alternar filas
Este ejemplo es idéntico al anterior, pero cambia el color de las celdas intercalando las filas:
Nota: En este, en comparación al ejemplo anterior, antes de cambiar el color al presionar el Command, se establece la propiedad Redraw del FlexGrid en False para agilizar el proceso.
En una grilla que tiene pocos datos posiblemente no se note, pero si tiene muchos datos cargados, el proceso se lentifica por que el control cada ves que cambia el color de una celda, debe repintar el control, de este modo poniendo en False al comienzo y luego en True al finalizar el bucle, el proceso es mucho mas rápido.
Ejemplo para imprimir la selección del Flex
Este otro método no utiliza la propiedad Clip, lo que hace es, al seleccionar un rango de celdas, copia dicha selección como una imagen al ClipBoard. Luego el gráfico lo imprime. Lo bueno de este método es que se puede imprimir de una manera simple, los datos tal cual se ven en la grilla, con el estilo de fuente, color etc.
Ejemplo
En cada fila que aparece de color verde esto significa que son explicaciones que hace por cada fila de código que contiene cada objeto esto hace que el educando pueda entender para que sirve cada código y que función hace.
Autor:
Eduardo Chile Rac
Guatemala
2008
Página anterior | Volver al principio del trabajo | Página siguiente |