[Résolu][Base]lister noms des tables champs et descriptions

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

[Résolu][Base]lister noms des tables champs et descriptions

Message par martinbrait »

Bonjour,

Cas d'utilisation :
Afin de mémoriser plus simplement mes noms de tables, noms de champs
associés à leurs description (de nom de champs), je souhaiterai
exporter un état sous fichier texte, structuré comme suit :

'===========
'nombase
'===========

nomtable1;
nomchamp1;descriptionchamp1
nomchamp2;descriptionchamp2
nomchamp3;descriptionchamp3

nomtable2;
nomchamp1;descriptionchamp1
nomchamp2;descriptionchamp2
nomchamp3;descriptionchamp3


Pourriez-vous m'aider à réaliser celà, s'il vous plaît ?

Voici mes quelques pistes, pour démarrer...
'lister les champs de tables, et les descriptions de champs,

Code : Tout sélectionner

'Voici deux requetes qui fonctionnent à la fois sur LibreOffice et OpenOffice :

1°) Liste des tables d'une base :

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.SYSTEM_TABLES WHERE TABLE_TYPE='TABLE';


2°) Liste des champs d'une table :

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.SYSTEM_COLUMNS WHERE TABLE_NAME NOT LIKE 'SYSTEM_%' AND TABLE_NAME='<Nom de votre table>';


'=======================
'écrire dans un fichier texte
'=======================
'Écriture de fichiers texte
'Pour accéder à un fichier texte, vous devez d'abord l'ouvrir.
'Pour ce faire, il faut un descripteur de fichier libre, qui identifie clairement le fichier pour les accès ultérieurs.
'La fonction FreeFile sert à créer un descripteur de fichier libre.
'Ce descripteur est passé comme paramètre à l'instruction Open, qui ouvre le fichier.
'Pour ouvrir un fichier de manière à pouvoir le spécifier comme fichier texte, l'appel Open est :

    Sub EcrireDansFichierTexte()
    'Filename est une chaîne de caractères contenant le nom du fichier. FileNo est le descripteur créé par la fonction FreeFile.
    'Une fois le fichier ouvert, vous pouvez décrire l'instruction Print ligne par ligne :
    'FileNo désigne ici aussi le descripteur de fichier. Le second paramètre spécifie le texte à enregistrer comme ligne du fichier texte.
    'Une fois le processus d'écriture achevé, le fichier doit être refermé avec un appel Close :
    Open Filename For Output As #FileNo
    Print #FileNo, "This is a test line."
    Close #FileNo
    End Sub


'Auteur : SilkyRoad
'Comment écrire dans un fichier texte en utilisant l'instruction Output ?
'Si le fichier .txt existe déjà, les anciennes données seront écrasées.
'Si le fichier n'existe pas, il sera créé automatiquement.


Sub EcrireDansFichierTexte_OutPut 
  Dim Fichier As String 
  
  Fichier = "C:\NomFichier.Txt" 
  
  Open Fichier For Output As #1 
    Print #1, "Test 1ere ligne" 
    Print #1, "Test 2eme ligne" 
  Close #1 
End Sub

'Comment écrire dans un fichier texte en utilisant l'instruction Append ?
'Les données viennent s'inscrire à la suite des lignes existantes.
'Si le fichier .txt n'existe pas, il sera créé automatiquement.

Sub EcrireDansFichierTexte_Append 
  Dim Cible As Integer 
  Dim Fichier As String 
  
  Fichier = "C:\NomFichier.Txt" 
  
  Cible = freeFile 
  Open Fichier For Append As #Cible 
    Print #Cible, "Mon texte dans le fichier" 
  Close #Cible 
End Sub
Merci et à bientôt !
Dernière modification par martinbrait le 15 mai 2018 23:12, modifié 2 fois.
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25169
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base]lister tables nom champs et descriptions

Message par Dude »

Toujours pas habitué à faire des recherches ?
Redif : https://forum.openoffice.org/fr/forum/v ... escription
JPL
Membre lOOyal
Membre lOOyal
Messages : 33
Inscription : 17 mars 2012 10:16

Re: [Base]lister tables nom champs et descriptions

Message par JPL »

Bonjour,

la description des champs, comme remplie par l'utilisateur lors du design d'une table, se trouve dans un des champs suivants

Code : Tout sélectionner

