Rechercher : dans
Par :

[sql - access] If et IsNumeric

Dernière réponse le 21 fév 2008 à 14:32:17 Velvel-Miho, le 20 fév 2008 à 13:24:45 
 Signaler ce message aux modérateurs

Bonjour bonjour,

J'ai un petit problème sur une requête access.
C'est pour faire une insertion avec un SELECT, mais ça, ça fonctionne.
Le truc, c'est que j'ai un champ "libelleMouvement". Ce champ est composé d'un numéro de facture à 7 chiffre et d'un libellé. J'aimerais donc le tout dans une autre table (d'où l'insertion) en séparant le numéro et le libellé.

Pour ça rien de plus sorcier que d'utiliser un MID, LEFT, RIGHT ou LEN.
Mais voilà, le champ libellé ne possède pas toujours de numéro de facture. Donc la solution que j'ai pensé, est de vérifier s'il y a bien un numéro pour savoir s'il faut fragmenter le champ libelleMouvement.


En simplifiant ma requête, ça me donne :
(la clé primaire est un numéroAuto)
- en ne séparant pas et fonctionnant :
INSERT INTO T_MOUVEMENT (libelMV,factMv)
SELECT libelleMouvement, "NULL" FROM TABLE_IMPORT;

- mais je voudrais faire un truc du genre :
INSERT INTO T_MOUVEMENT (libelMv, factMv)
SELECT (If IsNumeric( LEFT(libelleMouvement, 7) ) Then RIGHT(libelleMouvement, LEN(libelleMouvement) - 8) Else libelleMouvement End If),
(If IsNumeric( LEFT(libelleMouvement, 7) ) Then LEFT(libelleMouvement, 7) Else "NULL" End If)
FROM TABLE_IMPORT;


Au final, il semblerais que la fonction If passe.
J'obtient le message d'erreur "Erreur de syntaxe (opérateur absent) dans l'expression", et me surligne "IsNumeric".

Serait t'il possible de faire fonctionner cette requête correctement, ou bien existe t'il un autre moyen ?



Rappel n°1 : IsNumeric("le champ") renvoie Vraie si "le champ" est numérique.
Exemple : IsNumeric( 123 ) = Vraie, IsNumeric ( "abc" ) = Faux

Rappel n°2 pour ceux qui ne connaisse pas :
Les quatres fonctions cités ci-dessus existent dans tous les codes que j'ai pu rencontré en variant un peu (par exemple, on trouve LENGHT à la place de LEN), et fonctionne très bien en SQL (pratique pour les formats de date)
fonction MID : (ou milieu/midle) MID("le champ", "caractère début (:entier)", "longueur (:entier)" )
Récupère une partie du champ ou variable. Exemple : MID("abcdef", 3, 2) = "cd"
fonction LEFT : (ou gauche) LEFT("le champ", "longueur (:entier)")
Récupère la partie de gauche du champ ou variable. Exemple : LEFT("abcdef", 2) = "ab"
fonction RIGHT : (ou droite) RIGHT("le champ", "longueur (:entier)")
Récupère la partie de droite du champ ou variable. Exemple : RIGHT("abcdef", 2) = "ef"
fonction LEN : (ou longueur/lenght) LEN("le champ")
Renvoie la longueur (entier) du champ ou variable. Exemple : LEN("abcdef") = 6

Configuration: Windows XP
Internet Explorer 6.0

1

bnb, le 20 fév 2008 à 13:31:04

Remplace par (Iif(IsNumeric(left(libelleMouvement,7));left(libelleMouveme­nt,7);0))
Et teste...

Répondre à bnb

2

le père, le 20 fév 2008 à 13:46:22

Bonjour

Je peux me tromper, mais faudrait peut-être pas mélanger les genres

IF, MID, RIGHT, LEFT, LEN existent en basic et en SQL
LENGTH (et non pas LENGHT) est du SQL
IsNumeric est du Basic

Pas la peine d'essayer de mettre du basic dans une requête SQL

Répondre à le père

3

Velvel-Miho, le 20 fév 2008 à 13:50:38

Apparement, il n'aprécis pas trop les points-virgules. Mais il semblerais qu'en mode création il est reconnu IsNumeric (=EstNum).
Parfois j'ai l'impression de tourner en rond ...

Répondre à Velvel-Miho

4

Velvel-Miho, le 20 fév 2008 à 14:01:22

Pas de points-virgules, pas de virgules, pas de then-else-endif ...

Est ce qu'au moins la fonction IF peut être utilisé en SQL ?

Répondre à Velvel-Miho

5

bnb, le 20 fév 2008 à 16:29:57

Pas IF mais IIF(CONDITION;SI VRAI;SI FAUX)

Répondre à bnb

6

 Velvel-Miho, le 21 fév 2008 à 14:32:17

Autant pour moi.

Je croyais que tu avait fait une faute de frappe (ça peut arriver à tout le monde)
Apparament ça fonctionne! Merci bnb.
Pour ceux qui veulent, en mode création, il le traduit par "VraiFaux( ; ; )", et c'est Iif avec 2 I.

Répondre à Velvel-Miho