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 :

"INSERT INTO" et recordsets


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 97
    Par défaut "INSERT INTO" et recordsets
    Bonjour,

    J'ai défini 4 recordsets (ils fonctionnent, j'ai fait un petit msgbox pour afficher leur valeurs).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MsgBox (Monrecordset1!CoursDevise_Date)     'c'est une date
    MsgBox (Monrecordset1!codecompte)           'c'est un entier long
    MsgBox (Monrecordset1!Solde)                'c'est un réel long
    MsgBox (Monrecordset1!oidEtablissement)     'c'est une chaine de caractères
    Je souhaite introduire ces valeurs dans une table.

    ma requête me revoie désespérement une erreur de syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sql1 = "INSERT INTO DONNEES (Date, CompteGen, Montant, [Société]) Values (" & Monrecordset1!CoursDevise_Date & "," & _
    Monrecordset1!codecompte & "," & Monrecordset1!Solde & ",'" & Monrecordset1!oidEtablissement & "')"
     
    DoCmd.RunSQL sql1
    ça fait une demi journée que j'épluche tout le net sur ce pb, je ne comprends pas.

    Est-ce seulement possible d'utiliser un recordset dans INSER INTO ?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de psykodumarteau
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Par défaut
    Bonjour,

    Pourquoi utilise tu une requête SQL "insert into" alors qu'un recordset permet d'ecrire dans une table. Voici un code qui ajoute un enregisrtement dans une table en utilisant un recordset

    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
     
    Dim db As Database
    Dim rec As Recordset
     
    'ouverture de la base de données et du recordset
    Set db = CurrentDb
    Set rec = db.OpenRecordset("Matable", dbOpenTable, dbAppendOnly)
     
    'ajout d'un enregistrement
    rec.MoveLast
    rec.Edit
    rec.AddNew
    'nominvent, categorie et Val_inv sont des variables contenant les données à mettre dans ma table
    rec.Fields(0) = nominvent
    rec.Fields(1) = Date
    rec.Fields(2) = categorie
    rec.Fields(3) = val_inv
    rec.Update
     
    'fermeture de la base et du recordset
    rec.Close
    db.Close
    Cordialement

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 97
    Par défaut
    pour l'instant je suis bloqué à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Set qdf = CurrentDb.QueryDefs(Monrecordset0!RqVueCG.Value)
     
    qdf.Parameters("[Formulaires]![DonneesTabCA]![Debut]") = Forms(DonneesTabCA).Debut
    qdf.Parameters("[Formulaires]![DonneesTabCA]![Fin]") = Forms(DonneesTabCA).Fin
    qdf.Parameters("[Formulaires]![DonneesTabCA]![CGDebut]") = Forms(DonneesTabCA).CGDebut
    qdf.Parameters("[Formulaires]![DonneesTabCA]![CGfin]") = Forms(DonneesTabCA).CGfin
     
    Set Monrecordset1 = qdf.OpenRecordset("DONNEES", dbOpenTable, dbAppendOnly)
    (en fait le recordset 1 est défini par le recordset0)

    il me dit "erreur dans la conversion de données"

    pourtant j'ai bien vérifié les types de champs de la table DONNEES

  4. #4
    Membre expérimenté Avatar de psykodumarteau
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Par défaut
    Re,

    quand tu définis un recordset de une querydef tu ne dois pas mettre le nom de la table. Le premier argument de la méthode est le type de recordset (dqopentable).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Monrecordset1 = qdf.OpenRecordset("DONNEES", dbOpenTable, dbAppendOnly)
    Essaie sans mettre "DONNEES",

    Cordialement

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 97
    Par défaut
    Citation Envoyé par psykodumarteau Voir le message
    Re,

    quand tu définis un recordset de une querydef tu ne dois pas mettre le nom de la table. Le premier argument de la méthode est le type de recordset (dqopentable).




    Essaie sans mettre "DONNEES",

    Cordialement
    mais comment saura-t-il que il faut ajouter dans la table DONNEES ?

    scuse moi je ne suis pas un lumière en VBA

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 97
    Par défaut
    en fait j'aimerais que Monrecordset1, créé à partir du Recordset0, enregistre dans la table DONNEES son contenu.


  7. #7
    Membre expérimenté Avatar de psykodumarteau
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Par défaut
    Bonjour,

    Il faut que tu définisses deux recordsets un de lecture et un d'écriture.

    Pour ton Recordset d'écriture (recordset1):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set Monrecordset1= CurrentDb.OpenRecordset("DONNEES", dbOpenTable, dbAppendOnly)
    Pour le Recordset de lecteur, d'après ton code ce n'est pas "monrecordser0" (voir le PS). il t'en faudrai donc un troisième ouvert comme suit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set recordsetlecture = qdf.OpenRecordset
    Après tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    rec.Edit
    rec.AddNew
     
    Monrecordset1.Fields(0) = recordsetlecture.Fields(0)
    Monrecordset1.Fields(1) = recordsetlecture.Fields(1)
    Monrecordset1.Fields(2) = recordsetlecture.Fields(2)
    Monrecordset1.Fields(3) = recordsetlecture.Fields(3)
     
    rec.Update
    Peux-tu mieux détail ton application et ce que tu veux faire. Par exemple que représente le recordset0. As-tu pensé à utiliser une requete d'ajout?...

    Il existe souvent plusieurs solution pour résoudre un problème, la plus simple n'est pas toujours la plus évidente!

    PS: je ne comprend pas ta ligne de code "Set qdf = CurrentDb.QueryDefs(Monrecordset0!RqVueCG.Value)". ton recordset0 contient le nom de la quete dans laquelle se trouvent les données?

Discussions similaires

  1. [AC-2013] Problemes avec insert into et les simple quote
    Par Alann dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/07/2014, 17h41
  2. [Wamp] Problème d'insertion avec quote d'un formulaire
    Par cyberdevelopment dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 20/08/2006, 18h55
  3. INSERT INTO et recordset: date inseree le 30/12/1899
    Par catoucat dans le forum Access
    Réponses: 4
    Dernier message: 05/07/2006, 05h30
  4. [VBnet][Access] Requete imbriquee "insert + select"
    Par Fab62_ dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/03/2006, 13h58

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