Description
HelpText
(parfois l'un, parfois les 2 !)
d'un des objets UNO:

Code : Tout sélectionner

com.sun.star.sdb.OTableColumnWrapper
com.sun.star.sdb.ODataColumn
Voir la doc sur l'API liée à ces objets.

Par ailleurs, si LibreOffice et la bibliothèque Access2Base est préchargée, le code suivant devrait se rapprocher de ce que tu cherches ... (je te laisse faire les ouvertures de fichiers et la mise en page).

Code : Tout sélectionner

Dim i As Integer, , j As Integer, odbDatabase As Object, oTable As Object, oField As Object
	Set odbDatabase = Application.CurrentDb()
	With odbDatabase
		Print "TABLES",
		For i = 0 To .TableDefs().Count - 1
			Set oTable = .TableDefs(i)
			Print oTable.Name
			For j = 0 To oTable.Fields().Count - 1
				Set oField = oTable.Fields(j)
				Print oField.Name, oField.Description
			Next j
		Next i
	End With
Cordialement.
JPL
Kubuntu 22.04 / LibO 7.6
Access2Base (LibO).
BaseDocumenter extension (LibO)
ScriptForge (LibO) - Documentation on https://help.libreoffice.org/latest/en- ... bPAR=BASIC
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Base]lister tables nom champs et descriptions

Message par Piaf »

Bonjour
Sans Extension d'installée, ce code devrait le faire

Code : Tout sélectionner

Sub Main
Dim oController as Object
Dim oTables as Variant, oTable as String, txt as String
Dim i as Integer, oCol as Object
    oController = thisDatabaseDocument.currentcontroller
	If Not  oController.isConnected() Then oController.connect
	oTables = oController.ActiveConnection.Tables
	For Each oTable In oTables.ElementNames
		Txt = txt & " Table : " & oTable & Chr(13)
		For i = 0 To oTables.getByName(oTable).Columns.Count - 1
			oCol = oTables.getByName(oTable).Columns.getByIndex(i)
			txt = txt & "Colonne : " & oCol.Name & Chr(13) & "Type : " & oCol.TypeName & Space(2) & "Précision : " & oCol.Precision _
			& Chr(13) & "Description : " & oCol.HelpText & Chr(13
		Next i
	Next	
	MsgBox txt,0,"Table(s) & Colonnes"
End Sub
TC.png
martinbrait a écrit :exporter un état sous fichier texte
Un exemple en créant un fichier Writer (Si tu tiens absolument à un fichier texte, tu trouveras des exemples sur le Forum)

Code : Tout sélectionner

Sub Main
Dim oController as Object
Dim oTables as Variant, oTable as String, txt as String
Dim i as Integer, oCol as Object, Adresse as Variant
    oController = thisDatabaseDocument.currentcontroller
	If Not  oController.isConnected() Then oController.connect
	oTables = oController.ActiveConnection.Tables
	For Each oTable In oTables.ElementNames
		Txt = txt & " Table : " & oTable & Chr(13)
		For i = 0 To oTables.getByName(oTable).Columns.Count - 1
			oCol = oTables.getByName(oTable).Columns.getByIndex(i)
			txt = txt & "Colonne : " & oCol.Name & Chr(13) & "Type : " & oCol.TypeName & Space(2) & "Précision : " & oCol.Precision _
			& Chr(13) & "Description : " & oCol.HelpText & Chr(13
		Next i
		Txt = txt & Chr(13)
	Next
	Adresse = Split(oController.Model.URL,"/")
	Adresse(UBound(Adresse)) = ""
	Adresse = Join(Adresse,"/")
	Adresse = convertToURL(Adresse & Split(oController.Title,".")(0) & ".odt")
	CreerDocWriter(txt,Adresse)
End Sub

Sub CreerDocWriter(txt as String, AdresseDoc as String)
Dim Adresse as String, oDoc As Object, monTexte as Object, monCurseur as Object
Dim Arg(0) As New com.sun.star.beans.PropertyValue
	adresse = "private:factory/swriter"
	Arg(0).Name = "Hidden"
	Arg(0).Value = True
	oDoc = StarDesktop.loadComponentFromURL(adresse, "_blank", 0, Arg() )	
	monTexte = oDoc.Text
	monCurseur = monTexte.createTextCursor
	monTexte.insertString(monCurseur, txt, false)
	oDoc.storeAsURL(AdresseDoc, Array())
	oDoc.Close(True)	
End Sub
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Base]lister tables nom champs et descriptions

Message par martinbrait »

Hello, Dude, JPL, Piaf !
Merci pour toutes vos excellentes propositions !

@Piaf, merveilleux cadeau,
OiseauLyre.jpg
Mille mercis !!! :D :D :D
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !