Pb Requete ACCESS 97 sur une chaine de caractères

Pb Requete ACCESS 97 sur une chaine de caractères - Programmation

Marsh Posté le 18-07-2001 à 10:37:16    

Bonjour à tous !
    Voila le pb : à partir d'un champ contenant le nom et prénom d'une personne séparés par une virgule (ex : paul, trougnard), je veux arriver à un champ comme ça : trougnard paul, ou à la rigueur, un champ nom et un champ prénom.  
    Avez vous une quelconque idée de la formule, ou même seulement de la fonction qui intervient. L'aide dans Access ne me parle pas trop.  
    Merci d'avance de vos infos !

Reply

Marsh Posté le 18-07-2001 à 10:37:16   

Reply

Marsh Posté le 18-07-2001 à 10:50:59    

Mettre dans un champ tout ce qui est à gauche de la position de la virgule -1. Avec InStr() et Left().
 
Mettre dans un autre champ les caractères a partir de la position de la virgule + 2. Avec instr() et mid().


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-07-2001 à 10:08:19    

Merci de tes infos. Mais par rapport au code, comment appliquer la modif à chaque enregistrement du champ et non pas à une variable comme dans l'exemple. T'aurais un exemple ?
 Merci d'avance !

Reply

Marsh Posté le 19-07-2001 à 10:17:25    

Y'a pas de variable dans mon exemple.
 
Dison que le champ à éclater est N_P (Nom, Prénom)
Ajoute 2 champs à ta table, mettons Prénom et Nom (au hazard !)
 
Dans un requête de mise à jour, tu as:
Pour le Prénom :
left( NP; inStr( N_P; "," )-1 )
 
Pour le Nom :
mid( NP; inStr( N_P; "," )+2 )
 
C'est tout !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-07-2001 à 11:21:35    

Je parlais de l'exemple d'Access. Mais si je peux encore me permettre qq interrogations :  
   - Je créé la requete en mode création. J'ajoute la table concernée, je sélectionne les deux nouveaux champs : Nom et Prénom, et pour chacun d'eux, j'insère la formule à la ligne "critères". Et j'ai une erreur d'appel à une procédure.  
 
Mon champ d'origine est : Nom_Prenom. Les deux nouveaux champs sont Nom et Prénom.
 - J'ai inséré : - Gauche("Nom";DansChaîne("Nom_Prenom";"," )-1)
              pour la colonne Nom.
                 -ExtracChaîne("Prenom";DansChaîne
                                        ("Nom_Prenom";"," )+2)
              pour la colonne prénom.
 
  Où est l'erreur ?
  Please, ne me laisse pas tomber Mara's Dad !!!

Reply

Marsh Posté le 19-07-2001 à 11:57:45    

Oups, autre question : c'est quoi NP pour toi ? Une nouvelle variable, un champ ?

Reply

Marsh Posté le 19-07-2001 à 12:03:35    

N_P, c'était Nom_Prenom, je connaisais pas le nom de ton champ!
 
Sinon, pour la syntaxe :
Gauche([Nom_Prenom];DansChaîne([Nom_Prenom];"," )-1)  
ExtracChaîne([Nom_Prenom];DansChaîne([Nom_Prenom];"," )+2)  
 
Il faut mettre le nom des champs entre crochets, sinon, il considère çà comme une simple chaîne !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-07-2001 à 12:22:21    

C'est vraiment sympa de m'aider, et en plus aussi rapidement.  
Cependant j'ai encore une erreur d'appel de procédure. Grr ! On va y arriver !!
 
Je pourrais t'envoyer la copie d'écran de ma requête mais je ne sais plus l'adresse où on doit poster l'image.

Reply

Marsh Posté le 19-07-2001 à 14:30:00    

Je crois qu'en fait, le pb vient de ma requete qui n'est pas créée comme il faut. J'ai fait une requete classique, donc les formules se retrouvent en WHERE dans la requete de type SELECT.
 
On peut créer une requete de MAJ sans passer par le code SQL (je me souvient plus trop du code SQL pour l'UPDATE).

Reply

Marsh Posté le 19-07-2001 à 14:36:07    

Oui, utilise l'assistant de création de requête.
Met ta table.
Choisi requête de maj.
Prend les champs Prenom et Nom.
Met les formules dans 'Mise à jour'.
 
C'est tout !
 
A, propos de "erreur d'appel de procédure", fait gaffe, si tu écris du code VB qui doit être éxécuté dans un autre module ou dans une requête, il faut que ce soit une fonction, pas une procédure ! ! !
A moins que ce soit juste un problème de vocabulaire et que t'ais dis procédure au lieu de fonction ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-07-2001 à 14:36:07   

Reply

Marsh Posté le 19-07-2001 à 14:44:06    

Ah YES ! ça a marché !! en fait j'avais pas sélectionner "Requete de mise à jour". Quel balot celui là. Bon, il y a qq pb de maj qui persistent mais je suis sur la bonne voie.
 
Il s'agit d'erreur de violation de clé, de conversion de type, de violation de verrou, de violation de la règle de conversion. J'aurai au moins jusqu'à perpette avec ça !
 
Si t'as une idée pour éviter ça (ça fera crier les secrétaires) je t'en remercie d'avance !!

Reply

Marsh Posté le 19-07-2001 à 15:04:47    

Là, je peux pas t'aider.
 
Regarde précisément les erreurs, identifie les causes, et débrouille toi pour que çà n'arrive plus !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-07-2001 à 17:32:10    

Dernières questions et après j'arrete de t'embeter :
  - Est-ce que je peux concaténer deux colonnes pour en faire qu'une ? c'est à dire mettre les deux champs dans un seul en les séparant d'un espace par exemple.  
 
  - Quelle fonction tu utiliserais pour supprimer un caractère dans une chaine ?

Reply

Marsh Posté le 19-07-2001 à 23:43:07    

Concaténer : [Nom_Du_Champ1] + " " + [Nom_Du_Champ2]
 
Supprimer un caractère :
 
En réfléchissant un peu, et en combinant ce qu'on sait déjà faire :
Chercher la position d'un caractère dans une chaîne.
Prendre une partie d'une chaîne par rapport à une position.
Concaténer 2 chaînes.
On devrait pouvoir s'en sortir non !
 
Dans d'autres languages, y'a une fonction replace bien pratique, mais en VBA, y'en a une mais elle est pas pratique du tout !
Ce serait un bon exercice que de l'écrire, non ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 20-07-2001 à 10:43:13    

Merci encore pour ces infos !
J'ai quasiment plus d'erreurs maintenant. Ce qui me fait le plus chier ce sont les enregistrements vides (le fichier texte d'où j'importe est comme ça, il y a des espaces).
 
J'hésite toujours à créer un prog en C qui me ferait toutes ces requetes en qq lignes. Il n'y aurait plus qu'à importer le fichier ensuite.
 
Je garde ton pseudo sous le coude au cas où Access me créerait encore des misères. Tu fais quoi dans la vie ? T'es administrateur de ddb ou qq chose comme ça ?

Reply

Marsh Posté le 20-07-2001 à 12:31:06    

Non, pas DBA, juste AP !
 
Mais je connais la micro depuis quasiment le début, donc j'ai engrangé pas mal de choses...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed