Separer un champ de x caracteres en deux champs

Résolu
kakarous Messages postés 18 Statut Membre -  
kakarous Messages postés 18 Statut Membre -
Bonjour a tous,
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

Résumé de la discussion

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.

Bobot (l'IA à votre service)
  1. Tessel75
     
    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.
    0
  2. kakarous Messages postés 18 Statut Membre
     
    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.
    0
    1. Danelectro Messages postés 1844 Date d'inscription   Statut Membre Dernière intervention   375
       
      Mais c'est horrifiant de faire ça, vraiment. En quoi c'est gênant si le champs contient plus de 38 caractères ? Tu peux toujours couper après, dans le traitement, mais surement pas dans la BDD !! (fonction LEFT())
      0
    2. kakarous Messages postés 18 Statut Membre > Danelectro Messages postés 1844 Date d'inscription   Statut Membre Dernière intervention  
       
      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.
      0
    3. Danelectro Messages postés 1844 Date d'inscription   Statut Membre Dernière intervention   375 > kakarous Messages postés 18 Statut Membre
       
      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 )
      0
    4. kakarous Messages postés 18 Statut Membre > Danelectro Messages postés 1844 Date d'inscription   Statut Membre Dernière intervention  
       
      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é ?
      0
    5. Danelectro Messages postés 1844 Date d'inscription   Statut Membre Dernière intervention   375
       
      Utiliser un champs pour stocker un bout de chaine qui traine c'est moche, mais si en plus il n'est pas fait pour ça à la base c'est très très moche crois moi !
      Et oui, je parle de ce que tu veux couper.
      0