Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/08/2011, 17h54   #1
Invité régulier
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 8
Points : 8
Par défaut problème de Insert Into dans une base Access

Bonjour

J'ai un problème avec le code suivant:

Code :
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
         Dim db As DAO.Database
    Dim db_source As DAO.Database
    Dim fic As DAO.Recordset
    Dim rub As DAO.Recordset
    Dim rub_source As DAO.Recordset
    Dim Req As QueryDef
    Dim strSQL As String
    Dim matricule_recup As String
    Dim valeur_temp As Integer
    Dim valeur_max As Integer
    Dim OTP As String
    Dim CProfit As String
    Dim Montant As String
    Dim Mois As Integer
    Dim compte As String
 
  ' j'ouvre la base qui contient mes données source
    Dim m_met, ind, q_met, d_met, nomreq, q_3quart, q_medi
    Set db = DBEngine.OpenDatabase("Import.mdb")
    Set rub = db.OpenRecordset("SELECT * FROM [CA] WHERE EX=2011 And CPROFIT BETWEEN  'FR020200' and 'FR020299'")
 
'ici je recupère lechantillon que je veux
 
    ' j'ouvre la base qui va récuperer ces infos
    Set db_source = DBEngine.OpenDatabase (Application.CurrentProject.FullName)
    Set rub_source = db_source.OpenRecordset("SELECT * FROM [CA]")
 
 
 
    Do Until rub.EOF
        'Do Until rub_source.EOF
 
             rub_source.MoveFirst
             If rub("OTP") <> "" Then
 
             OTP_lu = rub("OTP")
             CProfit_lu = rub("CPROFIT")
             Montant_lu = rub("MNT")
             Mois_lu = rub("PERIODE")
             compte_lu = rub("CPTE")
 
             Set rub_source = db_source.OpenRecordset("INSERT INTO [CA] (OTP , CCProfit , MNT , CPE , MOIS) VALUES (" & OTP & "," & CProfit & "," & Montant & "," & compte & "," & Mois & ")")
 
 
 
End if 
 
 
    db.Close
End Function
Je cherche à lire une table dans une base access, et ajouter le contenu de cette table dans une autre table d'une autre base Access. Malheureusement cela ne fonctionne pas pourriez vous m'aider? Stp

Merci d'avance
Bluchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 04h46   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 617
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 617
Points : 30 959
Points : 30 959
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Cela ne fonctionne pas , on fait comment pour deviner ce qui ne va pas ? Le code ne fait pas ce que tu attends ? Il y a un message d'erreur ?

Dans un premier temps :

Code :
1
2
3
4
 Do Until rub.EOF
        'Do Until rub_source.EOF
 
             rub_source.MoveFirst
Où est la fin de la boucle ? A chaque début tu reviens sur le premier enregistrement

Dans ta requête Insert, la concaténation de toutes tes variables signifie que toutes tes données sont de type numérique, il faut utiliser les ' pour les champs de type texte.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 09h28   #3
Invité régulier
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 8
Points : 8
Bonjour

En fait le problème vient uniquement de la requête, apparement j'essaie de rentrer trop de champs dans la ta table.
Je ne comprends pas car la table [Ca ALEA] contient bien 5 champs et j'essaie d'en ajouter 5. J'ai certainement un problème de type.
Le problème c'est que j'essaie de récuperer des contenus de variables dans ma requête insert. J'ai l'impression que j'ai un souci de synthaxe.

La fin de ma boucle est après de end if (pb de couper coller), merci de m'avoir indiquer le problème du MoveFirst Philippe


Merci d'avance
Bluchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 09h48   #4
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Bonjour,

Etant donne que avant ta boucle tu ouvre deja le recordset rub_source n'aurait tu pas envie de faire quelquechose comme ca, qui serqi bcp plus simple ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Set db_source = CurrentDB
Set rub_source = db_source.OpenRecordset("SELECT * FROM [CA_ALEA]")
 
Do Until rub.EOF
  If rub("OTP") <> "" Then
     rub_source.AddNew
     rub_source.fields("OTP").value = rub("OTP")
     rub_source.fields("CPROFIT").value = rub("CPROFIT")
     rub_source.fields("MNT").value = rub("MNT")
     rub_source.fields("PERIODE").value = rub("PERIODE")
     rub_source.fields("CPTE").value = rub("CPTE")
     rub_source.Update
  end if
  rub.movenext
loop
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 09h57   #5
Invité régulier
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 8
Points : 8
Bonjour GabVoir,

Sauf erreur de ma part ,je ne peux pas procéder comme ca, car je veux récupérer les données d'une base Access extérieur, lire les données et les ajouter dans une autre base de travail ( qui sera effectivement ma currentdatabase)

Cordialement
Bluchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 10h20   #6
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Bonjour,

Si bien entendu !
Ton recordset rub est bien ouvert sur ta base Import.mdb
Ton recordset rub_source est bien ouvert sur ta table actuel.

Juste une petite correction au niveau de la lecture ecriture des champs :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Set db_source = CurrentDB
Set rub_source = db_source.OpenRecordset("SELECT * FROM [CA_ALEA]")
 
Do Until rub.EOF
  If rub("OTP") <> "" Then
     rub_source.AddNew
     rub_source![OTP] = rub![OTP]
     rub_source![CPROFIT] = rub![CPROFIT]
     rub_source![MNT] = rub![MNT]
     rub_source![PERIODE] = rub![PERIODE]
     rub_source![CPTE].value = rub![CPTE]
     rub_source.Update
  end if
  rub.movenext
loop
Je viens de penser, si tes deux tables ont la meme structure, le plus simple serait:
Code :
1
2
rqt = "SELECT OTP,CPROFIT,MNT,PERIODE,CPTE FROM [CA] IN ""Import.mdb"" WHERE EX=2011 And CPROFIT BETWEEN  'FR020200' and 'FR020299'"
db_source.Execute("INSERT INTO [CA_ALEA] (OTP,CPROFIT,MNT,PERIODE,CPTE) " & rqt)
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 12h00   #7
Invité régulier
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 8
Points : 8
Merci à vous, ca marche bien.
C'est génial!!!

Merci encore
Bluchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h43.


 
 
 
 
Partenaires

Hébergement Web