Pregunta

he diseñado una consulta en vista SQL usando MS Access:

select floor(num1) from t1;

Cuando corro, me sale "piso función no definida".

recibo errores similares para Ceil, Mod, Power, Sign, Sqrt, Trunc y funciones initcap.

¿Tiene la sintaxis SQL del motor de base de datos Access tiene funciones equivalentes?

¿Fue útil?

Solución

Reemplazar Floor () con Int (). Aprendí esto mediante la búsqueda en los archivos de ayuda de acceso, en este caso, golpeando F1, mientras que en el diseñador de consultas, y la búsqueda de "funciones". Eso me llevó a un tema de ayuda comparando funciones de VBA y T-SQL.

Probablemente debería echar un vistazo a la motor de base de datos Access de SQL . No puedo encontrar una buena referencia en línea para las funciones que son compatibles a través de los servicios de Jet / ACE y la expresión de acceso. Por alguna razón desconocida, la Ayuda de Access no ha incluido las expresiones Jet / ACE desde Jet 3.0 y este recurso edad fue finalmente retirado de MSDN hace un año o dos: (

Tenga en cuenta que el servicio de expresión Jet / ACE para su uso fuera de acceso soporta un subconjunto más pequeño de funciones que es posible usar el Servicio de expresión de acceso cuando se ejecuta SQL dentro de Access 2007. En términos generales, las funciones VBA5 (a diferencia de métodos) que implican tipos de datos simples (a diferencia de, por ejemplo, matrices u objetos) son compatibles fuera de la interfaz de usuario de acceso; para una lista aproximada de nombres de función ver las 'operaciones de Usar la caja de arena de modo con Jet 4.0 Service Pack 3 y posteriores' sección de MSDN este artículo .

Además, la referencia de funciones en la ayuda en VBE debe ser un punto de partida.

Los archivos de ayuda no son perfectos, pero un poco de búsqueda debería obtener lo que necesita.

Otros consejos

Public Function Floor(ByVal x As Double) As Double
'Be Because VBA does not have a Floor function.
'Works for positive numbers
'Turns 3.9 -> 3
'Note: Round(3.9) = 4

    Dim s As String, dPos As Integer
    s = CStr(x)
    dPos = InStr(s, ".")
    Floor = CLng(Left(s, dPos - 1))
End Function

Como se ha mencionado, Suelo no está disponible en el acceso, se debe utilizar int () como una alternativa. Si usted insiste en el uso de suelo, siempre se puede crear una función de módulo de VBA en su archivo MDB similar a la de abajo, pero que es algo excesivo.

Public Function floor(dblIn As Double, dec As Integer) As Double
  decPosition = InStr(Str(dblIn), ".")
  x = Left(dblIn, decPosition + dec - 1)
  floor = x
End Function

Al igual que en las otras operaciones matemáticas que se ha descrito anteriormente es posible crear funciones adicionales para crear este conjunto de funcionalidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top