Pergunta

Eu projetei uma consulta no SQL View usando MS Access:

select floor(num1) from t1;

Quando eu executá-lo, eu recebo "chão função indefinida".

Eu recebo erros semelhantes para Ceil, Mod, Power, Sign, Sqrt, Trunc e funções initcap.

A sintaxe SQL do motor banco de dados Access tem funções equivalentes?

Foi útil?

Solução

Substituir Floor () com Int (). Eu aprendi isso através de pesquisa nos arquivos acessar a ajuda, neste caso, bater F1 enquanto no designer de consulta, e em busca de "funções". Isso me levou a um tópico de ajuda comparando funções de VBA e T-SQL.

Você provavelmente deve ter um olhar para o motor de banco de dados Access SQL Reference . Não consigo encontrar uma boa referência on-line para as funções que são suportadas através dos serviços de expressão Jet / ACE e acesso. Por alguma razão desconhecida, o Access Help não incluiu expressões Jet / ACE desde Jet 3.0 e este recurso idade foi finalmente removido do MSDN um ou dois anos atrás: (

Tenha em mente que o serviço de expressão Jet / ACE para uso fora Access suporta um subconjunto muito menor de funções que é possível utilizar o serviço de acesso Expression ao executar seu SQL dentro Access 2007. Em termos gerais, as funções VBA5 (distinto do métodos) que envolvem tipos de dados simples (como distinto de, do lado de fora por exemplo, matrizes ou objectos) são suportados sobre a interface de utilizador de acesso; para uma lista aproximada de nomes de função ver das operações Use Sandbox modo com Jet 4.0 Service Pack 3 e posteriores 'seção do este artigo MSDN .

Além disso, as funções de referência na ajuda VBE deve ser um ponto de partida.

Os arquivos de ajuda não são perfeitos, mas um pouco de pesquisa deve obter o que você precisa.

Outras dicas

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 mencionado, Piso não está disponível no acesso, você deve usar int () como uma alternativa. Se você insistir em usar Floor, você sempre pode criar uma função módulo VBA no seu arquivo mdb semelhante ao abaixo, mas que é provavelmente um exagero.

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

Assim como as outras operações matemáticas que você descreveu acima, você pode criar funções adicionais para criar este conjunto de funcionalidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top