Question

J'ai conçu une requête dans SQL View en utilisant MS Access:

select floor(num1) from t1;

Quand je cours, je reçois « rez-de-fonction non définie ».

Je reçois des erreurs similaires pour Ceil, Mod, Power, Sign, Sqrt, Trunc et fonctions initcap.

Est-ce que la syntaxe SQL du moteur de base de données Access ont des fonctions équivalentes?

Était-ce utile?

La solution

Remplacer le plancher () avec Int (). Je l'ai appris en effectuant une recherche dans les fichiers d'aide d'accès, dans ce cas, frapper F1 alors que dans le concepteur de requêtes, et la recherche de « fonctions ». Cela m'a pris à une rubrique d'aide à comparer les fonctions VBA et T-SQL.

Vous devriez probablement jeter un oeil à la moteur de base de données Access Référence SQL . Je ne peux pas trouver une bonne référence en ligne pour les fonctions qui sont prises en charge par le Jet / ACE et des services d'accès à l'expression. Pour une raison inconnue, l'Access n'a pas inclus les expressions Jet / ACE depuis Jet 3.0 et cette ressource ans a finalement été retiré de MSDN il y a un an ou deux: (

Gardez à l'esprit que le service d'expression Jet / ACE pour une utilisation à l'extérieur Access prend en charge un sous-ensemble beaucoup plus petite des fonctions qui est possible à l'aide du Service d'expression d'accès lors de l'exécution SQL dans Access 2007. De façon générale, les fonctions de VBA5 (distincte de méthodes) qui impliquent des types de données simples (plutôt que, par exemple, des tableaux ou des objets) sont pris en charge en dehors de l'interface utilisateur d'accès; pour une liste approximative des noms de fonction voir la section « Utilisation des opérations en mode Bac à sable avec Jet Service 4.0 Pack 3 et plus tard » de cet article MSDN .

En outre, la référence des fonctions dans l'aide VBE doit être un lieu de départ.

Les fichiers d'aide ne sont pas parfaits, mais un peu de recherche devrait vous obtenir ce dont vous avez besoin.

Autres conseils

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

Comme mentionné, étage n'est pas disponible dans l'accès, vous devez utiliser int () comme une alternative. Si vous insistez sur l'utilisation de sol, vous pouvez toujours créer une fonction de module vba dans votre fichier mdb semblable à ci-dessous, mais qui est probablement excessif.

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

Comme pour les autres opérations mathématiques vous décrit ci-dessus, vous pouvez créer des fonctions supplémentaires pour créer cet ensemble de fonctionnalités.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top