Accueil > > > MODULE DE CLASSE : EXPORT REQUETE FOX PRO VERS ACESS ET TEXTE
MODULE DE CLASSE : EXPORT REQUETE FOX PRO VERS ACESS ET TEXTE
Information sur la source
Description
Module de classe qui permet de se connecter sur n'importe quelle base de type Visual Fox Pro, de lui passer une requête SQL et d'exporter le résultat de cette requête au format texte ou Access.
C'est ma premiére source que je poste, je sais pas si ça apportera quelque chose à quelqu'un ... tous vos commentaires sont les bienvenues, sur la structure du code, comment l'optimiser, etc ...
Source
- Dim foxpro As New ADODB.Connection 'Connexion sur base Fox Pro
- Dim cmd_fox As New ADODB.Command 'Commande
- Dim rqt_fox As New ADODB.Recordset 'Recordset
- Dim connecter_base As Integer 'Variable permettant de savoir si la personne s'est connecté à la base Fox Pro
- Dim newbase As ADOX.Catalog 'Pour création d'une base access
- Dim tbl As Table 'Pour création d'une table dans Access
- Dim access_externe As ADODB.Connection 'Connection sur la base créé
-
- 'FONCTION PERMETTANT DE SE CONNECTER SUR UNE BASE FOX PRO
- Function Se_connecter_foxpro(ByVal chem_base As String)
-
- 'Si renvoie 1 , connexion réussie
- 'Sinon renvoie le numéro de l'erreur de connexion
- On Error GoTo error_connexion:
-
- foxpro.ConnectionString = "DRIVER={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" & chem_base
- foxpro.Open
- connecter_base = 1
- Se_connecter_foxpro = 1
-
- Exit Function
-
- error_connexion:
- Se_connecter_foxpro = Err.Number
- Exit Function
-
- End Function
-
- 'FONCTION PERMETTANT DE SE DECONNECTER D'UNE BASE FOX PRO
- Function Se_deconnecter_foxpro()
-
- 'Si renvoie 1 , deconnexion réussie
- 'Sinon renvoie le numéro de l'erreur de deconnexion
-
- On Error GoTo error_deconnexion:
-
- foxpro.Close
- Set foxpro = Nothing
- connecter_base = 0
- Se_deconnecter_foxpro = 1
- Exit Function
-
- error_deconnexion:
- Se_deconnecter_foxpro = Err.Number
- Exit Function
-
- End Function
-
- 'FONCTION PERMETTANT D'EXPORTER UN RESULTAT DE REQUETE SQL AU FORMAT TEXTE
- Function Exporter_requete_texte(ByVal Requete_SQL As String, ByVal chemin_export As String, ByVal nom_fichier_export_avec_extension As String, ByVal separateur_texte As String)
-
- On Error GoTo error_export_txt:
- 'Variable fonctions
- Dim chaine_txt As String 'Chaine a ecrire dans le fichier texte à chaque fois
- 'Je teste si la personne s'est connecté sur la base auparavant avec réussite
-
- If connecter_base <> 1 Then
-
- MsgBox "Connecter vous auparavant sur la base Fox Pro avant de réaliser un export !", vbInformation, "Erreur init"
-
- Else
-
- 'Je commence par exécuter la requête SQL sur ma base Fox Pro suite à ma connexion
- cmd_fox.ActiveConnection = foxpro
- cmd_fox.CommandText = Requete_SQL
-
- rqt_fox.CursorLocation = adUseClient
- rqt_fox.CursorType = adOpenDynamic
- rqt_fox.LockType = adLockPessimistic
-
- rqt_fox.Open cmd_fox
-
- 'Si pas d'erreur alors je peux enchainer sur l'export de mon recordset au format souhaité
-
- Open chemin_export & nom_fichier_export_avec_extension For Output As #1
-
- 'Je recupere le nom de mes colonnes en-tete
-
- For i = 1 To rqt_fox.Fields.count - 1
-
- If i = 1 Then
-
- chaine_txt = Trim(rqt_fox.Fields(i).Name)
-
- Else
-
- chaine_txt = chaine_txt & separateur_texte & Trim(rqt_fox.Fields(i).Name)
-
- End If
-
- Next i
-
- Print #1, chaine_txt
-
- 'J'exporte ensuite le reste des valeurs de mon recordset
-
- rqt_fox.MoveFirst
-
- While Not rqt_fox.EOF
-
- For i = 1 To rqt_fox.Fields.count - 1
-
- If i = 1 Then
-
- chaine_txt = Trim(rqt_fox.Fields(i).Value)
-
- Else
-
- chaine_txt = chaine_txt & separateur_texte & Trim(rqt_fox.Fields(i).Value)
-
- End If
-
- Next i
-
- Print #1, chaine_txt
- rqt_fox.MoveNext
-
- Wend
-
- Close #1
-
- rqt_fox.Close
- Set rqt_fox = Nothing
-
- End If
-
- Exporter_requete_texte = i
-
- Exit Function
-
- error_export_txt:
-
- Exporter_requete_texte = Err.Number
- rqt_fox.Close
- Set rqt_fox = Nothing
- Exit Function
-
- End Function
-
- 'FONCTION PERMETTANT D'EXPORTER UN RESULTAT DE REQUETE SQL AU FORMAT ACCESS
- Function Exporter_requete_access(ByVal Requete_SQL As String, ByVal chemin_export As String, ByVal nom_fichier_export_avec_extension As String, ByVal nom_table As String)
-
- On Error GoTo error_export_mdb:
- 'Variable fonction
- Dim insert_int As String 'Variable pour préparation requête SQL
- Dim quote As Integer 'Index de présence d'une quote
- Dim valeur_quote_corriger As String 'Valeur sans la quote
- Dim val_inser As String 'Valeur à insérer dans la requête SQL
- Dim insertion_def As String 'Requete definitive pour l'insertion des données
- Dim access_externe As New ADODB.Connection 'Connection pour insertion des données
- Dim reponse_ecrasement As Integer 'Reponse sur ecrasement base
-
-
- If connecter_base <> 1 Then
-
- MsgBox "Connecter vous auparavant sur la base Fox Pro avant de réaliser un export !", vbInformation, "Erreur init"
-
- Else
-
- 'Je commence par exécuter la requête SQL sur ma base Fox Pro suite à ma connexion
- cmd_fox.ActiveConnection = foxpro
- cmd_fox.CommandText = Requete_SQL
-
- rqt_fox.CursorLocation = adUseClient
- rqt_fox.CursorType = adOpenDynamic
- rqt_fox.LockType = adLockPessimistic
-
- rqt_fox.Open cmd_fox
-
- 'Je crée ma base Access
- If Dir(chemin_export & nom_fichier_export_avec_extension, vbHidden) <> "" Then
-
- reponse_ecrasement = MsgBox("Le fichier existe déjà, voulez vous l'écraser ?", vbYesNo, "Confirmation")
-
- If reponse_ecrasement = vbNo Then
-
- Exit Function
-
- Else
-
- 'Je supprime mon fichier pour l'écraser
- Kill (chemin_export & nom_fichier_export_avec_extension)
-
- End If
-
- End If
-
- Set newbase = New ADOX.Catalog
- newbase.Create ("Provider='Microsoft.Jet.OLEDB.4.0';data source=" & chemin_export & nom_fichier_export_avec_extension)
-
- 'Je crée ensuite la structure de ma table dans la base créé
- Set tbl = New ADOX.Table
- tbl.Name = nom_table
-
- For i = 1 To rqt_fox.Fields.count - 1
- tbl.Columns.Append Trim(rqt_fox.Fields(i).Name), adVarWChar
- Next i
-
- newbase.Tables.Append tbl
-
- Set tbl = Nothing
- Set newbase = Nothing
-
- 'Je me connecte ensuite sur cette base pour insérer les données
- access_externe.ConnectionString = ("Provider='Microsoft.Jet.OLEDB.4.0';data source=" & chemin_export & nom_fichier_export_avec_extension)
- access_externe.Open
-
- 'Préparation de la requête SQL pour l'insertion des données dans la base créé
-
- 'Nom de la table
- inser_int = "INSERT INTO " & nom_table & "("
-
- 'Liste des champs
- For i = 1 To rqt_fox.Fields.count - 1
- inser_int = inser_int & rqt_fox.Fields(i).Name & ","
- Next i
-
- If inser_int <> "" Then
-
- inser_int = Mid(inser_int, 1, Len(inser_int) - 1)
- inser_int = inser_int & ") VALUES ("
-
- End If
-
-
- 'Je balaye ensuite mon recordset pour récupérer l'ensemble des valeurs à exporter
- rqt_fox.MoveFirst
-
- While Not rqt_fox.EOF
-
- For i = 1 To rqt_fox.Fields.count - 1
-
- 'Je teste s'il va y avoir une quote qui va m'embeter dans l'insertion des données
- quote = InStr(1, rqt_fox.Fields(i).Value, "'", vbTextCompare)
-
- If quote <> 0 Then
-
- valeur_quote_corriger = Mid(rqt_fox.Fields(i).Value, 1, quote - 1) & " " & Mid(rqt_fox.Fields(i).Value, quote + 1, (Len(rqt_fox.Fields(i).Value)) - quote)
- val_inser = val_inser & "'" & valeur_quote_corriger & "',"
-
- Else
-
- val_inser = val_inser & "'" & Trim(rqt_fox.Fields(i).Value) & "',"
-
- End If
-
-
- Next i
-
- If val_inser <> "" Then
-
- val_inser = Mid(val_inser, 1, Len(val_inser) - 1)
-
- End If
- 'Creation de la requete définitive
- insertion_def = inser_int & val_inser & ")"
-
- 'Execution de la requete sur la base
- access_externe.Execute insertion_def
- val_inser = ""
-
- rqt_fox.MoveNext
-
- Wend
-
- access_externe.Close
- Set access_externe = Nothing
-
- End If
-
- Exit Function
-
- error_export_mdb:
-
- Exporter_requete_mdb = Err.Number
- rqt_fox.Close
- Set rqt_fox = Nothing
- Exit Function
-
- End Function
-
- Private Sub Class_Initialize()
-
- connecter_base = 0
-
- End Sub
Dim foxpro As New ADODB.Connection 'Connexion sur base Fox Pro
Dim cmd_fox As New ADODB.Command 'Commande
Dim rqt_fox As New ADODB.Recordset 'Recordset
Dim connecter_base As Integer 'Variable permettant de savoir si la personne s'est connecté à la base Fox Pro
Dim newbase As ADOX.Catalog 'Pour création d'une base access
Dim tbl As Table 'Pour création d'une table dans Access
Dim access_externe As ADODB.Connection 'Connection sur la base créé
'FONCTION PERMETTANT DE SE CONNECTER SUR UNE BASE FOX PRO
Function Se_connecter_foxpro(ByVal chem_base As String)
'Si renvoie 1 , connexion réussie
'Sinon renvoie le numéro de l'erreur de connexion
On Error GoTo error_connexion:
foxpro.ConnectionString = "DRIVER={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" & chem_base
foxpro.Open
connecter_base = 1
Se_connecter_foxpro = 1
Exit Function
error_connexion:
Se_connecter_foxpro = Err.Number
Exit Function
End Function
'FONCTION PERMETTANT DE SE DECONNECTER D'UNE BASE FOX PRO
Function Se_deconnecter_foxpro()
'Si renvoie 1 , deconnexion réussie
'Sinon renvoie le numéro de l'erreur de deconnexion
On Error GoTo error_deconnexion:
foxpro.Close
Set foxpro = Nothing
connecter_base = 0
Se_deconnecter_foxpro = 1
Exit Function
error_deconnexion:
Se_deconnecter_foxpro = Err.Number
Exit Function
End Function
'FONCTION PERMETTANT D'EXPORTER UN RESULTAT DE REQUETE SQL AU FORMAT TEXTE
Function Exporter_requete_texte(ByVal Requete_SQL As String, ByVal chemin_export As String, ByVal nom_fichier_export_avec_extension As String, ByVal separateur_texte As String)
On Error GoTo error_export_txt:
'Variable fonctions
Dim chaine_txt As String 'Chaine a ecrire dans le fichier texte à chaque fois
'Je teste si la personne s'est connecté sur la base auparavant avec réussite
If connecter_base <> 1 Then
MsgBox "Connecter vous auparavant sur la base Fox Pro avant de réaliser un export !", vbInformation, "Erreur init"
Else
'Je commence par exécuter la requête SQL sur ma base Fox Pro suite à ma connexion
cmd_fox.ActiveConnection = foxpro
cmd_fox.CommandText = Requete_SQL
rqt_fox.CursorLocation = adUseClient
rqt_fox.CursorType = adOpenDynamic
rqt_fox.LockType = adLockPessimistic
rqt_fox.Open cmd_fox
'Si pas d'erreur alors je peux enchainer sur l'export de mon recordset au format souhaité
Open chemin_export & nom_fichier_export_avec_extension For Output As #1
'Je recupere le nom de mes colonnes en-tete
For i = 1 To rqt_fox.Fields.count - 1
If i = 1 Then
chaine_txt = Trim(rqt_fox.Fields(i).Name)
Else
chaine_txt = chaine_txt & separateur_texte & Trim(rqt_fox.Fields(i).Name)
End If
Next i
Print #1, chaine_txt
'J'exporte ensuite le reste des valeurs de mon recordset
rqt_fox.MoveFirst
While Not rqt_fox.EOF
For i = 1 To rqt_fox.Fields.count - 1
If i = 1 Then
chaine_txt = Trim(rqt_fox.Fields(i).Value)
Else
chaine_txt = chaine_txt & separateur_texte & Trim(rqt_fox.Fields(i).Value)
End If
Next i
Print #1, chaine_txt
rqt_fox.MoveNext
Wend
Close #1
rqt_fox.Close
Set rqt_fox = Nothing
End If
Exporter_requete_texte = i
Exit Function
error_export_txt:
Exporter_requete_texte = Err.Number
rqt_fox.Close
Set rqt_fox = Nothing
Exit Function
End Function
'FONCTION PERMETTANT D'EXPORTER UN RESULTAT DE REQUETE SQL AU FORMAT ACCESS
Function Exporter_requete_access(ByVal Requete_SQL As String, ByVal chemin_export As String, ByVal nom_fichier_export_avec_extension As String, ByVal nom_table As String)
On Error GoTo error_export_mdb:
'Variable fonction
Dim insert_int As String 'Variable pour préparation requête SQL
Dim quote As Integer 'Index de présence d'une quote
Dim valeur_quote_corriger As String 'Valeur sans la quote
Dim val_inser As String 'Valeur à insérer dans la requête SQL
Dim insertion_def As String 'Requete definitive pour l'insertion des données
Dim access_externe As New ADODB.Connection 'Connection pour insertion des données
Dim reponse_ecrasement As Integer 'Reponse sur ecrasement base
If connecter_base <> 1 Then
MsgBox "Connecter vous auparavant sur la base Fox Pro avant de réaliser un export !", vbInformation, "Erreur init"
Else
'Je commence par exécuter la requête SQL sur ma base Fox Pro suite à ma connexion
cmd_fox.ActiveConnection = foxpro
cmd_fox.CommandText = Requete_SQL
rqt_fox.CursorLocation = adUseClient
rqt_fox.CursorType = adOpenDynamic
rqt_fox.LockType = adLockPessimistic
rqt_fox.Open cmd_fox
'Je crée ma base Access
If Dir(chemin_export & nom_fichier_export_avec_extension, vbHidden) <> "" Then
reponse_ecrasement = MsgBox("Le fichier existe déjà, voulez vous l'écraser ?", vbYesNo, "Confirmation")
If reponse_ecrasement = vbNo Then
Exit Function
Else
'Je supprime mon fichier pour l'écraser
Kill (chemin_export & nom_fichier_export_avec_extension)
End If
End If
Set newbase = New ADOX.Catalog
newbase.Create ("Provider='Microsoft.Jet.OLEDB.4.0';data source=" & chemin_export & nom_fichier_export_avec_extension)
'Je crée ensuite la structure de ma table dans la base créé
Set tbl = New ADOX.Table
tbl.Name = nom_table
For i = 1 To rqt_fox.Fields.count - 1
tbl.Columns.Append Trim(rqt_fox.Fields(i).Name), adVarWChar
Next i
newbase.Tables.Append tbl
Set tbl = Nothing
Set newbase = Nothing
'Je me connecte ensuite sur cette base pour insérer les données
access_externe.ConnectionString = ("Provider='Microsoft.Jet.OLEDB.4.0';data source=" & chemin_export & nom_fichier_export_avec_extension)
access_externe.Open
'Préparation de la requête SQL pour l'insertion des données dans la base créé
'Nom de la table
inser_int = "INSERT INTO " & nom_table & "("
'Liste des champs
For i = 1 To rqt_fox.Fields.count - 1
inser_int = inser_int & rqt_fox.Fields(i).Name & ","
Next i
If inser_int <> "" Then
inser_int = Mid(inser_int, 1, Len(inser_int) - 1)
inser_int = inser_int & ") VALUES ("
End If
'Je balaye ensuite mon recordset pour récupérer l'ensemble des valeurs à exporter
rqt_fox.MoveFirst
While Not rqt_fox.EOF
For i = 1 To rqt_fox.Fields.count - 1
'Je teste s'il va y avoir une quote qui va m'embeter dans l'insertion des données
quote = InStr(1, rqt_fox.Fields(i).Value, "'", vbTextCompare)
If quote <> 0 Then
valeur_quote_corriger = Mid(rqt_fox.Fields(i).Value, 1, quote - 1) & " " & Mid(rqt_fox.Fields(i).Value, quote + 1, (Len(rqt_fox.Fields(i).Value)) - quote)
val_inser = val_inser & "'" & valeur_quote_corriger & "',"
Else
val_inser = val_inser & "'" & Trim(rqt_fox.Fields(i).Value) & "',"
End If
Next i
If val_inser <> "" Then
val_inser = Mid(val_inser, 1, Len(val_inser) - 1)
End If
'Creation de la requete définitive
insertion_def = inser_int & val_inser & ")"
'Execution de la requete sur la base
access_externe.Execute insertion_def
val_inser = ""
rqt_fox.MoveNext
Wend
access_externe.Close
Set access_externe = Nothing
End If
Exit Function
error_export_mdb:
Exporter_requete_mdb = Err.Number
rqt_fox.Close
Set rqt_fox = Nothing
Exit Function
End Function
Private Sub Class_Initialize()
connecter_base = 0
End Sub
Conclusion
Je pense rajouter l'export au format Excel et en html ....
Et permettre de se connecter sur autre chose que du fox pro à la base serait pas mal non plus, mais bon, j'avais besoin d'exporter du fox pro à la base ...
Je sais pas trop dans quel niveau mettre ma source ... je me considere encore comme débutant donc je la met là :-)
Historique
- 30 août 2007 08:25:39 :
- 30/08/07 : Ajout du zip avec le module de classe
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Export de donnée Exchange-Outlook [ par bidulle ]
J'ai besoin de récuperer des données contenu dans le carnet d'adresse d'outlook... Comment faire???j'attend avec impatience vos idées car je seche...M
Export de donnée Exchange-Outlook [ par bidulle ]
J'ai besoin de récuperer des données contenu dans le carnet d'adresse d'outlook... Comment faire???j'attend avec impatience vos idées car je seche...M
Export de donnée Exchange-Outlook [ par bidulle ]
J'ai besoin de récuperer des données contenu dans le carnet d'adresse d'outlook... Comment faire???j'attend avec impatience vos idées car je seche...M
Assistant export/import [ par Mario ]
je suis à la recherche d'un bout de programme en VB ou ASP me permettant de simuler l'assistant d'importation de données d'excel ou d'access. L'objec
import/export de donnée - Fusion de documents via appli internet/intranet [ par lh2Or@n ]
Salut, Je recherche des composants serveur (type activeX ou autre dll) permettant, d'une part, l'exportation évoluée de données vers des fichiers Exce
Export vers Excel [ par peug.net ]
Bonjour, Créer un export en CSV, okay. Mais comment exporter vers un fichier XLS d'Excel ?
Export table en VB [ par Lulu ]
Bonjour,Comment exporter une table d'Oracle dans un fichier .txt en VB ?Merci d'avance.
Problème OLE avec Access [ par Loïc ]
Bonjour,J'ai un graph sous Access que je souhaite exporter en GIF.Pour cela je fais :me.graphique0.export "Chemin\nom.extension"La fonction export est
|
Derniers Blogs
[FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
VB6 + GRAPHVIZVB6 + GRAPHVIZ par nouirayosra
Cliquez pour lire la suite par nouirayosra
Logiciels
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 Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.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 LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|