'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
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.
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.
2) Asignar el elemento de la colección TableDefs a un objeto de tal forma que al no existir nos genere un error.
3) Consultar la tabla MSysObjects
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
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.
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.
¿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.
Suscribirse a:
Entradas (Atom)