récupérer les parametre d'un table MySQL avec VB

récupérer les parametre d'un table MySQL avec VB - SQL/NoSQL - Programmation

Marsh Posté le 15-04-2005 à 15:52:55    

bonjour,
 
je développe une applicationn en vb6 avec une base de donné MySQL 4.1.1
j ai besoin de récupérer les infos concernant les tables : nom de la table, nom des champs, le type du champs, NOT NULL (ou pas), la clé primaire....
 
quels criteres dois-je selectionner dans ma requete??

Reply

Marsh Posté le 15-04-2005 à 15:52:55   

Reply

Marsh Posté le 15-04-2005 à 17:03:31    

Essaie ça (c'est du VBS, ça demande adaptation)
 
C'est un script que j'avais fait à mon taff pour récupérer les infos de bases divers (Access, SQL Server, MySQL et PostGre). Ca à l'air de marcher quelque soit le DSN utilisé.
Attention cependant : là le script extrait les données des tables pour les mettres dans des fichiers d'import SQL. Faut donc bidouiller un peu pour récupérer ce que tu veux ;)
 

Code :
  1. Option Explicit
  2. ' Changez uniquement cette ligne, afin de mettre le nom du driver ODBC, et le login/pass de la base
  3. Const DSN = "DSN=bidule;UID=root;pwd="
  4. ' Déclaration des constantes
  5. Const adSchemaTables = 20
  6. ' Déclaration des variables (non typées en VBS)
  7. Dim tablesCpt
  8. Dim linesCpt
  9. Dim cnx
  10. Dim rs
  11. Dim schema
  12. Dim fic
  13. Dim el
  14. Dim str
  15. Dim fso
  16. ' Initialisation des compteurs
  17. tablesCpt = 0
  18. linesCpt = 0
  19. ' Création de l'objet de connection
  20. Set cnx = CreateObject("ADODB.Connection" )
  21. cnx.Open DSN
  22. ' Création de l'objet recordset
  23. Set rs = CreateObject("ADODB.RecordSet" )
  24. Set rs.ActiveConnection = cnx
  25. ' Interrogation de la base afin d'obtenir son shema. Correspondra à un "select * from systables" sous SQL Server par exemple
  26. ' sauf que cette syntaxe générique fonctionnera avec n'importe quelle base de données.
  27. Set schema = cnx.OpenSchema(adSchemaTables)
  28. ' Création de l'objet de gestion des fichiers
  29. Set fso = CreateObject("Scripting.FileSystemObject" )
  30. ' Parcours des tables du schema
  31. Do While Not schema.EOF
  32.    ' On ne prend en compte que les objets "TABLE" : on laisse de côté les vues et les tables système par exemple.
  33.    If schema("TABLE_TYPE" ) = "TABLE" Then
  34.       tablesCpt = tablesCpt + 1
  35.       ' On crée le fichier CSV correspondant les données de la table en cours
  36.       Set fic = fso.CreateTextFile(schema("TABLE_NAME" ) & ".csv", true)
  37.       ' On interroge la table et on en récupère la liste des données
  38.       rs.Open "select * from " & schema("TABLE_NAME" )
  39.       str = ""
  40.       ' Parcours des headers de la table, et on génère la première ligne du fichier CSV
  41.       For Each el in rs.Fields
  42.          str = str & Replace(el.Name, ";", "," ) & ";"
  43.       Next
  44.       fic.WriteLine(left(str, len(str) - 1))
  45.       ' Parcours de chaque ligne de la table
  46.       Do While Not rs.EOF
  47.          linesCpt = linesCpt + 1
  48.          str = ""
  49.          ' Récupération des données, et conversion pour les rendre compatibles avec le format CSV
  50.          For Each el in rs.Fields
  51.             On Error Resume Next
  52.             str = str & Replace(Replace(Replace(Replace(CStr("" & el.Value), ";", "," ), vbCr, "\n" ), vbLf, "" ), vbTab, "\t" ) & ";"
  53.             If Err <> 0 Then
  54.               ' Attention : Le type de données n'est pas supporté (BLOB, LONG, TEXT) ou on a trouvé une valeur nulle
  55.               If isNull(el.Value) Then
  56.                  str = str & "NULL;"
  57.               Else
  58.                  str = str & "#UNSUPPORTED DATA TYPE#;"
  59.               End If
  60.               Err.Clear
  61.             End If
  62.             On Error Goto 0
  63.          Next
  64.          ' Ecriture de la ligne dans le fichier CSV
  65.          if len(str) > 1 then
  66.             fic.WriteLine(left(str, len(str) - 1))
  67.          else
  68.             fic.WriteLine("" )
  69.          end if
  70.          ' Passage à la ligne suivante
  71.          rs.MoveNext
  72.       Loop
  73.       rs.Close
  74.       fic.Close
  75.       Set fic = Nothing
  76.    End If
  77.    ' Passage à la table suivante
  78.    schema.MoveNext
  79. Loop
  80. ' Fermeture et destruction des objets de la base de données et de gestion des fichiers.
  81. schema.Close
  82. cnx.Close
  83. Set fso = Nothing
  84. Set rs = Nothing
  85. Set schema = Nothing
  86. Set cnx = Nothing
  87. MsgBox(CStr(linesCpt) & " lignes réparties dans " & CStr(tablesCpt) & " ont été correctement exportées." )

Reply

Marsh Posté le 18-04-2005 à 08:43:03    

merci je vais essayer, je te tiens au courant

Reply

Marsh Posté le 18-04-2005 à 09:28:21    

merci pour ton aide, mais récupérer les occurences de la tables je le fais déjà...
ce qu il me faut c'est les paramètres des tables genre nombre et nom des champs, le type de donnée (text, int, bool,...), valeur par défaut, ...

Reply

Marsh Posté le 18-04-2005 à 10:48:53    

Mise à part les valeurs par défaut, mon script récupère déjà le type et le nom des champs :o (par contre, les types sont sous forme numérique, et correspondent à des constantes ADO, c'est à dire que ce sont les types "génériques" qui sont donnés)

Reply

Marsh Posté le 19-04-2005 à 10:53:27    

ok j ai trouvé mon bonheur avec  
 
show create table <matable>
il me donne l export de la crétaion de base.
mais ca ne donne pas les INSERT INTO...
connais tu une commande mysql me permettant de les obtenir, car j utilise une procedure qui est vraiment galere a gerer...
 
si qql un peu tm aider... merci

Reply

Marsh Posté le 19-04-2005 à 14:18:55    

Mon truc le fait :o

Reply

Marsh Posté le 19-04-2005 à 14:19:17    

(sauf qu'il fait pas des insert into, mais des fichiers CSV, ça demande 30 secondes à modifier)

Reply

Marsh Posté le 19-04-2005 à 16:23:58    

y a un probleme avec les fichier CSV c est qu ils sont carrément plus volumineux que des fichiers text...de plus ma table contient plus de 300 000 enregistrements, et c est vraiment pas pratique a manipuler...si tu vois ce que j veux dire.
cette table n est qu une table de test, la vrai contient des millions d enregistrements...

Reply

Marsh Posté le 19-04-2005 à 17:20:27    

Rien compris.
 
Déjà un fichier CSV, c'est au contraire le format d'extraction le plus petit possible (à côté d'un fichier à pas fixe, le nombre de caractères supplémentaires est minime).
Ensuite, tu demandes à générer des requêtes "INSERT" à la place du CSV, ce qui est au TRES GRAND MINIMUM deux fois plus volumineux qu'un CSV.
 
Comprend rien à ton truc.
 
Le CSV, c'est pas du XML hein :o

Reply

Marsh Posté le 19-04-2005 à 17:20:27   

Reply

Marsh Posté le 20-04-2005 à 09:51:26    

c est pas grave merci de ton aide, j ai trouvé une autre solution pour contourné ce problème.
 
merci, bon courage pour la suite

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed