OVH Cloud OVH Cloud

Insert vers un base non ouverte avec Recordset

4 réponses
Avatar
Clément
Je suis sur une base Access 2000 et je veux faire un copie des données d'une
table vers une autre base non ouverte, est-ce possible?

Si je passe chaque enrg. ca fonctionne, mais est-ce que je peux le faire
avec un INSERT INTO, et comment.

Voici mon code:

'Ouverture des bases de données
Set Wk = DBEngine.Workspaces(0)
Set db = CurrentDb()
Set Db1 = Wk.OpenDatabase(V_fich_nouveau)

'Ouverture des tables.
Set rs = db.OpenRecordset("regie_rapport", dbOpenTable) 'actuelle
Set Rs1 = Db1.OpenRecordset("regie_rapport", dbOpenTable) 'nouvelle

'Copie un enrg a la fois
While Not rs.EOF

Rs1.AddNew

Rs1!Code = rs!Code
Rs1!Description = rs!Description
Rs1!Choix_spec = rs!Choix_spec

Rs1.Update

rs.MoveNext
Wend
rs.Close


'Ici est-ce possible?
strQuery = "INSERT INTO db1.projet SELECT * FROM db.projet"
Db1.Execute (strQuery)


Merci a l'avance

Clement
Quebec
Canada

4 réponses

Avatar
Eric
Bonjour Clément,

