Tibo06530
Messages postés11Date d'inscriptionlundi 31 mai 2010StatutMembreDernière intervention10 janvier 2011
-
16 juin 2010 à 10:03
Tibo06530
Messages postés11Date d'inscriptionlundi 31 mai 2010StatutMembreDernière intervention10 janvier 2011
-
16 juin 2010 à 17:32
Mesdames, Messieurs, Bon jour!
Si l'un ou l'une d'entre vous peut m'aider ce serait pour moi... formidable.
Aussi je vous remercie de vous soucier de mon problème(ce qui est le cas puisque vous me lisez)
Merci tous.
Le problème: 1er emploi et premier post sur un forum et premier VRAI problème
Donc
J'aimerais sauvegarder une DB mySQL d'un serveur sur un autre et tout ca en VB6.
Voici donc le code que j'ai écrit:
Dim Query_In As String
Dim Query_Del As String
Dim conn_src As ADODB.Connection 'Connexion vers serveur Source
Dim conn_dst As ADODB.Connection 'Connexion vers serveur destination
Dim rs As ADODB.Recordset 'Recordset ou stocker temporairement les données à sauvegarder
bit_red = True 'Deviendra faux quand il n'y aura plus de donnée à sauvegarder dans la DB source
Set conn_src = MySQL_Conn(IP_source, "gpsdb", "gpsdb", "gpsdb") 'Ouverture connexion avec la base de données source
If conn_src.State = 0 Then 'Tests pur confirmer ouverture de la connexion
erreur_msg = erreur_msg & "_ Connection error to DB Source"
Exit Sub
End If
'Sélection des données les plus anciennes à auteur de maximum 1000 lignes sinon... surcharge au niveau de la boucle de traitement du recordset
Query_source = "SELECT * FROM f2e WHERE time_sys < CURRENT_DATE - INTERVAL " & Save_delay & " DAY ORDER BY 2 ASC LIMIT " & Max_row
Do While bit_red = True 'Boucle de traitement des données 1000 ligne à la fois. quand Query_source ne retournera plus rien bit_red sera Faux
Set rs = New ADODB.Recordset 'Declaration du recordset
rs.CursorLocation = adUseClient 'avec option UseClient pour ne pas surcharger le serveur source
rs.Open Query_source, conn_src 'execution de la requete Query_source Select
If rs.RecordCount > 0 Then
rs.MoveFirst
Set conn_dst = MySQL_Conn(IP_destination, "gpsdb", "gpsdb", "gpsdb") 'Ouverture connexion avec la base de données destination
If conn_dst.State = 0 Then 'Test de connexion OK
erreur_msg = erreur_msg & "_ Connection error to DB Destination"
Exit Sub
End If
Do 'A mon avis c'est la qu'il faut changer un truc mais si vous avez d'autres solutions...
If rs.Fields(3) "Cnx" Or rs.Fields(3) "Pos" Then
Query_In = QuerySave_All(rs.Fields(1), rs.Fields(2), rs.Fields(3), rs.Fields(4), rs.Fields(5), rs.Fields(6) _
,rs.Fields(7), rs.Fields(8), rs.Fields(9), rs.Fields(10), rs.Fields(11), rs.Fields(12))
Else
Query_In = QuerySave_Part(rs.Fields(1), rs.Fields(2), rs.Fields(3), rs.Fields(4), rs.Fields(5), rs.Fields(6))
End If
conn_dst.Execute (Query_In) 'Exécution de l'INSERT pour 1 SEULE ligne (il y en a plusieurs MILLION)
'Suppression dans la base source de la sauvegarde effectuée précédemment
Query_Del = "DELETE FROM `f2e` WHERE `id`='" & rs.Fields(0) & "'"
conn_src.Execute (Query_Del)
rs.MoveNext
Sleep 7 'Evite au cpu de tourner comme un fou
DoEvents 'Evite à l'appli de rester bloquée MAIS pas assez efficace pour un perfectionniste comme moi
Loop Until rs.EOF = True
conn_dst.Close
Set conn_dst = Nothing
Else
bit_red = False
End If
rs.Close
Set rs = Nothing
Sleep 13 'Evite encore au cpu de devenir fou
DoEvents 'Evite encore au PC de croire que l'appli est folle
Loop
Mon problème est qu'une fois mon Recordset plein de données (notez dans la requête Query_source que j'ai du ajouter une limit au nombre de ligne sélectionner, sinon ca peut monter à 8 millions de ligne voir plus)
Ma boucle Loop until recordset.EOF bouffe tout le cpu et l'appli ne répond plus... Problème!!!
Le DoEvents et le sleep(7) arrange un peut les choses mais rien de très pro ni efficace (pour 8 millions de lignes ca prendrais des jours et en faisant rien d'autre, j'ai déjà fait de nombreux test et j'en suis à quelques centaines en 10-15 minutes et c'est pas suffisant)
Par hasard ou autre raison...
Auriez vous une solution pour faire un INSERT du Recordset complet en une fois via ma deuxième connexion "conn_dst"
Je me demande aussi si une fois mon Recordset utilisé avec la connexion conn_src je peut ensuite le réutiliser avec une autre connexion ou le recordset est il lié à la connexion une ois utilisé ensemble?
SVP svp, je vous en prie. Jusqu'à aujourd'hui je me suis pas trop mal débrouillé mais la ca commence a faire un moment que je suis dessus et rien de bien concret jusqu'à ce jour.
Does someone has an idea??? Please? HELP !
Merci a vous tous.
Tibo
PS: j'espère avoir été à peut près clair dans ma/mes questions, pas trop verbeux ni grossier... et surtout ne m'être trompé de forum pour le sujet.
Encore merci à tous