Mostrando las entradas con la etiqueta Programación. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Programación. Mostrar todas las entradas

18 enero 2009

Ceiling y Floor en VB6

Dado que Visual Basic 6 carece de estos dos métodos que en algún momento pueden resultar útiles. Una forma de obtener el resultado deseado es con dos pequeñas funciones.

'Devuelve el entero más pequeño no menor que X.
'Ejemplo: Ceiling(1.23) = 2, Ceiling(-1.23) = -1
Private Function Ceiling(ByVal X As Double) As Long
Ceiling = -Int(X * (-1))
End Function

'Devuelve el entero más grande no mayor que X.
'Ejemplo: Floor(1.23) = 1, Floor(-1.23) = -2
Private Function Floor(ByVal X As Double) As Long
Floor = (-Int(X) * (-1))
End Function

25 noviembre 2008

Comprobar si una tabla existe en Microsoft Access / VBA

Casi siempre, para un mismo problema, hay más de una solución.

Cuando trabajamos con VBA en Microsoft Access y deseamos comprobar la existencia de una tabla, son tres las formas de tratar el problema que vienen de inmediato a nuestra mente.

1) Recorrer los elementos de la colección TableDefs, para encontrar el elemento deseado.

Private Function TableExistsEx(ByVal Name As String) As Boolean
Dim i As Integer
Dim logEx As Boolean

Name = LCase(Name)
For i = vbEmpty To (CurrentDb.TableDefs.Count - 1)
If LCase(CurrentDb.TableDefs(i).Name) = Name Then
logEx = True
Exit For
End If
Next

TableExistsEx = logEx
End Function

2) Asignar el elemento de la colección TableDefs a un objeto de tal forma que al no existir nos genere un error.

Private Function TableExists(ByVal Name As String) As Boolean
Dim def As DAO.TableDef

On Local Error Resume Next

Set def = CurrentDb.TableDefs(Name)
TableExists = (Err.Number = vbEmpty)

On Local Error GoTo 0

End Function

3) Consultar la tabla MSysObjects

Private Function TableExists(ByVal Name As String) As Boolean

TableExists = _
Not (Nz(DLookup("[Name]", "MSysObjects", _
"[Name]='" & _
Name & "' And [Type]=6"), _
"No") = "No")
End Function

06 noviembre 2008

Orden de eventos para un formulario en Microsoft Access

Cuando se abre un formulario, la secuencia de los eventos es:

Open -> Load -> Resize -> Activate -> [GotFocus ->] Current

NOTA: El evento GotFocus se dispara antes de Current si el formulario no tiene controles que puedan recibir el foco (activos).

...al cerrar el formulario, la secuencia es:

Unload -> Deactivate -> Close

17 mayo 2007

Instalar Indy 10 en Delphi 2005

Para poder instalar la versión 10 de Indy sobre Delphi 2005 en forma manual, se debe hacer lo siguiente:

1) Descargar el paquete de uno de los servidores que nos muestra la página:

http://www.indyproject.org/Sockets/Download/DevSnapshot.EN.aspx

2) Una vez extraídos los archivos, compilar los archivos .DPK en el siguiente orden:

.\Lib\System\IndySystem100.dpk
.\Lib\Core\IndyCore100.dpk
.\Lib\Protocols\IndyProtocols100.dpk

3) Habiendo compilado los paquetes, abrir los siguientes archivos .DPK e instalarlos en orden.

.\Lib\Core\dclIndyCore100.dpk
.\Lib\Protocols\dclIndyProtocols100.dpk

4) Por último ir al menú

Tools\Options...

5) Cuando muestre la ventana Options, seleccionar el nodo Environment\Delphi Options\Library - Win32.

6) En la sección Directories, casilla Library path, agregar la ruta de acceso a las carpetas System, Core y Protocols.

16 noviembre 2006

Deshabilitar la tecla ENTER en los formularios

El día de hoy debía continuar con la implementación de una página en PHP, y me topé con el problema de siempre:

¿Cómo validar los datos de un formulario antes de enviarlos?

Pues bien. La respuesta ya era conocida -JavaScript. Debí cambiar el botón de tipo submit por uno de tipo button y asignarle la función de validación en el evento onClick.

Todo bien. Excepto por un pequeño detalle. Al navegador le importa poco si existe o no un botón submit, cuando se presiona la tecla enter en una casilla de tipo text el formulario envía los datos de manera automática.

La solución: más simple de lo que yo esperaba. Al principio pensé en una función encargada de filtrar las pulsasiones y lamarla en en el evento onKeypress de cada casilla de texto. Sin embargo navegando por la red me encontré con algo más simple.

<input type="text" name="nombre" onkeypress="return event.keyCode!=13">

...el único problema será cuando el navegador no tenga habilitado el JavaScript.