Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXPORTER LA STRUCTURE D'UNE BASE ACCESS DANS UN FICHIER TEXTE


Information sur la source

Catégorie :Base de Donnees Niveau : Débutant Date de création : 28/07/2004 Date de mise à jour : 28/07/2004 14:08:03 Vu : 11 006

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note

Description

J'avais besoin d'imprimer la structure d'une grosse base de données : Tables et Champs...la seule source que j'ai trouvé me permettait de généré un treeview qui me présentait la structure...toujours autant embêter car je pouvais pas imprimer
J'ai donc adapté la source, la je l'envoie dans un document texte sous la forme

Table_depots
- Code_depot
- Depot_lie_palette
- Nom_depot

ensuite on peut le mettre dans word, excel...le document text était la solution de facilité...

_____________________________________________________
Pour l'utiliser

Creer un textbox (Text1) ki contiendra le chemin complet de la base de données !
et un bouton de commande pour lancer l'opération...(Command1)

pensez à ajouter la référence ADO : Microsoft ActiveX Data Object 2.5 Library (le 2.5 est la version qui dépend de votre version de vb et du service pack, exemple avec le service pack 6 de vb6 on a la version 2.7) je pense que ça marche avec toutes les versions assez récentes
 

Source

  • Private Sub Command1_Click()
  • Dim MaConn As ADODB.Connection, rstTable As ADODB.Recordset
  • Dim rstEnfant As ADODB.Recordset
  • 'création de la connexion
  • Set MaConn = New ADODB.Connection
  • MaConn.Provider = "Microsoft.Jet.OLEDB.4.0;"
  • MaConn.Open Text1.Text
  • 'création du recordset contenant la structure des tables
  • Set rstTable = New ADODB.Recordset
  • Set rstTable = MaConn.OpenSchema(adSchemaTables)
  • 'on ouvre le .txt de destination
  • Open "c:\structure.txt" For Output As #1
  • 'Parcours de la collection des tables
  • Do While Not rstTable.EOF
  • NomTable = rstTable!Table_Name
  • 'élimine les tables systèmes et les Vues
  • If InStr(1, NomTable, "MSYS", vbTextCompare) <> 1 And rstTable!Table_Type <> "VIEW" Then
  • 'on écrit le nom de la table
  • Print #1, NomTable
  • 'on ouvre le schéma pr obtenir les champs
  • Set rstEnfant = New ADODB.Recordset
  • Set rstEnfant = MaConn.OpenSchema(adSchemaColumns, Array(Empty, Empty, NomTable, Empty))
  • 'on parcours les champs
  • Do While Not rstEnfant.EOF
  • 'on écri les champs précédés d'un "-"
  • Print #1, " - " & rstEnfant!COLUMN_NAME
  • 'champs suivant
  • rstEnfant.MoveNext
  • Loop
  • rstEnfant.Close
  • Set rstEnfant = Nothing
  • 'on saute une ligne pour changer de table
  • Print #1, vbCr
  • End If
  • 'table suivante
  • rstTable.MoveNext
  • Loop
  • Close #1
  • End Sub
Private Sub Command1_Click()

Dim MaConn As ADODB.Connection, rstTable As ADODB.Recordset
Dim rstEnfant As ADODB.Recordset

'création de la connexion
Set MaConn = New ADODB.Connection
MaConn.Provider = "Microsoft.Jet.OLEDB.4.0;"
MaConn.Open Text1.Text

'création du recordset contenant la structure des tables
Set rstTable = New ADODB.Recordset
Set rstTable = MaConn.OpenSchema(adSchemaTables)

'on ouvre le .txt de destination
Open "c:\structure.txt" For Output As #1

'Parcours de la collection des tables
Do While Not rstTable.EOF

    NomTable = rstTable!Table_Name
    
    'élimine les tables systèmes et les Vues
    If InStr(1, NomTable, "MSYS", vbTextCompare) <> 1 And rstTable!Table_Type <> "VIEW" Then
        
        'on écrit le nom de la table
        Print #1, NomTable
        
        'on ouvre le schéma pr obtenir les champs
        Set rstEnfant = New ADODB.Recordset
        Set rstEnfant = MaConn.OpenSchema(adSchemaColumns, Array(Empty, Empty, NomTable, Empty))
        
        'on parcours les champs
        Do While Not rstEnfant.EOF
            
            'on écri les champs précédés d'un "-"
            Print #1, " - " & rstEnfant!COLUMN_NAME
            'champs suivant
            rstEnfant.MoveNext
            
        Loop
        rstEnfant.Close
        Set rstEnfant = Nothing
        'on saute une ligne pour changer de table
        Print #1, vbCr
    End If
    'table suivante
    rstTable.MoveNext
    
Loop

Close #1

End Sub

Conclusion

voila...pas de bogues notés...si ce n'est que je n'ai pas géré les mot de passe éventuels des bases !! au pire on l'enleve momentanément...ou alors vous pouvez ouvrir une connexion ODBC pluto que de passé par le chemin de la base en dur..

merci à  Jean-Marc Rabilloud et Romain Puyfoulhoux de développez.com pour la source de départ dont je me suis largement inspiré.

N'hésitez pas à commenter,critiquer...

 

Historique

28 juillet 2004 13:58:29 :
ajout d'un petit commentaire en + sur les références a ajouter
28 juillet 2004 14:08:03 :
RAS

Commentaires et avis

signaler à un administrateur
Commentaire de el_teedee le 28/07/2004 13:09:17

Lu, j'aimerais bien tester ce petit programme, mais j'ai vraiment du mal avec les librairies, il marque "typre défini par l'utilisateur non défini" a propos de MaConn As ADODB.Connection

pourrais tu me dire quelles sont les librairies a ajouter ?

j'ai ajouté :
microsoft ADO Ext 2.7
micorsoft DAO 3.6

mais ca suffit pas apparement :(

signaler à un administrateur
Commentaire de asterik le 28/07/2004 13:38:37

Il te fo ajouter la référence
Microsoft active data objects 2.0
Voila

signaler à un administrateur
Commentaire de juvamine le 28/07/2004 13:55:58

en effet il faut ajouter la Référence Microsoft ActiveX Data Object 2.5 Library (ou 2.7) suivant le service pack de ton vb6

tu peux enlever les autres librairies

++ juva

signaler à un administrateur
Commentaire de PROGRAMMIX le 28/07/2004 14:45:06

Tu n'as pas dû chercher beaucoup parmis les sources disponibles sur ce site parce que j'avais en son temps réalisé une source qui exportait la structure d'une BD access dans un document Word.

"RÉALISER UNE DOCUMENTATION SUR LA STRUCTURE DE VOS BASES DE DONNÉES ACCESS"
http://www.vbfrance.com/code.aspx?ID=8327

Cette source a encore quelques lacunes (comme tu pourras le constater en lisant les commentaires), mais elle a le mérite d'exister et de présenter une manière de travailler avec Word.   Elle utilise DAO et permet (si ma mémoire ne fait pas défaut) de travailler sur des BD ayant un mot de passe.

A toi de voir...

signaler à un administrateur
Commentaire de juvamine le 28/07/2004 14:55:15

en effet je n'ai pas vu cette source...:/ elle m'aurait probablement bien servi mais je ne regrette pas d'avoir posté la mienne car en effet tu utilise DAO...DAO et largement obsoloète, et le seul avantage qu'il présentait est celui que l'on a mis en avant dans nos source respective : les structures des bases...
Cette fonction ayant été incorporé dans ADO je préfère utilisé quelque chose de fiable et performant.

quand au mot de passe il n'y a rien de compliké il faut juste creer la chaine de connexion en ajoutant "password=tonpass;", il n'y a donc pas grand chose a modifier !

ma fonction retrace comment récupérer simplement les tables et les champs d'une base de données. et le document texte allège encore le code, vu que c'est trè rapide a mettre en oeuvre.

Je ne déplore en rien l'efficacité de ta source qui est probablement très bonne mais elles utilisent 2 technologies différentes.
Maintenant si tu comptes le nombre de code en double qu'il y a sur le site...je pense pas que c'est les notres les plus représentés.

Cordialement
juva

signaler à un administrateur
Commentaire de tempusus le 29/07/2004 11:55:46 administrateur CS

Pas mal et fonctionnel. j'avais justement besoin d'une telle source pour des tests sur une base et ça marche bien.

En plus, point très positif, cette source est bien commentée.

8/10 pour ce travail

Cordialement

Tempusus
Admin CS

signaler à un administrateur
Commentaire de Duss le 29/07/2004 15:40:45

bon moi je fais plus de vb mais ca a l'air cool :p
juste un truc : pourquoi pas un export xml qui permettrais d en faire ce que tu veux apres ?

signaler à un administrateur
Commentaire de Alain Proviste le 29/07/2004 18:24:31 administrateur CS

nianiania xml nianiania
Bien joué Juva et merci de pas avoir tenu compte de ce que badger_71 et moi t'avions dis :>

signaler à un administrateur
Commentaire de juvamine le 29/07/2004 18:31:40

ben Duss tout dabord je ne voulais que quelque chose de visuel pour comparer 2 DB, dc voila...
ensuite kom je le précise + haut, lexportation vers un .txt allege considérablement le code
derniere raison et pas des moindres je ne connais que très peu l'xml ^^

Proviste -> ben de toute façon a partir du treeview je navai rien reussi a faire...

merci pour vos commentaires ^^

Cordialement
juva

signaler à un administrateur
Commentaire de jym le 02/08/2004 17:06:45

Bonjour,

j'ai bien aimé votre code, mais je n'y ai pas trouvé ce que cherchai, c'est à dire le type de champ et sa longueur autorisée (pour les zones de texte) parce que ça me manquait (hi!!).

je me permets de donner qq informations qui pourraient servir à d'autres :

il semble qu'un champ d'une base de données (ici access97) ait 28 propriétés (de 0 à 27 dans le code). je n'ai pas trouvé de table d'équivalence pour les valeur du champ //*DATA_TYPE ; n°  11  ;   3 //.

le chiffre 3 semble, ici, correspondre à un index, le texte du champ (le type de contenu) seul prend la valeur 130.

pour extraire ces données j'ai ajouté une boucle de scrutation du champ (ne pas oublier le Dim i en haut de la form) :

        'on parcours les champs
        Do While Not rstEnfant.EOF

            'on écri les champs précédés d'un "-"
            Print #1, " - " & rstEnfant!column_name

'text ajouté par jym
            For i = 0 To rstEnfant.Fields.Count - 1
            
            Print #1, "        *" & rstEnfant.Fields(i).Name & " ; n°  " & i & "  ;  "; rstEnfant.Fields(i).Value
            Next i
'fin du texte ajouté par jym
            
            'champs suivant
            rstEnfant.MoveNext
            
        Loop


le reste du code pas touché.

un peu de mise en page et voila imprimable la structure d'une base. merci pour ce coup de pouce.

Ca me semble interressant quand on veut retoucher un code existant, ça permet de connaitre le type de data autorisé et sa longeur.

si qq peut trouver les correspondances des valeurs des différentes propriétés, je lui en serai reconnaissant!!

bonne continuation

jym

signaler à un administrateur
Commentaire de el_teedee le 27/08/2004 11:12:49

Je sais pas si j'avais déjà voté, mais ce coup ci j'ai mis 10/10, car je suis a la fin de mon stage et c'est vraiment pratique pour faire un petit resumé de ma base de données.

PS; programix j'ai testé aussi ta source, certes elle est plus complète, mais les 2 sources ont leur intéret je trouve ;)

signaler à un administrateur
Commentaire de rrupp le 07/03/2005 18:02:18

L'exemple est très bien, mais est t'il possible d'avoir la base compléte pour faire un test (le fichier mdb).
Quand je met le chemin de ma base cela ne fonctionne pas.

Merci.

signaler à un administrateur
Commentaire de juvamine le 07/03/2005 18:20:19

quel genre d'erreur tu as ?
tu n'aurais pas mis un mot de passe sur ta base ?!
et il faut bien entré le chemin COMPLET: c:\mabase\test.mdb

vala
++
juva

signaler à un administrateur
Commentaire de rrupp le 08/03/2005 03:09:55

Salut, je te remercie pour la rapide réponse, c'était bien une erreur de chemin, le transfert des noms des tables fonctionne très bien. Je cherche une solution pour faire un transfert de table dans un fichier txt voir exemple

"Text";20;"B";20.02.05;12.00
"Text2";20;"C";20.02.05;13.11

je cherche une solution depuis plusieur semaines et je ne trouve rien, si tu a une solution à mon problème cela serai super.
Encore merci

signaler à un administrateur
Commentaire de juvamine le 08/03/2005 05:29:32

dim rs as new adodb.recrdset
rs.open "select * from matable","tabase"
open "c:\table.txt" for output as #1
while not rs.eof
print #1, rs!champs1 & ";" & rs!champs2 & ";" & rs!champs3
rs.movenext
wend
close #1
rs.close

signaler à un administrateur
Commentaire de rrupp le 08/03/2005 06:19:48

Salut j'espère que je te prend pas trop de ton temp.
comme tu voit je début. Il me semble que dans ma source la table ne se charge pas. Si je met simplement la commande Open "c:\table.txt" for output as #1 le fichier se crée mais vide. Je te joins une fois ma source,
je ne pense pas qu'il y a pire.

Avec mes saluations

                RR

Private Sub Form_Load()

Dim MaTable As adodb.Connection, rstTable As adodb.Recordset
Dim db As DAO.Database
Dim Tbl As DAO.Recordset
Dim rs As New adodb.Recordset

'création de la connexion
Set MaTable = New adodb.Connection
MaTable.Provider = "Microsoft.Jet.OLEDB.4.0;"
Set db = OpenDatabase("C:\A-export\Toukass.mdb")

Set rstTable = New adodb.Recordset


' Transfert de la table
rs.Open "select * from journal", "C:\A-export\Toukass.mdb"
Open "C:\A-export\Journal.txt" For Output As #1
While Not rs.EOF
Print #1, rs!champs1 & ";" & rs!champs2 & ";" & rs!champs3
rs.MoveNext
Wend
Close #1
rs.Close
  

Unload Me
    
End Sub


signaler à un administrateur
Commentaire de juvamine le 08/03/2005 19:26:36

Il faut que tu ajoute la référence
Microsoft ActiveX Data Object 2.5 Library
visiblement elle n'est pas ajouté car ADODB devrait se mettre seul en majsucule
A+
juva

signaler à un administrateur
Commentaire de rrupp le 08/03/2005 20:53:11

Salut j'ai Microsoft ActiveX Data Object 2.8 Library et le ADODB se met bien en majuscule. Je pense que c'est un problème du chargement de la base. J'ai le message

[Microsoft][Gestionner de pilots ODBC] Source de données introuvable et nom de pilote non spécifié

Et met la commande si dessous en jaune
rs.Open "select * from journal", "C:\A-export\Toukass.mdb"

J'ai fais un tour sur divers site pour voir l'erreur, un site de parle de MyODBC et d'autres de SQL ou XmlRad etc...
à ne plus savoir se qui est j'uste.

Je me pose la question si mon script tient la route (dans le message de hier) qu'en pense tu.
Je te remcie déjà pour les infos qui m'ont déjà était très utiles
Salutations
        RR

signaler à un administrateur
Commentaire de juvamine le 08/03/2005 21:06:41

'création de la connexion
Set MaTable = New adodb.Connection
MaTable.Provider = "Microsoft.Jet.OLEDB.4.0;"
Set db = OpenDatabase("C:\A-export\Toukass.mdb")

enleve tout ca !!!!

signaler à un administrateur
Commentaire de rrupp le 09/03/2005 04:27:27

Salut tout baigne ma base fonctionne, je te remercie encore pour l'aide qui vaut bien un 10/10 car tu eu beaucoup de la patience.

Je te joint la source, au cas si cela peu servir pour une autre personne.

Salutations
              RR

Private Sub Form_Load()

'Private Sub Form_Load()
Dim MaConn As ADODB.Connection, rstTable As ADODB.Recordset
Dim rs As ADODB.Recordset

'création de la connexion
Set MaConn = New ADODB.Connection
MaConn.Provider = "Microsoft.Jet.OLEDB.4.0;"

'Set db = OpenDatabase("C:\A-export\Toukass.mdb")
MaConn.Open "C:\A-export\Toukass.mdb"

Set rstTable = New ADODB.Recordset

' Transfert de la table
rstTable.Open "Journal", MaConn, , , adCmdTable
'MaConn.Open "select * from journal", "C:\A-export\Toukass.mdb"
Open "C:\A-export\Journal.txt" For Output As #1
While Not rstTable.EOF
Print #1, rstTable!Index & "; " & rstTable!Date & "; """ & rstTable!Time & """; " & rstTable!Machine & "; " & rstTable!Coupon & "; " & rstTable!Waiter & "; " & rstTable!Invoice & "; " & rstTable!Address & "; " & rstTable!Finance & "; " & rstTable!Product & "; " & rstTable!Category & "; " & rstTable!Taxe & "; """ & rstTable!Code & """; " & rstTable!Quantity & "; """ & rstTable!Text & """; " & rstTable!Amount & "; " & rstTable!Level & "; " & rstTable!Rate & "; " & rstTable!Weight & "; " & rstTable!Dispense & "; " & rstTable!Group & "; " & rstTable!Void & "; " & rstTable!Receipt & "; " & rstTable!Closed & "; " & rstTable!Owner & "; " & rstTable!CSerie & "; " & rstTable!CUser & "; " & rstTable!DateTime; ""
rstTable.MoveNext
Wend
Close #1
rstTable.Close

Unload Me
    
End Sub

signaler à un administrateur
Commentaire de drissanas1 le 23/05/2009 15:03:02

d'abord merci, vous faites de tres bons travail. mon pb c'est comment faire pour exporter des champs et en même temps conserver leurs longueurs déjà definie en access, par exemple  
....
....
Print #1, rs!champs1 & ";" & rs!champs2 & ";" & rs!champs3
rs.MoveNext
.....
sachant que champs1 a 5 caractères comme longueur
et champs2 a 56 caractères comme longueur
et champs3 a 120 caractères comme longueur
et ainsi de suite
et merci

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.