Si tu veux insérer dans une table se trouvant dans une autre bd (sans
avoir à l'ouvrir) en passant par Insert Into, la commande SQL doit être
de la forme:

strSQL = "Insert into LaTableDestination In " & Chr(34) _
& strChemin & strNomBase & Chr(34) _
& " select * from LaTableOrigine;"

sous réserve que la table de destination ait la même structure.

Ce qui donnerait:

Sub zz()
Dim strSQL As String
Dim strChemin As String
Dim strNomBase As String
strChemin = CurrentProject.Path ' adapter le chemin
If Right(strChemin, 1) <> "" Then strChemin = strChemin & ""
strNomBase = "NomBaseDeReception.mdb" ' à adapter
strSQL = "Insert into [regie_rapport] In " & Chr(34) _
& strChemin & strNomBase & Chr(34) _
& " select * from [regie_rapport];"
CurrentDb.Execute strSQL
End Sub



Je suis sur une base Access 2000 et je veux faire un copie des données d'une
table vers une autre base non ouverte, est-ce possible?

Si je passe chaque enrg. ca fonctionne, mais est-ce que je peux le faire
avec un INSERT INTO, et comment.

Voici mon code:

'Ouverture des bases de données
Set Wk = DBEngine.Workspaces(0)
Set db = CurrentDb()
Set Db1 = Wk.OpenDatabase(V_fich_nouveau)

'Ouverture des tables.
Set rs = db.OpenRecordset("regie_rapport", dbOpenTable) 'actuelle
Set Rs1 = Db1.OpenRecordset("regie_rapport", dbOpenTable) 'nouvelle

'Copie un enrg a la fois
While Not rs.EOF

Rs1.AddNew

Rs1!Code = rs!Code
Rs1!Description = rs!Description
Rs1!Choix_spec = rs!Choix_spec

Rs1.Update

rs.MoveNext
Wend
rs.Close


'Ici est-ce possible?
strQuery = "INSERT INTO db1.projet SELECT * FROM db.projet"
Db1.Execute (strQuery)


Merci a l'avance

Clement
Quebec
Canada


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Clément
Merci Eric, je vais essayer avec ton code, par contre j'ai réussi avec la
commande transferDatabase comme code plus pas, par contre ca fonctionne
seulement si les autres tables ne sont par reliées entre elles, car il faut
les effacer avec cette commande, ta méthode sera meilleure, car je veux
garder les relations.

*********
'Ouverture des variables
Dim V_fich_vide
Dim V_fich_nouveau
Dim Wk As Workspace, db As Database, Db1 As Database
Dim rs As Recordset, Rs1 As Recordset, Rs2 As Recordset, Rs3 As Recordset

V_fich_vide = V_reseau_dir + "ArchivageSDP_vide.mde"
V_fich_nouveau = V_reseau_dir + "ArchivageSDP" + m_str.NoProjet + "_" +
Format$(Date, "dd mmm yyyy") + ".mde"

'Créer la table V_fich_nouveau en fonction du nouveau projet
FileCopy V_fich_vide, V_fich_nouveau

'Ouverture des bases de données
Set Wk = DBEngine.Workspaces(0)
Set db = CurrentDb()
Set Db1 = Wk.OpenDatabase(V_fich_nouveau)

For Each tbl In db.TableDefs
If tbl.Name Like "Msys*" Then
Else
DoCmd.TransferDatabase acExport, "Microsoft Access",
V_fich_nouveau, acTable, tbl.Name, tbl.Name, False
End If
Next

Db1.Close
db.Close

*********


Bonjour Clément,

Si tu veux insérer dans une table se trouvant dans une autre bd (sans
avoir à l'ouvrir) en passant par Insert Into, la commande SQL doit être
de la forme:

strSQL = "Insert into LaTableDestination In " & Chr(34) _
& strChemin & strNomBase & Chr(34) _
& " select * from LaTableOrigine;"

sous réserve que la table de destination ait la même structure.

Ce qui donnerait:

Sub zz()
Dim strSQL As String
Dim strChemin As String
Dim strNomBase As String
strChemin = CurrentProject.Path ' adapter le chemin
If Right(strChemin, 1) <> "" Then strChemin = strChemin & ""
strNomBase = "NomBaseDeReception.mdb" ' à adapter
strSQL = "Insert into [regie_rapport] In " & Chr(34) _
& strChemin & strNomBase & Chr(34) _
& " select * from [regie_rapport];"
CurrentDb.Execute strSQL
End Sub


Avatar
Clément
Merci Eric, c'était en plein ca !!!!!

J'ai mis mon code complet si ca peut en aider d'autres, c'est un module pour
faire l'archivage de la base de données avec la date et l'heure.


'*********************************************************************
'* Programme pour dossier Suivi_de_projet
'*********************************************************************
'*
'* Programme.....................: basCopieLocal
'* Auteur........................: Clément Dostie
'* Date de creation..............: 2006.07.07
'* Date de derniere modification : 2006.11.13
'* Remarque......................: Pour faire une copie sur le
'* lecteur local.
'*********************************************************************

Option Compare Database

Public Function CopieLocal()

If MsgBox("Voulez-vous vraiment faire la création du fichier sur votre
disque dur ? - Cette procédure est assez longue", vbYesNo) = vbYes Then
'Réponse oui
Else 'Réponse non
Exit Function
End If

DoCmd.Hourglass True

'Vérification du nom du reseau
Dim Db2 As Database
Set Db2 = CurrentDb()
Dim V_reseau_dir As String
Dim V_reseau_table As String
V_reseau_table = Db2.Name
V_reseau_dir = Left(V_reseau_table, (Len(V_reseau_table) - 18))
Db2.Close
Set Db2 = Nothing

'Ouverture des variables
Dim V_fich_vide
Dim V_fich_nouveau
Dim Wk As Workspace, db As Database, Db1 As Database
Dim rs As Recordset, Rs1 As Recordset, Rs2 As Recordset, Rs3 As Recordset

V_fich_vide = V_reseau_dir + "ArchivageSDP_vide.mde"
V_fich_nouveau = V_reseau_dir + "ArchivageSDP" + m_str.NoProjet + "_" +
Format$(Date, "dd mmm yyyy") + ".mde"

'Créer la table V_fich_nouveau en fonction du nouveau projet
FileCopy V_fich_vide, V_fich_nouveau

'Ouverture des bases de données
Set Wk = DBEngine.Workspaces(0)
Set db = CurrentDb()

For Each tbl In db.TableDefs
If tbl.Name Like "Msys*" Or tbl.Name Like "dbo*" Then
Else
strQuery = "INSERT INTO [" + tbl.Name + "] IN " + Chr(34) +
V_fich_nouveau + Chr(34) + " SELECT * " & "FROM [" & tbl.Name + "]"
db.Execute (strQuery)
'DoCmd.TransferDatabase acExport, "Microsoft Access",
V_fich_nouveau, acTable, tbl.Name, tbl.Name, False
End If
Next

db.Close
Set db = Nothing

'Copier la table Suivi_inv_xxxx sur le V:
On Error Resume Next
MkDir "C:SDP"
MkDir "C:SDPSDP" + Str(Forms![Menu général]!no_proj)
' MkDir "V:SDP"
' MkDir "V:SDPSDP" + str(Forms![Menu général]!no_proj)

Dim V_fich_local As String
V_fich_local = "SDPSDP" + Str(Forms![Menu général]!no_proj) + "" +
Str(Forms![Menu général]!no_proj) + "_" + Format$(Now(), "dd mmm yyyy h mm
ss") + ".mde"

FileCopy V_fich_nouveau, "C:" + V_fich_local
' FileCopy V_fich_nouveau, "V:" + V_fich_local
DoCmd.Hourglass False

MsgBox "Le fichier a été créé sur " + "C:" + V_fich_local,
vbInformation, " *** INFORMATION *** "
' MsgBox "Le fichier a été créé sur " + "V:" + V_fich_local,
vbInformation, " *** INFORMATION *** "

DoCmd.Hourglass False

End Function
Avatar
Eric
Bonjour Clément,

Content d'avoir pu donner un p'tit coup de pouce à un cousin bien
éloigné ;-)

Bonne programmation.

Merci Eric, c'était en plein ca !!!!!
...



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr