Accueil > Forum > > > > amélioration du temps d'importation mysql-dbase
amélioration du temps d'importation mysql-dbase
samedi 10 février 2007 à 17:30:12 |
amélioration du temps d'importation mysql-dbase

pascalrochon
|
Bonjour, je viens d'installer Mysql car j'ai maintenant un besoin de cré de très grosse base (au moin 40gig) à partir de petit fichier dbase (dbf) (environ 2000). Suite a une recherche sur code source et autre site web j'ai construit une petite application me permettant d'importer en batch ma série de fichier dbf dans une table mysql. Mais voila le problème c'est que je trouve l'importation très longue. Voici donc ce que j'utilise: deux connexion ADO, une pour mysql et une pour Dbase, ensuite je lit chacune des données et je les ajoute dans la base mysql. Voici donc la partie de mon programme qui importe les données Set rs_mysql = New Recordset Set rs_dbf = New Recordset rs_mysql.Open "SELECT * FROM attribut;", conn_mysql, adOpenDynamic, adLockOptimistic rs_dbf.Open "SELECT * FROM " & nom_dbf & ";", conn_dbf rs_dbf.MoveFirst Do Until rs_dbf.EOF rs_mysql.AddNew For Each fld In rs_dbf.Fields rs_mysql(fld.Name) = fld.Value Next rs_dbf.MoveNext rs_mysql.Update Loop
Est-ce qu'il y aurait une autre méthode ou bien une amélioration du code qui permettrait de fair l'importation plus rapidement? N'importe quel gains de temps sera appréciable car avec la quantité de table et de données que j'ai a importer ce sera apprécié.
Merci Pascal
|
|
dimanche 11 février 2007 à 14:43:37 |
Re : amélioration du temps d'importation mysql-dbase

casy
|
Sans garantie de fonctionnement, tu peux peut-etre essayer une requette du style INSERT INTO cible [(champ1[, champ2[, ...]])] [IN basededonnéesexterne] SELECT [source.]champ1[, champ2[, ...] FROM expressiontable Depuis la table source pour chaque table, essaye la requette suivante : INSERT INTO table_cible IN base_cible SELECT * FROM table_source Bien sur il faut que les champs soient identiques et dans le même ordre dans les 2 tables. Sinon il faudra spécifier les différents champs dans la requette. Je pense que ce style de requette fonctionne pour inserer tout les enregistrements d'une table en une seule passe. Il ne te reste plus qu'à boucler sur le nombre de table.
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
|
|
dimanche 11 février 2007 à 17:17:24 |
Re : amélioration du temps d'importation mysql-dbase

pascalrochon
|
Merci beaucoup ca semble très prometteur...
j'ai tenté plusieurs chose et je continue. mais ce que j'ai de la difficulté a comprendre c'est comment je prépare mes tables pour les inclures tout les deux dans une même requête, je m'explique: comme dit dans mon premier message j'utilise ADO, j'ai donc deux connexion (conn_dbf et conn_mysql) . Set rs_dbf = New Recordset rs_dbf.Open "SELECT * FROM table_source;", conn_dbf
J'ai donc maintenant mes données à importer dans un recordset
maintenant il s'agit d'écrire la requete que tu me propose, mais c'est là que je me cogne la tête voici donc ce que je tente sql_insert = "INSERT INTO table_cible IN base_cible" & rs_dbf Set rs_mysql= conn_mysql.Execute(sql_insert) mais ceci ne fonctionne pas du tout, ce que je n'arrive pas a comprendre c'est comment avoir mes données à importer dans le recordset qui importera les données?
je vois que j'ai quelque difficultés a comprendre l'utilisation des recordset.
pouvez-m'aider ? je me sens quelque peut bloquer (c'est peut dire..)
Merci Pascal
PS: je tente également un autre chemin soit de créer une très grande requete du genre: INSERT INTO table_cible values (val_1,val_2, etc...), mais ce que j'ai peur c'est que certaine table_source peuvent être très grande, donc une erreur peut plus facilement s'y glisser.. que pensez-vous de cette façon de faire?
|
|
dimanche 11 février 2007 à 17:55:36 |
Re : amélioration du temps d'importation mysql-dbase

casy
|
Perso j'aurais fait un code comme celui-ci : testé sur une de mes bases sur une seule table, ça semble marcher  Dim MaConnexion As ADODB.Connection Dim MaCommande As ADODB.Command
Set MaConnexion = New ADODB.Connection MaConnexion.Provider = "Microsoft.Jet.oledb.4.0" MaConnexion.Open ("Base de données source")
Set MaCommande = New ADODB.Command MaCommande.ActiveConnection = MaConnexion ' Partie à boucler pour chaque table MaCommande.CommandText = "INSERT INTO table_source IN 'Base de données cible' SELECT * FROM table_cible" MaCommande.Execute ' ....................................
Set MaCommande = Nothing MaConnexion.Close Set MaConnexion = Nothing
 Bien sur ici je ne traite qu'une table. Il faut rajouter la boucle, etc.... ---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
|
|
dimanche 11 février 2007 à 17:57:41 |
Re : amélioration du temps d'importation mysql-dbase

casy
|
Pardon, excuse moi, il faut inverser table_source et table_cible dans le code que j'ai donné. "INSERT INTO table_cible IN 'Base de données cible' SELECT * FROM table_source"
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
|
|
dimanche 11 février 2007 à 18:24:42 |
Re : amélioration du temps d'importation mysql-dbase
|
dimanche 11 février 2007 à 21:30:55 |
Re : amélioration du temps d'importation mysql-dbase

pascalrochon
|
Un grand merci,
j'y suis presque (enfin je pense et j'espère), il n'y a qu'une chose que je ne comprend pas très bien dans ton code, dans ta requete SQL tu as 'base de données cible', comment as-tu connecter cette base externe, parce que dans mon cas, les deux tables ne sont pas dans la même base, ni même sur le même format (dbase, mysql)
Ce que je comprend c'est que tu ouvre une connexion contenant la table à importer, ensuite tu la rend active et c'est à ce moment que tu execute ta commande sql, mais où est indiquer l'endroit où se trouve la base de données cible? c'est-à-dire la connexion à la base cible
Merci encore Pascal
|
|
dimanche 11 février 2007 à 21:54:49 |
Re : amélioration du temps d'importation mysql-dbase

casy
|
Effectivement j'avais zappé les types de bases. Moi j'ai fais les tests avec des bases access
En fait, avec cette méthode, tu n'as pas de connection à ouvrir avec le base cible. C'est, à la place de Base de données cible, que tu dois mettre le chemin d'accès à la base cible. Ensuite c'est le moteur ADO qui se charge de faire la connection.
MAintenant, effectivement je ne sais pas ce qu'il faut mettre pour une base mysql. Certainement l'adresse du serveur mais la syntaxe ???
Si je peux, je vais essayer de faire le test avec une autre base.
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
|
|
dimanche 11 février 2007 à 22:34:25 |
Re : amélioration du temps d'importation mysql-dbase

pascalrochon
|
J'ai regardé ce que tu m'a dit dans ton dernier message et voici ce le résultats: Dim MaCommande As ADODB.Command Set rs_mysql = New Recordset Set MaConnexion = New ADODB.Connection
chemin = "C:\pw outaouais\C_1" MaConnexion.Open "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & chemin & ";"
connexion_mysql= "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=serviteur; DATABASE=pw_outaouais; UID=user; PWD=password" Set MaCommande = New ADODB.Command MaCommande.ActiveConnection = MaConnexion MaCommande.CommandText = "INSERT INTO attribut IN '" & connexion_mysql & "' SELECT * FROM 13_40" MaCommande.Execute
Le message d'erreur que je recois: il me dit qu'il ne trouve pas le fichierC:\patchwork outaouais\C_1\DRIVER={MySQL ODBC 3.51 Driver}; SERVER=serviteur; DATABASE=pw_outaouais; UID=user; PWD=password
Ce que je comprend c'est que je n'utilise pas la bonne méthode de connexion pour la base cible, est-ce que tu as une idée?
Merci Pascal
|
|
Cette discussion est classée dans : mysql, rs, dbase, dbf, importation
Répondre à ce message
Sujets en rapport avec ce message
DBASE [ par globule ]
Bonjour,j'essaye d'ouvrir une table DBASE (mabase.dbf) avec le code suivant Connection_Base = "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277
MySQL en réseau local ??? [ par globule ]
Bonjour, Je voudrais utiliser MySQL en réseau avec ADO et VB6On m'a déjà bien aidé ce matin sur ce forum en m'indiquant le code ci dessous.Cependant j
[VB6/MySQL]probleme RS.EOF et RS.BOF [ par nou2006 ]
Bonjour tout le monde je developpe une application en VB6 qui utilise une bases de données MySQL j'ai declaré un Recordset et j'ai acces à ce recordse
Connexion fichier Dbase [ par cdrik59 ]
Bonjour, Je voudrais savoir comment je peux connecter une macro office avec des fichiers DBF en DAO Pour une base Access le code est : Set BTF01 =
Importation de données d'une liaison RS 232 dans un tableau Excel [ par nebulha ]
Bonjour,Je suis débutant en VB, mais j'ai fait du C et C++, donc j'essais de m'adapter. Avec des exemples on comprend mieux ...J'ai comme projet de re
Recordset ADO pour MYSQL avec vb6 [ par djtrefle ]
Bonjour, je gere une table (qui s'appelle "field") qui contiens les champs suivant : Num ID Field1 Field2 Field3 ... Field20 Ce que je voudrais faire
VB6.0 et Mysql(easyphp1.6) [ par Alcoolhozor ]
'alut mon app se connecte a mysql(easyphp)à l'aide de la methode suivante:Public Sub connect() Set Wrk = CreateWorkspace("APPWorkspace", "root", "",
vb 6+ mysql - rs.moveprevious ne fonctionne pas [ par vanes2k3 ]
bonjour à tous,je suis en train de développer une petite appli de gestion de divx, en m'appuyant sur une base mysql.j'utilise myOdbc, ainsi qu'une con
Livres en rapport
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|