IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Splitter un champ et garder des infos annexes


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Splitter un champ et garder des infos annexes
    Bonjour,

    je souhaiterais pouvoir découper un champ d'une base access en plusieurs, en fonction d'un séparateur.
    J'ai fait quelques tentatives plus ou moins réussies grace à ce fil de 2012 :
    http://www.developpez.net/forums/d12...amp-plusieurs/

    mais ma problématique est un peu différente et je n'arrive pas à faire ce que je voudrais.

    J'ai donc dans ma base les infos suivante :
    identifiant (clé primaire) // REFERENCE

    dans mon champ REFERENCE j'ai différentes infos séparées par un "-" (mais pas vraiemnt formatées !) ; ainsi par exemple


    IDENTIFIANT // REFERENCE
    1 // modele-hauteur=1-largeur=2-couleur=noir
    2 // modele-option-hauteur=2-largeur=3-couleur=rouge
    3 // modele-couleur-hauteur=3-largeur=1-couleur=gris


    je voudrais obtenir les infos suivantes

    identifiant // reference // details
    1 // modele-hauteur=1-largeur=2-couleur=noir // modele
    1 // modele-hauteur=1-largeur=2-couleur=noir // hauteur=1
    1 // modele-hauteur=1-largeur=2-couleur=noir // largeur=2
    1 // modele-hauteur=1-largeur=2-couleur=noir // couleur=noir
    2 // modele-option-hauteur=2-largeur=3-couleur=rouge // modele
    2 // modele-option-hauteur=2-largeur=3-couleur=rouge // option

    etc.

    j'arrive grace au sujet sus-mentionné à splitter mon champ référence mais pas à amener mes champs "inchangés" (identifiant, référence "complète") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Function Transfert2()
     
    Dim monTab() As String, i As Integer
     
     
       SQL = "SELECT  REFERENCE FROM R_Nouveaux_articles WHERE REFERENCE IS NOT NULL"
       Set OSQL = CurrentDb.OpenRecordset(SQL)
       Do Until OSQL.EOF
          monTab = Split(OSQL("REFERENCE"), "-")
     
          For i = LBound(monTab) To UBound(monTab)
               CurrentDb.Execute "insert into T_DETAIL_ARTICLE(REFERENCE)  values ('" & monTab(i) & "')"
          Next i
       OSQL.MoveNext
       Loop
     
    End Function

    j'ai essayé d'ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     CurrentDb.Execute "insert into T_DETAIL_ARTICLE(IDENTIFIFANT)  values ('" & oSQL(IDENTIFIFANT) & "')"
    CurrentDb.Execute "insert into T_DETAIL_ARTICLE(REFERENCE)  values ('" & oSQL(REFERENCE) & "')"
    mais ça ne marche pas (rien d'écrit)

    merci de votre aide ...

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Adricube bonjour,

    oSQL(IDENTIFIFANT) ou oSQL(IDENTIFIANT)

    si l'ortographe est bonne (erreur de nommage), vérifie la valeur renvoyée grâce à un msgbox !

    JimBolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    merci de t'être penché sur le problème !
    il y avait effectivement cette petite erreur de nommage mais ça ne marchait pas quand même ; j'ai tout de même réussi à obtenir ce que je voulais en cherchant un peu mieux la syntaxe d'INSERT ...

    par contre peut être pourrais tu me dire s'il y a moyen qu'un tel code VB s'éxecute "automatiquement" lors d'un lancement de requete ?

    merci !

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Adricube,

    je ne suis pas sûr d'avoir correctement saisi le sens de ta question ?
    si il s'agit d’exécuter un code avant lancement de ta requête, tu peux le faire par une macro ou via un code vba !

    si il s'agit d'executer un code à l'intérieur d'une requête, cela est tout aussi réalisable, dans l'exemple ci-dessous j'appelle un code vba appelé mafonction dans lequel est transmis l'argument nom de la table impactée par la requête.

    Nom : vbarequete.JPG
Affichages : 324
Taille : 28,0 Ko

    Je ne sais pas si j'ai pu répondre à ta question

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    je pense que ça peu répondre à ma question en effet, je vais regarder ça ... merci !

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    je reviens ici car mon code ne marche plus (c'est une requete que je n'utilise que tous les mois au plus) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Function Transfert2()
     
    Dim monTab() As String, i As Integer
    Dim cle As Double
     
     
     
       SQL = "SELECT  CLE, REFERENCE FROM T_Nouveaux_articles WHERE REFERENCE IS NOT NULL"
       Set OSQL = CurrentDb.OpenRecordset(SQL)
       Do Until OSQL.EOF
     
          monTab = Split(OSQL("REFERENCE"), "-")
          cle = OSQL("cle")
     
           For i = LBound(monTab) To UBound(monTab)
     
              CurrentDb.Execute "insert into T_DETAIL_ARTICLE (CLE , DETAIL, TOUT)  values  ('" & OSQL("cle") & "' , '" & monTab(i) & "' , '" & OSQL("reference") & "')"
     
     
            Next i
     
       OSQL.MoveNext
       Loop
     
     
    End Function
    j'ai l'erreur sur Set OSQL = CurrentDb.OpenRecordset(SQL)
    "erreur d'éxecution '3061' : trop peu de paramètres. 1 attendu"


    de l'aide s'il vous plait !

  7. #7
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Adricube bonjour,


    je viens d'essayer sur mon pc la même routine que la tienne n'ayant pas vu d'erreurs notables dans ta procédure. Je pense que tu as une valeur non renseignée quelque part qui te pose problème.

    peux tu essayer d'insérer cette ligne avant ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Debug.Print "insert into T_DETAIL_ARTICLE (CLE , DETAIL, TOUT)  values  ('" & OSQL("cle") & "' , '" & monTab(i) & "' , '" & OSQL("reference") & "')"
    ainsi lorsque ton programme s'arrêtera tu pourras visualiser dans la fenêtre d’exécution le contenu de ta requête, ce qui nous permettraplus facilement de déterminer l'erreur. (tu peux activer dans ton module cette fenêtre grâce à la combinaison des touches CTRL + G).

    Nom : Capture.JPG
Affichages : 365
Taille : 141,8 Ko

    Amicalement,

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/07/2011, 13h19
  2. [phpMyAdmin] inserer des infos dans un champs en fonction d'un autre
    Par bernards111 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 13/04/2010, 14h27
  3. Réponses: 7
    Dernier message: 07/05/2009, 13h09
  4. Réponses: 3
    Dernier message: 14/07/2006, 20h24
  5. [Manip de fichiers] Fonction retournant des infos
    Par sans_atouts dans le forum C
    Réponses: 3
    Dernier message: 24/07/2002, 14h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo