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