OVH Cloud OVH Cloud

D'une bd à l'autre

2 réponses
Avatar
Jacques
Bonjour,

Comment copier certains enregistrements d'une bd vers une autre ?
Je sélectionne par exemple tous les enregistrements dont le champ "val" est
égal à 0
Pour ensuite les copier dans une autres bd ayant la même structure comment
dois-je m'y prendre
Une boucle sur le nombre d'enregistrements et dans cette boucle faire un
insert ?

Merci de vos réponses

2 réponses

Avatar
Jean-Marc
"Jacques" a écrit dans le message de
news:%
Bonjour,

Comment copier certains enregistrements d'une bd vers une autre ?
Je sélectionne par exemple tous les enregistrements dont le champ "val"


est
égal à 0
Pour ensuite les copier dans une autres bd ayant la même structure comment
dois-je m'y prendre
Une boucle sur le nombre d'enregistrements et dans cette boucle faire un
insert ?



Hello,
il y a plein de façons de faire.
Une solution, avec DAO pour l'exemple est de parcourir
les éléments de la première table et de remplir la seconde
avec des .Addnew, comme ceci:

' base1 est la base source, avec une table (table1) contenant
' les champs nom, prenom et val.
' base2 est la base à remplir
'

Dim db1 As Database
Dim rs1 As Recordset

Dim db2 As Database
Dim rs2 As Recordset

Set db1 = OpenDatabase("c:base1.mdb")
Set rs1 = db1.OpenRecordset("select * from table1 where val=0")
Set db2 = OpenDatabase("c:base2.mdb")
Set rs2 = db2.OpenRecordset("table1")

rs1.MoveFirst
While Not rs1.EOF
rs2.AddNew
rs2.Fields("nom") = rs1.Fields("nom")
rs2.Fields("prenom") = rs1.Fields("prenom")
rs2.Fields("val") = rs2.Fields("val")
rs2.Update
rs1.MoveNext
Wend
rs1.Close
db1.Close
rs2.Close
db2.Close
Set rs1 = Nothing
Set db1 = Nothing
Set rs2 = Nothing
Set db2 = Nothing

MsgBox "fini"


Une autre solution est de faire des INSERT comme tu le disais.

La solution que je donne ici est plutot rapide (1 seconde pour 2000
records).

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Jean-Marc
"Jacques" a écrit dans le message de
news:%
Bonjour,

Comment copier certains enregistrements d'une bd vers une autre ?
Je sélectionne par exemple tous les enregistrements dont le champ "val"


est
égal à 0
Pour ensuite les copier dans une autres bd ayant la même structure comment
dois-je m'y prendre
Une boucle sur le nombre d'enregistrements et dans cette boucle faire un
insert ?



Histoire d'être complet, voici le code à base d'INSERT.
Le choix entre INSERT et .AddNew est une question de goût.

Perso, j'aime bien le SQL. On pourrait imaginer de générer les
insert dans un fichier, de ne pas les exécuter puis de soumettre ce
fichier de commandes SQL à la base de données à un moment calme, par
exemple la nuit, pour faire un gros traitement batch, avec des commit
tous les 1000 records.
C'est une pratique courante pour archiver des data d'un environnemnt à
un autre, entre une base de production et une autre, par exemple.

'
'
Dim db1 As Database
Dim rs1 As Recordset
Dim db2 As Database

Set db1 = OpenDatabase("c:base1.mdb")
Set rs1 = db1.OpenRecordset("SELECT * FROM Table1 WHERE val=0")
Set db2 = OpenDatabase("c:base2.mdb")
rs1.MoveFirst
While Not rs1.EOF
db2.Execute "INSERT INTO Table1 (nom , prenom , val) VALUES ('" &
rs1.Fields("nom") & "','" & rs1.Fields("nom") & "',0 )"
rs1.MoveNext
Wend
rs1.Close
db1.Close
db2.Close
Set rs1 = Nothing
Set db1 = Nothing
Set db2 = Nothing
MsgBox "fini"

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;