Citas
“Que lo urgente no nos impida dejar de hacer lo importante.“
“Que lo urgente no nos impida dejar de hacer lo importante.“
Con el evento ApplyFilter podemos resaltar el elemento del formulario por el que se está realizando un filtro. Con el ejemplo siguiente se cambia el borde del control a rojo, estableciendo el borde de los demás objetos con el color por defecto.
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer) Dim ctl As Access.Control, strActiveControl As String If ApplyType = 1 Then 'Apply filter strActiveControl = Screen.ActiveControl.Name End If If Len(strActiveControl) > 0 Then Me(strActiveControl).BorderColor = vbRed End If For Each ctl In Me.Controls Select Case TypeName(ctl) Case "TextBox", "Combobox" If ctl.Name <> strActiveControl Then ctl.BorderColor = 8421504 End If End Select Next ctl End Sub
Si tienes un control ListView en un formulario y una de las columnas, y por la que ordenas los datos, contiene fechas con el formato dd/mm/yyyy observarás que el mencionado control se ordena de la forma siguiente:
01/01/2005
01/02/2006
01/03/2007
02/01/2005
03/01/2006
04/01/2007
Como se observa las fechas no están realmente ordenadas. Para solucionar este pequeño problema se puede recurrir a lo siguiente. Se añade una nueva columna al control ListView con un ancho igual a cero – para que los usuarios no puedan verla. Los datos a incluir en esta columna -oculta- serán las fechas pero con el formato yyyymmdd, o CLng(varMyDate), o de cualquier otra forma que permita ordenar las fechas correctamente. Y finalmente en el evento ListView_ColumnClick se añade:
If (ColumnHeader.Index – 1) = 3 Then
ListView.SortKey=8
Else
ListView.SortKey=(ColumnHeader.Index – 1)
End If
ListView.Sorted = True
En el código de ejemplo se supone que la columna oculta que hemos añadido es la 8, y contiene 3 columnas visibles.
Mediante la siguiente función se puede averiguar si la tabla que se indica existe en la base de datos.
Public Function TableExists(sName As String) As Boolean
On Error GoTo Err_TableExists
TableExists = DCount(”*”, “MsysObjects”, “[Name]= ‘” & sName & “‘”)
Exit_TableExists:
Exit Function
Err_TableExists:
MsgBox Err.Description
Resume Exit_TableExists
End Function
La llamada a la función se realizará de la siguiente forma:
Sub Prueba()
MsgBox TableExists(”Unatabla”)
End Sub
Esta es una funcion que utilizando ADO nos devuelve, si la tiene, la descripcion que escribimos en vista diseño de un campo de una tabla. Las hay mas fáciles, pero esta funciona admisiblimente rápido y además nos pone de manifiesto el acceso a tablas campos y propiedades de éstos, a través de ADO. Necesita referencias a Microsoft ADO 2.5 y a Microsoft ADO Ext. 2.5 for DDL and Security:
Function DameDescripcion(MiTabla As String, Micampo As String) As String
Dim cnx As ADODB.Connection, Cat As ADOX.Catalog
Dim Tbl As ADOX.Table, Fld As ADOX.Column, Prop As ADOX.Property
‘Se realiza la conexión a la base de datos local
Set cnx = CurrentProject.Connection
‘Se establece referencia al catálogo de objetos
Set Cat = New ADOX.Catalog
Cat.ActiveConnection = cnx
‘Referencia a la tabla
Set Tbl = Cat.Tables(MiTabla)
‘Y referencia a la columna
Set Fld = Tbl.Columns(Micampo)
‘Y recorro la colección de propiedades
For Each Prop In Fld.Properties
‘ propiedad Description
If UCase(Prop.Name) = “Description” Then
DameDescripcion = Prop.Value
Exit For
End If
Next
Set Prop = Nothing
Set Fld = Nothing
Set Tbl = Nothing
Set Cat = Nothing
cnx.Close
Set cnx = Nothing
End Function
[/language]
Se puede usar OpenArgs como parte del método Docmd.OpenForm para pasar el nombre del formulario. Por ejemplo, desde SomeFormA, si se tiene un boton que abre el formulario SomeFormB usando el comando
Docmd.OpenForm \”SomeFormB\”, , , , , ,me.Name
Entonces en SomeFormB se puede insertar un boton que cuando se haga click sobre él pueda cerrar el formulario anterior sin usar un código complejo.
Docmd.Close acForm, me.OpenArgs
Pasándo el nombre del formulario a la siguiente función esta te devuelve True (-1) si dicho formulario está abierto o False (0) si no lo está.
Function fIsLoaded(ByVal strFormName As String) As Integer
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> 0 Then
If Forms(strFormName).CurrentView <> 0 Then
fIsLoaded = True
End If
End If
End Function
Declaramos la funcion Encriptar y mediante una operación convertirá una cadena de texto a numérico para realizar una segunda operación que se encargará de encriptar la cadena.
Public Function Encriptar(texto As String) As String
Dim i As Integer
For i = 1 To Len(texto)
Encriptar = Encriptar & Chr(Asc(Mid(texto, i, 1)) – 18)
Next i
End Function
Ahora declaramos la función DesEncriptar y hacemos exactamente lo mismo pero a la inversa.
Public Function DesEncriptar(texto As String) As String
Dim i As Integer
For i = 1 To Len(texto)
DesEncriptar = DesEncriptar & Chr(Asc(Mid(texto, i, 1)) + 18)
Next i
End Function
Todo el mundo ha escuchado, al menos de lejos, hablar de Thomas Alva Edison. Son célebres sus inventos, o adaptaciones exitosas de inventos de terceros, como la bombilla o el fonógrafo, pero pocos se acuerdan del resto de patentes que logró, literalmente cientos en muy variados campos. Uno de sus rasgos de personalidad más atractivos estaba en que se trataba de un cabezota de cuidado, cuando algo se le metía en la cabeza, no había forma de corregir sus intenciones por otro lado. Así, no es muy conocida su pasión por la industria del hierro y el acero, que le provocó muchos dolores de cabeza a causa de ruinosos negocios, o su ilusión por extraer caucho natural de plantas nativas de los Estados Unidos para no depender del mercado exterior. Dedicó a ello muchos años, pero no logró grandes resultados. Otra de sus pasiones era el cemento. ¿Se podría construir una casa con un precio tan bajo como para que todo el mundo pudiera comprarla?