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

VBA Access Discussion :

Conversion de type de données d'un champ dans un recordset DAO.


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Points : 59
    Points
    59
    Par défaut Conversion de type de données d'un champ dans un recordset DAO.
    Bonjour,

    je suis confronté à un problème que je n'arrive pas à résoudre:

    J'ouvre un premier recordset rst :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM [Tbl_Interventions_Details] WHERE[Liste_Acteur] = " & Liste_Noms, dbOpenDynaset)
    Or dans ce recordset, j'ai des données de type entier ou entier long que je veux convertir en texte.

    c'est à dire que si rst.fields(5) = 2, je veux pouvoir remplacer cette valeur numérique par du texte.


    Est-ce que c'est possible? Si oui comment ?

    Merci d'avance!!!

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 219
    Points : 227
    Points
    227
    Par défaut cstr(...)
    Est ce que tu veux faire une conversion d'un nombre en string?
    Si oui, c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rst.fields(5) = cstr(2)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Points : 59
    Points
    59
    Par défaut
    Merci pour ta réponse, mais ce n'est pas ce que je veux faire.

    Je veux changer le type de données du champ rst.fields(5) en texte, car en fait, je récupère la valeur contenue dans le champs pour faire une requête, cette requête me renvoie le nom d'une personne et j'aimerai placer le nom de cette personne à la place du nombre contenu dans rst.fields(5).

    Par exmple, je lis 2 dans rst.fields(5), j'effectue une requête paramétrée qui me renvoie "TOTO" et j'aimerai copier ce résultat dans rst.fields(5).

    Mais je crois que ce n'est pas possible de modifier cette propriété, en parcourant l'aide de VBA il me semble avoir lu que cette propriété était en lecture seule pour les champs existants.

    On peut par contre la définir au moment où on crée un nouveau champ dans le recordset et n'est plus modifiable après.

    Est-ce que quelqu'un peut confirmer???

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 219
    Points : 227
    Points
    227
    Par défaut En effet c'est en lecture seul
    rstBull(1).TYPE = dbText

    En faisant cela il dit que c'est en lecture seule.


    Désolé
    Alex

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 034
    Points : 24 595
    Points
    24 595
    Par défaut
    Bonjour,

    Crée une requete composée de l'ancienne et de celle contenant le nom, la relation étant le N° de le personne. met tout les champs de l'ancienne sauf le numero met le champ contenant le nom à la place.

    Passe en visu pour voir si cela correspond bien à ce que tu attends.

    Transforme la requete en requete création de table. Exécute.

    Cordialement,

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Points : 59
    Points
    59
    Par défaut
    Bonsoir, me revoilà!!!

    Je reviens un petit peu sur tout ça...

    Donc j'ai une première requête qui va chercher tous les enregistrements correspondant à une personne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM [Tbl_Interventions_Details] WHERE [Liste_Acteur] = " & Liste_Noms, dbOpenDynaset)
    Ensuite, j'ai 2 autres requêtes qui cherchent le nom des personnes dont les numéros sont dans les champs 5 et 9 du recordset rst.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Set rsc = CurrentDb.OpenRecordset("SELECT * FROM [Tbl_Agents] WHERE [ID_Agent] = " & rst.Fields(5), dbOpenDynaset, dbReadOnly)
    Nom_Agent = rsc.Fields(1)
    rsc.Close
     
    Set rsc = CurrentDb.OpenRecordset("SELECT * FROM [Tbl_Agents] WHERE [ID_Agent] = " & rst.Fields(9), dbOpenDynaset, dbReadOnly)
    Realisateur = rsc.Fields(1)
    rsc.Close
    Ce que je souhaite c'est avoir un recordset avec les champs 1 à 4 et 6 à 8 du recordset et que les nombres entiers des champs 5 et 9 soient remplacés par les noms des personnes correspondant à ces nombres...

    Etant très débutant dans le monde des requêtes de type "Select *...", je ne vois pas comment faire pour combiner ces 3 requêtes en une...

    En listant chaque champ dans la requête principale?
    Comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select Tbl_Inter.Num_Inter,Tbl_Inter.Ordre, Tbl_Inter.Jalon, Tbl_Inter.Date, (Select ID_Agent, Nom_Agent From Tbl_Agents Where ID_Agent = Tbl_Inter.Num_Agent), ...... (Select .... Where ID_Agent = Tbl_Inter.Realisateur) From Tbl_Inter Where [Liste_Acteur] = " & Liste_Noms
    Faites pas trop attention à la syntaxe, mais est-ce que le principe est bon???

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 034
    Points : 24 595
    Points
    24 595
    Par défaut
    Tu mets la charrue avant les boeufs.

    Commence par faire ce que je t'ai dit dans le QBE (générateur de requète). Une fois que ça fonctionne tu peux automatiser en lançant la requête via VBA.

    Cordialement,

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Points : 59
    Points
    59
    Par défaut
    Coucou, c'est re-moi!!!

    j'ai résolu mon problème!!!

    Merci à vous tous!!!

    Ci-dessous le code résultant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Set res = CurrentDb.OpenRecordset("Select * From Tbl_Agents Where ID_Agent = " & Me.Liste_Noms, dbOpenDynaset)
        If Not res.BOF And Not res.EOF Then Nom_Agent = res.Fields(1)
    res.Close
     
    SQL = "SELECT Tbl_Interventions_Details.Num_Intervention, Tbl_Interventions_Details.Ordre_Jalon, Tbl_Interventions_Details.Jalon, "
    SQL = SQL & "Tbl_Interventions_Details.Date_Butoir_Jalon , Tbl_Agents.Nom_Complet, Tbl_Interventions_Details.Liste_Groupe, Tbl_Interventions_Details.Liste_Etat_Jalon, Tbl_Agents_1.Nom_Complet, Tbl_Interventions_Details.Date_Realisation, Tbl_Interventions_Details.Remarques "
    SQL = SQL & "FROM Tbl_Agents AS Tbl_Agents_1 INNER JOIN (Tbl_Agents INNER JOIN Tbl_Interventions_Details ON Tbl_Agents.ID_Agent = Tbl_Interventions_Details.Liste_Acteur) ON Tbl_Agents_1.ID_Agent = Tbl_Interventions_Details.Realise_Par "
    SQL = SQL & "WHERE Tbl_Agents.Nom_Complet = '" & Nom_Agent & "' ORDER BY Date_Butoir_Jalon;"
     
    Set rst = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
     
    Set Liste_Jalons_Agents.Recordset = rst
    Effectivement, en le faisant avec QBE, c'est du feu de dieu, mais le WHERE ne fonctionne pas directement, j'ai dû le modifier à la main.

    Ca marche et c'est tout ce qui compte!!!

    Merci encore une fois!!!

    Par contre si quelqu'un pouvait m'expliquer un peu le fonctionnement de cette requête car comme dit, même si QBE le fait, il est encore mieux de comprendre ce qu'il fait, non?

    Si quelqu'un veut bien se dévouer!!!

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 034
    Points : 24 595
    Points
    24 595
    Par défaut
    Citation Envoyé par heavenvibes
    Par contre si quelqu'un pouvait m'expliquer un peu le fonctionnement de cette requête car comme dit, même si QBE le fait, il est encore mieux de comprendre ce qu'il fait, non?
    Bonjour,

    Le QBE ne fait rien tout seul c'est toi qui lui dit quoi faire. Et dans ce cas il a fait exactement ce que tu lui as dit.

    - créer une nouvelle requete composé de champs issus de 2 tables différentes dont la relation est le champ Id_agent et Réalisé_Par et dont seul les agents dont le nom est Nom_agent sont pris en compte.

    Content pour toi

    Cordialement,

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Points : 59
    Points
    59
    Par défaut
    OK, en tout cas merci à vous et aussi à QBE!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/03/2008, 11h07
  2. Erreur 3421, Erreur de conversion de type de données
    Par khorn dans le forum VBA Access
    Réponses: 13
    Dernier message: 01/06/2007, 10h52
  3. conversion entre types de données.
    Par jro-daemon dans le forum C
    Réponses: 2
    Dernier message: 07/05/2007, 21h41
  4. Pb de conversion de type de données
    Par keiserjo dans le forum Excel
    Réponses: 4
    Dernier message: 25/07/2006, 14h39
  5. [Excel] Problème de conversion de type de données
    Par keiserjo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/07/2006, 12h26

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