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 :

Remplacer du texte par l'ID correspondant


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2009
    Messages : 59
    Points : 44
    Points
    44
    Par défaut Remplacer du texte par l'ID correspondant
    Bonjour,

    Suite à un remaniement total de ma base de données je me suis rendu compte de quelques erreurs plus ou moins importantes.
    Dans une de mes tables (qu'on va appeler A) mon choix de la clé primaire et de la relation avec une autre table n'était pas du tout judicieux, de plus je n'avais pas mis de numérotation automatique.

    J'ai "réparé" ce problème qu'à 50%, création d'un champ numérotation automatique qui est devenu ma clé primaire.
    Mon soucis est le lien de cette table (A) avec une autre (B).
    La table B puisait les informations dans la table A sous forme de liste : le champ en question est du texte.

    Or je souhaiterai changer le lien entre les 2 tables et mettre l'ID de la table A en tant que source pour la liste de la table B.
    Le problème en faisant ça est la perte de toutes les informations déjà rentrée.

    En gros je voudrais savoir comment faire pour remplacer les informations déjà rentrée dans la table B (du texte) par l'ID correspondant que je viens de créer.

    Avant par exemple j'avais dans ma table A le nom de familles de produit comme "Toaster", après avoir générer une numérotation automatique, Toaster correspond à l'ID numéro 1.
    Dans la table B, le champ famille de produit affiche toaster et non l'ID. Je voudrais donc remplacer Toaster par 1.


    Je pourrais faire ça manuellement mais ce serait trop laborieux.

    Ca me permettra de changer la relation entre ces 2 tables et de les lier par l'ID cette fois.

    Je ne sais pas si c'est la bonne méthode par contre ...

    Merci.

  2. #2
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 175
    Points : 223
    Points
    223
    Par défaut
    Bonjour,

    La 1ère chose qui me vient en tête serait d'utiliser une requête UPDATE sur la B du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE [TABLE B] SET [Nom du champ à remplacer]= [Nom du champ qui remplace].[TABLE A]
    M'enfin quelque chose comme cela, il faudrait voir de ce côté pour trouver une solution.

    Cordialement,

    Quentin
    Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 206
    Points : 243
    Points
    243
    Par défaut
    Bonjour,

    Tu peux bidouiller pour y parvenir.

    Premièrement, ajouter une colonne de type numérique dans ta table B.
    Un peu de code pour mettre à jour ta table B.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim RcdSet As DAO.RecordSet
    Dim StrSQL As String
    
    RcdSet = currentdb.openRecordSet(SELECT * FROM A)
    
    While Not RcdSet.EOF
    
       strSQL = " UPDATE B " & _
                " SET NouvelleColonne = " & RcdSet![NouvelIDTableA] & _
                " WHERE AncienIdentifiant = '" & RcdSet![AncienIDTableA]  & "'"
        Docmd.RunSQL strSQL
        RcdSet.MoveNext
    WEND
    Ensuite, dans la table B, tu supprimes l'ancienne colonne et tu renomme la nouvelle par le nom de l'ancienne.

    Penses à faire une copie de ta base avant de mettre à jour tes table.

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2009
    Messages : 59
    Points : 44
    Points
    44
    Par défaut
    Merci pour vos réponses.

    J'essaie la solution avec le code. Je ne m'y connais pas du tout en code par contre. Pour l'insérer il faut bien aller "Database tools", ensuite "Visual Basic", puis "insert" Module ?

    Pour info quand je copie le code, il m'affiche un message sur le "SELECT" :
    Compil error :
    Expected : expression

    Il ne faudrait pas plutot écrire ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RcdSet = CurrentDb.OpenRecordset("SELECT * FROM A")
    J'ai ensuite essayé de lancer le code (en double cliquant sur le module) mais j'ai la fenêtre de code qui s'ouvre. Je ne fais pas les choses correctement je pense


    EDIT :
    N'étant pas un pro du VBA, je vais essayer de passer par une requête SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE T_Products
    SET Products_Family = [ProductFamilies_ID].[T_ProductFamilies]
    WHERE Products_ProductFamily = [ProductFamilies_Name].[T_ProductFamilies];
    Le problème, en lançant la requête, access me demande l'ID etc...


    EDIT 2 :
    Après quelques recherches, j'ai modifié le code mais ça ne fonctionne toujours pas, j'ai l'erreur suivante : "operation must use and updateable query"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE T_Products SET Products_Family = (
    SELECT ProductFamilies_ID
    FROM T_ProductFamilies
    WHERE T_Products.Products_ProductFamily = T_ProductFamilies.ProductFamilies_Name);

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 206
    Points : 243
    Points
    243
    Par défaut
    Pour ta première requête, les tables doivent être en préfixe et non en suffixe des noms de champs.

    Concernant l'erreur, es-tu sûr d'avoir les droits de modification sur la base?

    Concernant le code,en effet j'ai oublié les guillemets pour l’instruction SELECT.
    Pour exécuter le code, tu te places dans le module, tu définis une procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub MaJTables ()
        Ici, le code donné précédemment
    
        MsgBox("Ok") 'Pour être sûr que l'action s'est déroulée
    End Sub
    Et tu fais F5.

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    bonjour,

    Citation Envoyé par btks59 Voir le message
    EDIT 2 :
    Après quelques recherches, j'ai modifié le code mais ça ne fonctionne toujours pas, j'ai l'erreur suivante : "operation must use and updateable query"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE T_Products SET Products_Family = (
    SELECT ProductFamilies_ID
    FROM T_ProductFamilies
    WHERE T_Products.Products_ProductFamily = T_ProductFamilies.ProductFamilies_Name);
    L’idée est là je pense mais il faut une autre écriture avec jointure.

    Dans l’assistant, ajouter les deux tables et créer la jointure :
    T_Products.Products_ProductFamily-------T_ProductFamilies.ProductFamilies_Name

    , basculer en requête Mise à jour (UPDATE) et renseigner la colonne à mettre à jour avec la nouvelle clé.

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2009
    Messages : 59
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Après plusieurs essais non concluants, j'ai décidé de mettre à jour ma table manuellement, heureusement ça n'a pas pris beaucoup de temps.

    Je continue néanmoins à réfléchir sur ce problème car il est toujours plus intéressant d'automatiser des actions que de tout faire manuellement !

    Merci encore pour vos aides.

Discussions similaires

  1. [RegEx] Remplacer un texte par un include
    Par Oprichnik dans le forum Langage
    Réponses: 4
    Dernier message: 24/01/2008, 23h59
  2. [Tableaux] remplacer du texte par des images
    Par elti69 dans le forum Langage
    Réponses: 2
    Dernier message: 12/06/2007, 10h14
  3. [Etat] Remplacer une lettre par un mot correspondant
    Par binouzzz19 dans le forum IHM
    Réponses: 1
    Dernier message: 20/04/2007, 17h30
  4. Remplacer du texte par une image en css
    Par Seth77 dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 03/04/2006, 11h57
  5. Remplacer un texte par un autre
    Par Guillaume602 dans le forum C++
    Réponses: 3
    Dernier message: 24/11/2005, 00h40

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