Separer un champ de x caracteres en deux champs
Résolukakarous Messages postés 18 Statut Membre -
Dans une base de données Access 2010, j'ai une table avec x enregistrements, type fichier adresse (nom, société, adr1, adr2... Certains enregistrements font plus de 38 caractères par champs et je voudrais couper et coller dans le champ vide d'a côté lorsqu'il y a plus de 38 caractères a l'aide d'une requête.
J'espère être clair, merci de vos retours.
2 réponses
Dans Access 2010, la gestion des adresses pose le problème de couper des champs dépassant 38 caractères et de déplacer le surplus dans des champs adjacents via une requête. Parmi les éléments, des exemples montrent le découpage en Adr2 et Adr3, et des réponses discutent d'une approche côté requête ou traitement post-export, tout en évoquant des fonctions LEFT et RIGHT. D'autres échanges suggèrent d'éviter de modifier la base et préfèrent manipuler le fichier exporté ou d'extraire via LEFT et LEN pour définir les portions à placer dans chaque champ. En cas de nécessité, la discussion note la contrainte de la norme postale à 38 caractères et envisage un traitement après export, plutôt que réorganiser durablement les données en BDD.
-
Bonjour,
La question est très claire mais je ne vois pas du tout l''intérêt qu'il y a à couper le contenu d'un champ en 2; cela va créer bcp de problèmes au moment de la saisie et de l'extraction parce qu'il faudra couper dans le contrôle du formulaire, et après les réunir pour sortir un état ou autre chose.
Il suffirait d'augmenter la taille du champ qui peut aller jusqu'à 225 caractères pour un champ texte ou même 64000 pour un champ Mémo.
De toutes façons si le champ de départ ne peut pas contenir plus de 38 caractères, il n'y a guère d'autre solution que de mettre un contrôle, lié à ce champ supplémentaire, à côté du premier contrôle pour entrer la suite du texte. -
Merci de ton retour Tessel75 mais si la question est clair il manque surement une info. C'est pour un fichier postal, certains de mes clients me transmettent des fichiers qui ne sont pas au norme (6 lignes de 38 caractères maxi), donc j'ai besoin de temps en temps de couper une partie du texte du champ société, par exemple et de le coller dans le champ nom qui est vide. D'où le besoin d'automatiser cette action par une requête.
-
-
Horrifiant, vraiment, je ne croyais pas faire peur a ce point la avec ce petit post...
Sinon plus sérieusement, 38 caractères parque la norme postal est de 38 caractères et que je n'ai pas le choix. Donc peux tu m'écrire la requête correspondante avec une coupure sur un espace avec le droit de choisir le nombre de caractères que je déplace. -
Tu pourrais faire quelque chose comme ça (je n'ai pas pratiqué Access depuis longtemps cependant, je me base sur SQL Server là) :
LEFT(<ta chaine>, 38) dans la première colonne
et RIGHT(<ta chaine>,LEN(<ta chaine>)-38) dans la seconde.
Mais clairement c'est une solution abominable, ne montre jamais ça à un spécialiste des BDD, il t'arracherait la tête. Une meilleure solution serait de stocker toute l'adresse dans un champ (VARCHAR(255) par exemple), et les 38 premiers caractères seulement dans un autre. Ca éviterait d'avoir à reconstituer le bordel si tu veux extraire toute l'adresse. Mais même comme ça la base ne serait pas en 3FN ( https://fr.wikipedia.org/wiki/Forme_normale_%28bases_de_donn%C3%A9es_relationnelles%29 ) -
Je pense que tu ne maîtrise pas complément mon problème car ce n'est pas si horrible que cela. Je coupe sur un espace une chaîne de caractères et je colle la sélection dans le champ suivant si il est vide. Il serait coupé brutalement de toute façon dans le logiciel postal. Sinon concernant ta requête, quand tu m'écris "ta chaîne" tu parle du champ que je veux coupé ?
-
-