Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

liste table dans zone de liste

16 réponses
Avatar
denis le breton
Bonjour, voila une bonne semaine que je furête dans les différents sites
(tous excellents), mais ... je ne trouve pas la solution.
J'ai besoin de récupérer le nom d'une table soit dans la BdD active soit
dans une BdD distante, je m'adapterai.
J'aurai aussi besoin de récupérer aussi le nom d'un champ.
En fait je ne cherche pas à lister les tables et les champs, j'ai essayé ça
marche mais cela n'est pas mon objectif.
Pour l'instant j'arrive à récupérer le nom d'une BdD par
Un formulaire, une zone de texte, qui va chercher la fonction adéquat
Private Sub Texte78_Click()
nombdd = OuvrirUnFichier(Me.hwnd, "Parcourir", 1, , "")
Me.Texte78.Value = nombdd
End Sub
...
Public Function OuvrirUnFichier(Handle As Long, Titre As String,
TypeRetour As Byte, Optional TitreFiltre As String, Optional TypeFichier
As String, Optional RepParDefaut As String) As String
...
Je voudrais faire la même chose pour les tables de cette BdD, puis après
avoir sélectionné ma table lister les champs de cette table, pour pouvoir
appliquer un traitement qui fonctionne déjà.
Pour mémoire je suis passé par une création d'une table temporaire pour
récupérer la liste des table
...
Private Sub cherch_tab_Click()
resul = ExistTable("tab_BdD")
If resul = True Then
'Exit Sub
'MonRecordSet.Close
tablbdd = "tab_BdD"
DoCmd.RunSQL "drop table [" & tablbdd & "];"
End If
DoCmd.SetWarnings False
tablbdd = "tab_BdD"
DoCmd.RunSQL "SELECT msysobjects.Name INTO " & tablbdd & " FROM msysobjects
WHERE (((msysobjects.Name) Not Like ""MSys*"") AND ((msysobjects.Name) Not
Like ""tab_BdD"") AND ((msysobjects.Name) Not Like ""~*"") AND
((msysobjects.Type) In (1,6)));"
newcol1 = "Nom"
DoCmd.RunSQL "ALTER TABLE " & tablbdd & " ADD COLUMN " & newcol1 & " TEXT"
DoCmd.RunSQL "UPDATE " & tablbdd & " SET " & tablbdd & "." & newcol1 & " = "
& tablbdd & ".name;"
DoCmd.SetWarnings True
End Sub
...
C'est un peu long mais j'essaye d'être précis
Si vous n'êtes pas toutes et tous parti(e)s en vacances ...
Merci
Denis

10 réponses

1 2
Avatar
Thierry (ze Titi)
Salut denis !

Il me semble qu'en utilisant le code présent ici
http://access.fr.free.fr/articles.php?lng=fr&pgD
tu devrais pouvoir t'en sortir. A partir du moment où tu peux accéder à
la collection TableDefs d'une base externe, tu as accès aux champs donc
à l'info que tu cherches.

Message du vendredi 13/07/2007

Bonjour, voila une bonne semaine que je furête dans les différents sites
(tous excellents), mais ... je ne trouve pas la solution.
J'ai besoin de récupérer le nom d'une table soit dans la BdD active soit
dans une BdD distante, je m'adapterai.
J'aurai aussi besoin de récupérer aussi le nom d'un champ.
En fait je ne cherche pas à lister les tables et les champs, j'ai essayé ça
marche mais cela n'est pas mon objectif.
Pour l'instant j'arrive à récupérer le nom d'une BdD par
Un formulaire, une zone de texte, qui va chercher la fonction adéquat
Private Sub Texte78_Click()
nombdd = OuvrirUnFichier(Me.hwnd, "Parcourir", 1, , "")
Me.Texte78.Value = nombdd
End Sub
...
Public Function OuvrirUnFichier(Handle As Long, Titre As String,
TypeRetour As Byte, Optional TitreFiltre As String, Optional TypeFichier
As String, Optional RepParDefaut As String) As String
...
Je voudrais faire la même chose pour les tables de cette BdD, puis après
avoir sélectionné ma table lister les champs de cette table, pour pouvoir
appliquer un traitement qui fonctionne déjà.
Pour mémoire je suis passé par une création d'une table temporaire pour
récupérer la liste des table
...
Private Sub cherch_tab_Click()
resul = ExistTable("tab_BdD")
If resul = True Then
'Exit Sub
'MonRecordSet.Close
tablbdd = "tab_BdD"
DoCmd.RunSQL "drop table [" & tablbdd & "];"
End If
DoCmd.SetWarnings False
tablbdd = "tab_BdD"
DoCmd.RunSQL "SELECT msysobjects.Name INTO " & tablbdd & " FROM msysobjects
WHERE (((msysobjects.Name) Not Like ""MSys*"") AND ((msysobjects.Name) Not
Like ""tab_BdD"") AND ((msysobjects.Name) Not Like ""~*"") AND
((msysobjects.Type) In (1,6)));"
newcol1 = "Nom"
DoCmd.RunSQL "ALTER TABLE " & tablbdd & " ADD COLUMN " & newcol1 & " TEXT"
DoCmd.RunSQL "UPDATE " & tablbdd & " SET " & tablbdd & "." & newcol1 & " = "
& tablbdd & ".name;"
DoCmd.SetWarnings True
End Sub
...
C'est un peu long mais j'essaye d'être précis
Si vous n'êtes pas toutes et tous parti(e)s en vacances ...
Merci
Denis


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info

Avatar
denis le breton
Pas tout à fait car ce code nécessite que je connaisse la table (son nom), or
moi je cherche à lister le nom des tables d'une BDD, (et de récupérer par
sélection le nom de l'une d'elles)
Suis je plus clair ?
Merci


Salut denis !

Il me semble qu'en utilisant le code présent ici
http://access.fr.free.fr/articles.php?lng=fr&pgD
tu devrais pouvoir t'en sortir. A partir du moment où tu peux accéder à
la collection TableDefs d'une base externe, tu as accès aux champs donc
à l'info que tu cherches.

Message du vendredi 13/07/2007

Bonjour, voila une bonne semaine que je furête dans les différents sites
(tous excellents), mais ... je ne trouve pas la solution.
J'ai besoin de récupérer le nom d'une table soit dans la BdD active soit
dans une BdD distante, je m'adapterai.
J'aurai aussi besoin de récupérer aussi le nom d'un champ.
En fait je ne cherche pas à lister les tables et les champs, j'ai essayé ça
marche mais cela n'est pas mon objectif.
Pour l'instant j'arrive à récupérer le nom d'une BdD par
Un formulaire, une zone de texte, qui va chercher la fonction adéquat
Private Sub Texte78_Click()
nombdd = OuvrirUnFichier(Me.hwnd, "Parcourir", 1, , "")
Me.Texte78.Value = nombdd
End Sub
...
Public Function OuvrirUnFichier(Handle As Long, Titre As String,
TypeRetour As Byte, Optional TitreFiltre As String, Optional TypeFichier
As String, Optional RepParDefaut As String) As String
...
Je voudrais faire la même chose pour les tables de cette BdD, puis après
avoir sélectionné ma table lister les champs de cette table, pour pouvoir
appliquer un traitement qui fonctionne déjà.
Pour mémoire je suis passé par une création d'une table temporaire pour
récupérer la liste des table
...
Private Sub cherch_tab_Click()
resul = ExistTable("tab_BdD")
If resul = True Then
'Exit Sub
'MonRecordSet.Close
tablbdd = "tab_BdD"
DoCmd.RunSQL "drop table [" & tablbdd & "];"
End If
DoCmd.SetWarnings False
tablbdd = "tab_BdD"
DoCmd.RunSQL "SELECT msysobjects.Name INTO " & tablbdd & " FROM msysobjects
WHERE (((msysobjects.Name) Not Like ""MSys*"") AND ((msysobjects.Name) Not
Like ""tab_BdD"") AND ((msysobjects.Name) Not Like ""~*"") AND
((msysobjects.Type) In (1,6)));"
newcol1 = "Nom"
DoCmd.RunSQL "ALTER TABLE " & tablbdd & " ADD COLUMN " & newcol1 & " TEXT"
DoCmd.RunSQL "UPDATE " & tablbdd & " SET " & tablbdd & "." & newcol1 & " = "
& tablbdd & ".name;"
DoCmd.SetWarnings True
End Sub
...
C'est un peu long mais j'essaye d'être précis
Si vous n'êtes pas toutes et tous parti(e)s en vacances ...
Merci
Denis


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






Avatar
Thierry (ze Titi)
Hello denis le breton !

J'ai parlé d'utilisation du code, une simple adaptation suffit pour
répondre à ton besoin:

Public Function ListeTables(strBase As String) As String
Dim db As Database
Set db = OpenDatabase(strBase)
ListeTables=""
For Each tdf In db.TableDefs
listeTables=listeTables & tdf.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des tables séparées par des ";"

Public Function ListerChampsTable(strBase As String, _
strTable As String) As String
Dim db As Database, fld As Field
ListeChampsTable=""
Set db = OpenDatabase(strBase)
For Each fld In db.TableDefs(strTable).Fields
ListerChampsTable=ListerChampsTable & fld.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des champs de la table en paramètre pour la
base en paramètre.

En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Pas tout à fait car ce code nécessite que je connaisse la table (son nom), or
moi je cherche à lister le nom des tables d'une BDD, (et de récupérer par
sélection le nom de l'une d'elles)
Suis je plus clair ?
Merci


Salut denis !

Il me semble qu'en utilisant le code présent ici
http://access.fr.free.fr/articles.php?lng=fr&pgD
tu devrais pouvoir t'en sortir. A partir du moment où tu peux accéder à
la collection TableDefs d'une base externe, tu as accès aux champs donc
à l'info que tu cherches.

Message du vendredi 13/07/2007

Bonjour, voila une bonne semaine que je furête dans les différents sites
(tous excellents), mais ... je ne trouve pas la solution.
J'ai besoin de récupérer le nom d'une table soit dans la BdD active soit
dans une BdD distante, je m'adapterai.
J'aurai aussi besoin de récupérer aussi le nom d'un champ.
En fait je ne cherche pas à lister les tables et les champs, j'ai essayé ça
marche mais cela n'est pas mon objectif.
Pour l'instant j'arrive à récupérer le nom d'une BdD par
Un formulaire, une zone de texte, qui va chercher la fonction adéquat
Private Sub Texte78_Click()
nombdd = OuvrirUnFichier(Me.hwnd, "Parcourir", 1, , "")
Me.Texte78.Value = nombdd
End Sub
...
Public Function OuvrirUnFichier(Handle As Long, Titre As String,
TypeRetour As Byte, Optional TitreFiltre As String, Optional
TypeFichier As String, Optional RepParDefaut As String) As String
...
Je voudrais faire la même chose pour les tables de cette BdD, puis après
avoir sélectionné ma table lister les champs de cette table, pour pouvoir
appliquer un traitement qui fonctionne déjà.
Pour mémoire je suis passé par une création d'une table temporaire pour
récupérer la liste des table
...
Private Sub cherch_tab_Click()
resul = ExistTable("tab_BdD")
If resul = True Then
'Exit Sub
'MonRecordSet.Close
tablbdd = "tab_BdD"
DoCmd.RunSQL "drop table [" & tablbdd & "];"
End If
DoCmd.SetWarnings False
tablbdd = "tab_BdD"
DoCmd.RunSQL "SELECT msysobjects.Name INTO " & tablbdd & " FROM msysobjects
WHERE (((msysobjects.Name) Not Like ""MSys*"") AND ((msysobjects.Name) Not
Like ""tab_BdD"") AND ((msysobjects.Name) Not Like ""~*"") AND
((msysobjects.Type) In (1,6)));"
newcol1 = "Nom"
DoCmd.RunSQL "ALTER TABLE " & tablbdd & " ADD COLUMN " & newcol1 & " TEXT"
DoCmd.RunSQL "UPDATE " & tablbdd & " SET " & tablbdd & "." & newcol1 & " =
" & tablbdd & ".name;"
DoCmd.SetWarnings True
End Sub
...
C'est un peu long mais j'essaye d'être précis
Si vous n'êtes pas toutes et tous parti(e)s en vacances ...
Merci
Denis


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info



Avatar
denis le breton
Fatigue Intellectuelle ou abscence de neurone compatible ? mais je bloque, je
ne sais pas comment utiliser la (les) fonctions, je suis infoutu de passer
les paramètres.
Il ne me reste plus que le gaz ou sauter de mon balcon de rez de chaussée !
Denis


Hello denis le breton !

J'ai parlé d'utilisation du code, une simple adaptation suffit pour
répondre à ton besoin:

Public Function ListeTables(strBase As String) As String
Dim db As Database
Set db = OpenDatabase(strBase)
ListeTables=""
For Each tdf In db.TableDefs
listeTables=listeTables & tdf.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des tables séparées par des ";"

Public Function ListerChampsTable(strBase As String, _
strTable As String) As String
Dim db As Database, fld As Field
ListeChampsTable=""
Set db = OpenDatabase(strBase)
For Each fld In db.TableDefs(strTable).Fields
ListerChampsTable=ListerChampsTable & fld.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des champs de la table en paramètre pour la
base en paramètre.

En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Pas tout à fait car ce code nécessite que je connaisse la table (son nom), or
moi je cherche à lister le nom des tables d'une BDD, (et de récupérer par
sélection le nom de l'une d'elles)
Suis je plus clair ?
Merci


Salut denis !

Il me semble qu'en utilisant le code présent ici
http://access.fr.free.fr/articles.php?lng=fr&pgD
tu devrais pouvoir t'en sortir. A partir du moment où tu peux accéder à
la collection TableDefs d'une base externe, tu as accès aux champs donc
à l'info que tu cherches.

Message du vendredi 13/07/2007

Bonjour, voila une bonne semaine que je furête dans les différents sites
(tous excellents), mais ... je ne trouve pas la solution.
J'ai besoin de récupérer le nom d'une table soit dans la BdD active soit
dans une BdD distante, je m'adapterai.
J'aurai aussi besoin de récupérer aussi le nom d'un champ.
En fait je ne cherche pas à lister les tables et les champs, j'ai essayé ça
marche mais cela n'est pas mon objectif.
Pour l'instant j'arrive à récupérer le nom d'une BdD par
Un formulaire, une zone de texte, qui va chercher la fonction adéquat
Private Sub Texte78_Click()
nombdd = OuvrirUnFichier(Me.hwnd, "Parcourir", 1, , "")
Me.Texte78.Value = nombdd
End Sub
...
Public Function OuvrirUnFichier(Handle As Long, Titre As String,
TypeRetour As Byte, Optional TitreFiltre As String, Optional
TypeFichier As String, Optional RepParDefaut As String) As String
...
Je voudrais faire la même chose pour les tables de cette BdD, puis après
avoir sélectionné ma table lister les champs de cette table, pour pouvoir
appliquer un traitement qui fonctionne déjà.
Pour mémoire je suis passé par une création d'une table temporaire pour
récupérer la liste des table
...
Private Sub cherch_tab_Click()
resul = ExistTable("tab_BdD")
If resul = True Then
'Exit Sub
'MonRecordSet.Close
tablbdd = "tab_BdD"
DoCmd.RunSQL "drop table [" & tablbdd & "];"
End If
DoCmd.SetWarnings False
tablbdd = "tab_BdD"
DoCmd.RunSQL "SELECT msysobjects.Name INTO " & tablbdd & " FROM msysobjects
WHERE (((msysobjects.Name) Not Like ""MSys*"") AND ((msysobjects.Name) Not
Like ""tab_BdD"") AND ((msysobjects.Name) Not Like ""~*"") AND
((msysobjects.Type) In (1,6)));"
newcol1 = "Nom"
DoCmd.RunSQL "ALTER TABLE " & tablbdd & " ADD COLUMN " & newcol1 & " TEXT"
DoCmd.RunSQL "UPDATE " & tablbdd & " SET " & tablbdd & "." & newcol1 & " =
" & tablbdd & ".name;"
DoCmd.SetWarnings True
End Sub
...
C'est un peu long mais j'essaye d'être précis
Si vous n'êtes pas toutes et tous parti(e)s en vacances ...
Merci
Denis


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info








Avatar
Thierry (ze Titi)
Je ne veux pas de ta mort sur la conscience, j'explicite donc un peu.

Si j'ai bien compris, tu sais récupérer le chemin de la base distante.
Pour récupérer la liste des tables de ladite base, tu peux mettre, en
source contrôle d'une liste déroulante le résultat de la première
fonction.
taListeDéroulanteTables.RowSource = listeTables(cheminDeLaBase)
Cette ligne est à placer dans le code d'un bouton (par exemple).

Si tu veux récupérer la liste des champs d'une table sélectionnée dans
la liste déroulante précédemment alimentée, tu as juste à placer une
seconde liste déroulante. Dans l'évènement "Sur clic" de la liste
précédente, tu places:

taListeDéroulanteChamps.RowSource = ListerChampsTable(cheminDeLaBase,
taListeDéroulanteTables.Value)


En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Fatigue Intellectuelle ou abscence de neurone compatible ? mais je bloque, je
ne sais pas comment utiliser la (les) fonctions, je suis infoutu de passer
les paramètres.
Il ne me reste plus que le gaz ou sauter de mon balcon de rez de chaussée !
Denis


Hello denis le breton !

J'ai parlé d'utilisation du code, une simple adaptation suffit pour
répondre à ton besoin:

Public Function ListeTables(strBase As String) As String
Dim db As Database
Set db = OpenDatabase(strBase)
ListeTables=""
For Each tdf In db.TableDefs
listeTables=listeTables & tdf.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des tables séparées par des ";"

Public Function ListerChampsTable(strBase As String, _
strTable As String) As String
Dim db As Database, fld As Field
ListeChampsTable=""
Set db = OpenDatabase(strBase)
For Each fld In db.TableDefs(strTable).Fields
ListerChampsTable=ListerChampsTable & fld.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des champs de la table en paramètre pour la
base en paramètre.

En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Pas tout à fait car ce code nécessite que je connaisse la table (son nom),
or moi je cherche à lister le nom des tables d'une BDD, (et de récupérer
par sélection le nom de l'une d'elles)
Suis je plus clair ?
Merci


Salut denis !

Il me semble qu'en utilisant le code présent ici
http://access.fr.free.fr/articles.php?lng=fr&pgD
tu devrais pouvoir t'en sortir. A partir du moment où tu peux accéder à
la collection TableDefs d'une base externe, tu as accès aux champs donc
à l'info que tu cherches.

Message du vendredi 13/07/2007

Bonjour, voila une bonne semaine que je furête dans les différents sites
(tous excellents), mais ... je ne trouve pas la solution.
J'ai besoin de récupérer le nom d'une table soit dans la BdD active soit
dans une BdD distante, je m'adapterai.
J'aurai aussi besoin de récupérer aussi le nom d'un champ.
En fait je ne cherche pas à lister les tables et les champs, j'ai essayé
ça marche mais cela n'est pas mon objectif.
Pour l'instant j'arrive à récupérer le nom d'une BdD par
Un formulaire, une zone de texte, qui va chercher la fonction adéquat
Private Sub Texte78_Click()
nombdd = OuvrirUnFichier(Me.hwnd, "Parcourir", 1, , "")
Me.Texte78.Value = nombdd
End Sub
...
Public Function OuvrirUnFichier(Handle As Long, Titre As String,
TypeRetour As Byte, Optional TitreFiltre As String, Optional
TypeFichier As String, Optional RepParDefaut As String) As String
...
Je voudrais faire la même chose pour les tables de cette BdD, puis après
avoir sélectionné ma table lister les champs de cette table, pour pouvoir
appliquer un traitement qui fonctionne déjà.
Pour mémoire je suis passé par une création d'une table temporaire pour
récupérer la liste des table
...
Private Sub cherch_tab_Click()
resul = ExistTable("tab_BdD")
If resul = True Then
'Exit Sub
'MonRecordSet.Close
tablbdd = "tab_BdD"
DoCmd.RunSQL "drop table [" & tablbdd & "];"
End If
DoCmd.SetWarnings False
tablbdd = "tab_BdD"
DoCmd.RunSQL "SELECT msysobjects.Name INTO " & tablbdd & " FROM
msysobjects WHERE (((msysobjects.Name) Not Like ""MSys*"") AND
((msysobjects.Name) Not Like ""tab_BdD"") AND ((msysobjects.Name) Not
Like ""~*"") AND ((msysobjects.Type) In (1,6)));"
newcol1 = "Nom"
DoCmd.RunSQL "ALTER TABLE " & tablbdd & " ADD COLUMN " & newcol1 & "
TEXT" DoCmd.RunSQL "UPDATE " & tablbdd & " SET " & tablbdd & "." &
newcol1 & " = " & tablbdd & ".name;"
DoCmd.SetWarnings True
End Sub
...
C'est un peu long mais j'essaye d'être précis
Si vous n'êtes pas toutes et tous parti(e)s en vacances ...
Merci
Denis


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





Avatar
denis le breton
Thierry je suis encore en vie mais cela ne tient quà un fil (de discussion)
cela tourne aussi autour de mon incomphréhension caractérielle
j'ai aussi un test sur l'existence d'un champ
...
Function ExisteChamp(NomTable As String, NomChamp As String) As Boolean
On Error GoTo err:
Dim MCat As New ADOX.Catalog
Dim MTable As ADOX.Table
Dim MField As ADOX.Column
Set MCat.ActiveConnection = CurrentProject.Connection
Set MTable = MCat.Tables(NomTable)
Set MField = MTable.Columns(NomChamp)
ExisteChamp = True
err:
Set MCat = Nothing
Set MTable = Nothing
Set MField = Nothing
End Function
...
' puis je lance le test
Sub test_existe_chp()
'étape 1 OK
' nom_table,nom_chp
If ExisteChamp("MN322B2", "Cde") = True Then
Else
MsgBox "PB le chp n'existe pas"
End If
'étape 2 génère erreur Type d'argument ByRef incompatble
nombdd = Form_Menu.Nom_tab.Value
MsgBox nombdd
If ExisteChamp(nombdd, "Cde") = True Then
Else
MsgBox "PB le chp n'existe pas"
End If
End Sub
...
l'étape 2 bloque or j'essaie de passer en paramètre le nom de de la table
issu d'un textbox
(Je vais tenter le saut à l'élastique mais comme je n'ai pas d'élastique sur
mon bureau je essayer avec un trombone, cela marchera mieux qu'avec les
fonctions !)
a moins que je finisse par comprendre !
Denis





Je ne veux pas de ta mort sur la conscience, j'explicite donc un peu.

Si j'ai bien compris, tu sais récupérer le chemin de la base distante.
Pour récupérer la liste des tables de ladite base, tu peux mettre, en
source contrôle d'une liste déroulante le résultat de la première
fonction.
taListeDéroulanteTables.RowSource = listeTables(cheminDeLaBase)
Cette ligne est à placer dans le code d'un bouton (par exemple).

Si tu veux récupérer la liste des champs d'une table sélectionnée dans
la liste déroulante précédemment alimentée, tu as juste à placer une
seconde liste déroulante. Dans l'évènement "Sur clic" de la liste
précédente, tu places:

taListeDéroulanteChamps.RowSource = ListerChampsTable(cheminDeLaBase,
taListeDéroulanteTables.Value)


En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Fatigue Intellectuelle ou abscence de neurone compatible ? mais je bloque, je
ne sais pas comment utiliser la (les) fonctions, je suis infoutu de passer
les paramètres.
Il ne me reste plus que le gaz ou sauter de mon balcon de rez de chaussée !
Denis


Hello denis le breton !

J'ai parlé d'utilisation du code, une simple adaptation suffit pour
répondre à ton besoin:

Public Function ListeTables(strBase As String) As String
Dim db As Database
Set db = OpenDatabase(strBase)
ListeTables=""
For Each tdf In db.TableDefs
listeTables=listeTables & tdf.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des tables séparées par des ";"

Public Function ListerChampsTable(strBase As String, _
strTable As String) As String
Dim db As Database, fld As Field
ListeChampsTable=""
Set db = OpenDatabase(strBase)
For Each fld In db.TableDefs(strTable).Fields
ListerChampsTable=ListerChampsTable & fld.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des champs de la table en paramètre pour la
base en paramètre.

En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Pas tout à fait car ce code nécessite que je connaisse la table (son nom),
or moi je cherche à lister le nom des tables d'une BDD, (et de récupérer
par sélection le nom de l'une d'elles)
Suis je plus clair ?
Merci


Salut denis !

Il me semble qu'en utilisant le code présent ici
http://access.fr.free.fr/articles.php?lng=fr&pgD
tu devrais pouvoir t'en sortir. A partir du moment où tu peux accéder à
la collection TableDefs d'une base externe, tu as accès aux champs donc
à l'info que tu cherches.

Message du vendredi 13/07/2007

Bonjour, voila une bonne semaine que je furête dans les différents sites
(tous excellents), mais ... je ne trouve pas la solution.
J'ai besoin de récupérer le nom d'une table soit dans la BdD active soit
dans une BdD distante, je m'adapterai.
J'aurai aussi besoin de récupérer aussi le nom d'un champ.
En fait je ne cherche pas à lister les tables et les champs, j'ai essayé
ça marche mais cela n'est pas mon objectif.
Pour l'instant j'arrive à récupérer le nom d'une BdD par
Un formulaire, une zone de texte, qui va chercher la fonction adéquat
Private Sub Texte78_Click()
nombdd = OuvrirUnFichier(Me.hwnd, "Parcourir", 1, , "")
Me.Texte78.Value = nombdd
End Sub
...
Public Function OuvrirUnFichier(Handle As Long, Titre As String,
TypeRetour As Byte, Optional TitreFiltre As String, Optional
TypeFichier As String, Optional RepParDefaut As String) As String
...
Je voudrais faire la même chose pour les tables de cette BdD, puis après
avoir sélectionné ma table lister les champs de cette table, pour pouvoir
appliquer un traitement qui fonctionne déjà.
Pour mémoire je suis passé par une création d'une table temporaire pour
récupérer la liste des table
...
Private Sub cherch_tab_Click()
resul = ExistTable("tab_BdD")
If resul = True Then
'Exit Sub
'MonRecordSet.Close
tablbdd = "tab_BdD"
DoCmd.RunSQL "drop table [" & tablbdd & "];"
End If
DoCmd.SetWarnings False
tablbdd = "tab_BdD"
DoCmd.RunSQL "SELECT msysobjects.Name INTO " & tablbdd & " FROM
msysobjects WHERE (((msysobjects.Name) Not Like ""MSys*"") AND
((msysobjects.Name) Not Like ""tab_BdD"") AND ((msysobjects.Name) Not
Like ""~*"") AND ((msysobjects.Type) In (1,6)));"
newcol1 = "Nom"
DoCmd.RunSQL "ALTER TABLE " & tablbdd & " ADD COLUMN " & newcol1 & "
TEXT" DoCmd.RunSQL "UPDATE " & tablbdd & " SET " & tablbdd & "." &
newcol1 & " = " & tablbdd & ".name;"
DoCmd.SetWarnings True
End Sub
...
C'est un peu long mais j'essaye d'être précis
Si vous n'êtes pas toutes et tous parti(e)s en vacances ...
Merci
Denis


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info










Avatar
denis le breton
Pour le dernier Problème j'ai rajouté un byval et c'est mieux
Function ExisteChamp(ByVal NomTable As String, NomChamp As String) As Boolean
Je lache le trombone et je coulisse !
Denis


Thierry je suis encore en vie mais cela ne tient quà un fil (de discussion)
cela tourne aussi autour de mon incomphréhension caractérielle
j'ai aussi un test sur l'existence d'un champ
...
Function ExisteChamp(NomTable As String, NomChamp As String) As Boolean
On Error GoTo err:
Dim MCat As New ADOX.Catalog
Dim MTable As ADOX.Table
Dim MField As ADOX.Column
Set MCat.ActiveConnection = CurrentProject.Connection
Set MTable = MCat.Tables(NomTable)
Set MField = MTable.Columns(NomChamp)
ExisteChamp = True
err:
Set MCat = Nothing
Set MTable = Nothing
Set MField = Nothing
End Function
...
' puis je lance le test
Sub test_existe_chp()
'étape 1 OK
' nom_table,nom_chp
If ExisteChamp("MN322B2", "Cde") = True Then
Else
MsgBox "PB le chp n'existe pas"
End If
'étape 2 génère erreur Type d'argument ByRef incompatble
nombdd = Form_Menu.Nom_tab.Value
MsgBox nombdd
If ExisteChamp(nombdd, "Cde") = True Then
Else
MsgBox "PB le chp n'existe pas"
End If
End Sub
...
l'étape 2 bloque or j'essaie de passer en paramètre le nom de de la table
issu d'un textbox
(Je vais tenter le saut à l'élastique mais comme je n'ai pas d'élastique sur
mon bureau je essayer avec un trombone, cela marchera mieux qu'avec les
fonctions !)
a moins que je finisse par comprendre !
Denis





Je ne veux pas de ta mort sur la conscience, j'explicite donc un peu.

Si j'ai bien compris, tu sais récupérer le chemin de la base distante.
Pour récupérer la liste des tables de ladite base, tu peux mettre, en
source contrôle d'une liste déroulante le résultat de la première
fonction.
taListeDéroulanteTables.RowSource = listeTables(cheminDeLaBase)
Cette ligne est à placer dans le code d'un bouton (par exemple).

Si tu veux récupérer la liste des champs d'une table sélectionnée dans
la liste déroulante précédemment alimentée, tu as juste à placer une
seconde liste déroulante. Dans l'évènement "Sur clic" de la liste
précédente, tu places:

taListeDéroulanteChamps.RowSource = ListerChampsTable(cheminDeLaBase,
taListeDéroulanteTables.Value)


En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Fatigue Intellectuelle ou abscence de neurone compatible ? mais je bloque, je
ne sais pas comment utiliser la (les) fonctions, je suis infoutu de passer
les paramètres.
Il ne me reste plus que le gaz ou sauter de mon balcon de rez de chaussée !
Denis


Hello denis le breton !

J'ai parlé d'utilisation du code, une simple adaptation suffit pour
répondre à ton besoin:

Public Function ListeTables(strBase As String) As String
Dim db As Database
Set db = OpenDatabase(strBase)
ListeTables=""
For Each tdf In db.TableDefs
listeTables=listeTables & tdf.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des tables séparées par des ";"

Public Function ListerChampsTable(strBase As String, _
strTable As String) As String
Dim db As Database, fld As Field
ListeChampsTable=""
Set db = OpenDatabase(strBase)
For Each fld In db.TableDefs(strTable).Fields
ListerChampsTable=ListerChampsTable & fld.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des champs de la table en paramètre pour la
base en paramètre.

En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Pas tout à fait car ce code nécessite que je connaisse la table (son nom),
or moi je cherche à lister le nom des tables d'une BDD, (et de récupérer
par sélection le nom de l'une d'elles)
Suis je plus clair ?
Merci


Salut denis !

Il me semble qu'en utilisant le code présent ici
http://access.fr.free.fr/articles.php?lng=fr&pgD
tu devrais pouvoir t'en sortir. A partir du moment où tu peux accéder à
la collection TableDefs d'une base externe, tu as accès aux champs donc
à l'info que tu cherches.

Message du vendredi 13/07/2007

Bonjour, voila une bonne semaine que je furête dans les différents sites
(tous excellents), mais ... je ne trouve pas la solution.
J'ai besoin de récupérer le nom d'une table soit dans la BdD active soit
dans une BdD distante, je m'adapterai.
J'aurai aussi besoin de récupérer aussi le nom d'un champ.
En fait je ne cherche pas à lister les tables et les champs, j'ai essayé
ça marche mais cela n'est pas mon objectif.
Pour l'instant j'arrive à récupérer le nom d'une BdD par
Un formulaire, une zone de texte, qui va chercher la fonction adéquat
Private Sub Texte78_Click()
nombdd = OuvrirUnFichier(Me.hwnd, "Parcourir", 1, , "")
Me.Texte78.Value = nombdd
End Sub
...
Public Function OuvrirUnFichier(Handle As Long, Titre As String,
TypeRetour As Byte, Optional TitreFiltre As String, Optional
TypeFichier As String, Optional RepParDefaut As String) As String
...
Je voudrais faire la même chose pour les tables de cette BdD, puis après
avoir sélectionné ma table lister les champs de cette table, pour pouvoir
appliquer un traitement qui fonctionne déjà.
Pour mémoire je suis passé par une création d'une table temporaire pour
récupérer la liste des table
...
Private Sub cherch_tab_Click()
resul = ExistTable("tab_BdD")
If resul = True Then
'Exit Sub
'MonRecordSet.Close
tablbdd = "tab_BdD"
DoCmd.RunSQL "drop table [" & tablbdd & "];"
End If
DoCmd.SetWarnings False
tablbdd = "tab_BdD"
DoCmd.RunSQL "SELECT msysobjects.Name INTO " & tablbdd & " FROM
msysobjects WHERE (((msysobjects.Name) Not Like ""MSys*"") AND
((msysobjects.Name) Not Like ""tab_BdD"") AND ((msysobjects.Name) Not
Like ""~*"") AND ((msysobjects.Type) In (1,6)));"
newcol1 = "Nom"
DoCmd.RunSQL "ALTER TABLE " & tablbdd & " ADD COLUMN " & newcol1 & "
TEXT" DoCmd.RunSQL "UPDATE " & tablbdd & " SET " & tablbdd & "." &
newcol1 & " = " & tablbdd & ".name;"
DoCmd.SetWarnings True
End Sub
...
C'est un peu long mais j'essaye d'être précis
Si vous n'êtes pas toutes et tous parti(e)s en vacances ...
Merci
Denis


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info












Avatar
Thierry (ze Titi)
J'ai l'impression que tu te compliques la vie avec tout ça. D'un côté, je te propose du DAO, de l'autre tu utilises ADO, ça fait beaucoup de mélanges, ça ne facilite ni la compréhension ni la maintenance.

A partir du moment où tu récupères la liste des champs, tu es capable de tester la présence d'un seul. Par exemple:

Public Function ExisteChampTable(strBase As String, strTable As String, strChamp As String) As Boolean
Dim db As Database, fld As Field
ExisteChampTableúlse
ListeChampsTable=""
Set db = OpenDatabase(strBase)
For Each fld In db.TableDefs(strTable).Fields
If fld.Name=strChamp Then ExisteChampTable=True:Exit For
Next
db.Close: Set db = Nothing
End Function

Tu remarqueras que la structure de la fonction est globalement la même que celle qui te ramène la liste des champs...

En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde tâche de taper sur ton clavier :
Pour le dernier Problème j'ai rajouté un byval et c'est mieux
Function ExisteChamp(ByVal NomTable As String, NomChamp As String) As Boolean
Je lache le trombone et je coulisse !
Denis


Thierry je suis encore en vie mais cela ne tient quà un fil (de discussion)
cela tourne aussi autour de mon incomphréhension caractérielle
j'ai aussi un test sur l'existence d'un champ
...
Function ExisteChamp(NomTable As String, NomChamp As String) As Boolean
On Error GoTo err:
Dim MCat As New ADOX.Catalog
Dim MTable As ADOX.Table
Dim MField As ADOX.Column
Set MCat.ActiveConnection = CurrentProject.Connection
Set MTable = MCat.Tables(NomTable)
Set MField = MTable.Columns(NomChamp)
ExisteChamp = True
err:
Set MCat = Nothing
Set MTable = Nothing
Set MField = Nothing
End Function
...
' puis je lance le test
Sub test_existe_chp()
'étape 1 OK
' nom_table,nom_chp
If ExisteChamp("MN322B2", "Cde") = True Then
Else
MsgBox "PB le chp n'existe pas"
End If
'étape 2 génère erreur Type d'argument ByRef incompatble
nombdd = Form_Menu.Nom_tab.Value
MsgBox nombdd
If ExisteChamp(nombdd, "Cde") = True Then
Else
MsgBox "PB le chp n'existe pas"
End If
End Sub
...
l'étape 2 bloque or j'essaie de passer en paramètre le nom de de la table
issu d'un textbox
(Je vais tenter le saut à l'élastique mais comme je n'ai pas d'élastique sur
mon bureau je essayer avec un trombone, cela marchera mieux qu'avec les
fonctions !)
a moins que je finisse par comprendre !
Denis





Je ne veux pas de ta mort sur la conscience, j'explicite donc un peu.

Si j'ai bien compris, tu sais récupérer le chemin de la base distante.
Pour récupérer la liste des tables de ladite base, tu peux mettre, en
source contrôle d'une liste déroulante le résultat de la première
fonction.
taListeDéroulanteTables.RowSource = listeTables(cheminDeLaBase)
Cette ligne est à placer dans le code d'un bouton (par exemple).

Si tu veux récupérer la liste des champs d'une table sélectionnée dans
la liste déroulante précédemment alimentée, tu as juste à placer une
seconde liste déroulante. Dans l'évènement "Sur clic" de la liste
précédente, tu places:

taListeDéroulanteChamps.RowSource = ListerChampsTable(cheminDeLaBase,
taListeDéroulanteTables.Value)


En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Fatigue Intellectuelle ou abscence de neurone compatible ? mais je bloque,
je ne sais pas comment utiliser la (les) fonctions, je suis infoutu de
passer les paramètres.
Il ne me reste plus que le gaz ou sauter de mon balcon de rez de chaussée
! Denis


Hello denis le breton !

J'ai parlé d'utilisation du code, une simple adaptation suffit pour
répondre à ton besoin:

Public Function ListeTables(strBase As String) As String
Dim db As Database
Set db = OpenDatabase(strBase)
ListeTables=""
For Each tdf In db.TableDefs
listeTables=listeTables & tdf.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des tables séparées par des ";"

Public Function ListerChampsTable(strBase As String, _
strTable As String) As String
Dim db As Database, fld As Field
ListeChampsTable=""
Set db = OpenDatabase(strBase)
For Each fld In db.TableDefs(strTable).Fields
ListerChampsTable=ListerChampsTable & fld.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des champs de la table en paramètre pour la
base en paramètre.

En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Pas tout à fait car ce code nécessite que je connaisse la table (son
nom), or moi je cherche à lister le nom des tables d'une BDD, (et de
récupérer par sélection le nom de l'une d'elles)
Suis je plus clair ?
Merci


Salut denis !

Il me semble qu'en utilisant le code présent ici
http://access.fr.free.fr/articles.php?lng=fr&pgD
tu devrais pouvoir t'en sortir. A partir du moment où tu peux accéder à
la collection TableDefs d'une base externe, tu as accès aux champs donc
à l'info que tu cherches.

Message du vendredi 13/07/2007

Bonjour, voila une bonne semaine que je furête dans les différents
sites (tous excellents), mais ... je ne trouve pas la solution.
J'ai besoin de récupérer le nom d'une table soit dans la BdD active
soit dans une BdD distante, je m'adapterai.
J'aurai aussi besoin de récupérer aussi le nom d'un champ.
En fait je ne cherche pas à lister les tables et les champs, j'ai
essayé ça marche mais cela n'est pas mon objectif.
Pour l'instant j'arrive à récupérer le nom d'une BdD par
Un formulaire, une zone de texte, qui va chercher la fonction adéquat
Private Sub Texte78_Click()
nombdd = OuvrirUnFichier(Me.hwnd, "Parcourir", 1, , "")
Me.Texte78.Value = nombdd
End Sub
...
Public Function OuvrirUnFichier(Handle As Long, Titre As String,
TypeRetour As Byte, Optional TitreFiltre As String,
Optional TypeFichier As String, Optional RepParDefaut As String) As
String ...
Je voudrais faire la même chose pour les tables de cette BdD, puis
après avoir sélectionné ma table lister les champs de cette table,
pour pouvoir appliquer un traitement qui fonctionne déjà.
Pour mémoire je suis passé par une création d'une table temporaire
pour récupérer la liste des table
...
Private Sub cherch_tab_Click()
resul = ExistTable("tab_BdD")
If resul = True Then
'Exit Sub
'MonRecordSet.Close
tablbdd = "tab_BdD"
DoCmd.RunSQL "drop table [" & tablbdd & "];"
End If
DoCmd.SetWarnings False
tablbdd = "tab_BdD"
DoCmd.RunSQL "SELECT msysobjects.Name INTO " & tablbdd & " FROM
msysobjects WHERE (((msysobjects.Name) Not Like ""MSys*"") AND
((msysobjects.Name) Not Like ""tab_BdD"") AND ((msysobjects.Name) Not
Like ""~*"") AND ((msysobjects.Type) In (1,6)));"
newcol1 = "Nom"
DoCmd.RunSQL "ALTER TABLE " & tablbdd & " ADD COLUMN " & newcol1 & "
TEXT" DoCmd.RunSQL "UPDATE " & tablbdd & " SET " & tablbdd & "." &
newcol1 & " = " & tablbdd & ".name;"
DoCmd.SetWarnings True
End Sub
...
C'est un peu long mais j'essaye d'être précis
Si vous n'êtes pas toutes et tous parti(e)s en vacances ...
Merci
Denis


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info







--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info








Avatar
denis le breton
Ne te fache point !
DAO et ADO sont pour moi une source d'inspiration mais aussi
d'interrogations profondes. Je suis d'une filière qui a commencé avec le VBA
d'Excel, qui est passé sur les requête puis le vba sur ACCESS, et qui doit
encore progresser pour habiller ce qui tourne bien en simple VBA, de là
besoin de controle de vérification qui me complique la vie, alors de temps en
temps je me marche sur les pieds, je me mélange les pinceaux et patatra je
fais appel aux bonnes volontés dont je te remercie amplement d'ailleurs.
Laisse moi un peu de temps et je reviens sur le fil pour te tenir informé du
problème insurmontable auquel je serai confronté (dans pas longtemps) en
parrallèle je me documente sur les syntaxes, les langages, les codes (et j'ai
un mal de tête ...)
Encore merci, mais cela ne fait que commencer
Denis


J'ai l'impression que tu te compliques la vie avec tout ça. D'un côté, je te propose du DAO, de l'autre tu utilises ADO, ça fait beaucoup de mélanges, ça ne facilite ni la compréhension ni la maintenance.

A partir du moment où tu récupères la liste des champs, tu es capable de tester la présence d'un seul. Par exemple:

Public Function ExisteChampTable(strBase As String, strTable As String, strChamp As String) As Boolean
Dim db As Database, fld As Field
ExisteChampTableúlse
ListeChampsTable=""
Set db = OpenDatabase(strBase)
For Each fld In db.TableDefs(strTable).Fields
If fld.Name=strChamp Then ExisteChampTable=True:Exit For
Next
db.Close: Set db = Nothing
End Function

Tu remarqueras que la structure de la fonction est globalement la même que celle qui te ramène la liste des champs...

En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde tâche de taper sur ton clavier :
Pour le dernier Problème j'ai rajouté un byval et c'est mieux
Function ExisteChamp(ByVal NomTable As String, NomChamp As String) As Boolean
Je lache le trombone et je coulisse !
Denis


Thierry je suis encore en vie mais cela ne tient quà un fil (de discussion)
cela tourne aussi autour de mon incomphréhension caractérielle
j'ai aussi un test sur l'existence d'un champ
...
Function ExisteChamp(NomTable As String, NomChamp As String) As Boolean
On Error GoTo err:
Dim MCat As New ADOX.Catalog
Dim MTable As ADOX.Table
Dim MField As ADOX.Column
Set MCat.ActiveConnection = CurrentProject.Connection
Set MTable = MCat.Tables(NomTable)
Set MField = MTable.Columns(NomChamp)
ExisteChamp = True
err:
Set MCat = Nothing
Set MTable = Nothing
Set MField = Nothing
End Function
...
' puis je lance le test
Sub test_existe_chp()
'étape 1 OK
' nom_table,nom_chp
If ExisteChamp("MN322B2", "Cde") = True Then
Else
MsgBox "PB le chp n'existe pas"
End If
'étape 2 génère erreur Type d'argument ByRef incompatble
nombdd = Form_Menu.Nom_tab.Value
MsgBox nombdd
If ExisteChamp(nombdd, "Cde") = True Then
Else
MsgBox "PB le chp n'existe pas"
End If
End Sub
...
l'étape 2 bloque or j'essaie de passer en paramètre le nom de de la table
issu d'un textbox
(Je vais tenter le saut à l'élastique mais comme je n'ai pas d'élastique sur
mon bureau je essayer avec un trombone, cela marchera mieux qu'avec les
fonctions !)
a moins que je finisse par comprendre !
Denis





Je ne veux pas de ta mort sur la conscience, j'explicite donc un peu.

Si j'ai bien compris, tu sais récupérer le chemin de la base distante.
Pour récupérer la liste des tables de ladite base, tu peux mettre, en
source contrôle d'une liste déroulante le résultat de la première
fonction.
taListeDéroulanteTables.RowSource = listeTables(cheminDeLaBase)
Cette ligne est à placer dans le code d'un bouton (par exemple).

Si tu veux récupérer la liste des champs d'une table sélectionnée dans
la liste déroulante précédemment alimentée, tu as juste à placer une
seconde liste déroulante. Dans l'évènement "Sur clic" de la liste
précédente, tu places:

taListeDéroulanteChamps.RowSource = ListerChampsTable(cheminDeLaBase,
taListeDéroulanteTables.Value)


En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Fatigue Intellectuelle ou abscence de neurone compatible ? mais je bloque,
je ne sais pas comment utiliser la (les) fonctions, je suis infoutu de
passer les paramètres.
Il ne me reste plus que le gaz ou sauter de mon balcon de rez de chaussée
! Denis


Hello denis le breton !

J'ai parlé d'utilisation du code, une simple adaptation suffit pour
répondre à ton besoin:

Public Function ListeTables(strBase As String) As String
Dim db As Database
Set db = OpenDatabase(strBase)
ListeTables=""
For Each tdf In db.TableDefs
listeTables=listeTables & tdf.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des tables séparées par des ";"

Public Function ListerChampsTable(strBase As String, _
strTable As String) As String
Dim db As Database, fld As Field
ListeChampsTable=""
Set db = OpenDatabase(strBase)
For Each fld In db.TableDefs(strTable).Fields
ListerChampsTable=ListerChampsTable & fld.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des champs de la table en paramètre pour la
base en paramètre.

En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Pas tout à fait car ce code nécessite que je connaisse la table (son
nom), or moi je cherche à lister le nom des tables d'une BDD, (et de
récupérer par sélection le nom de l'une d'elles)
Suis je plus clair ?
Merci


Salut denis !

Il me semble qu'en utilisant le code présent ici
http://access.fr.free.fr/articles.php?lng=fr&pgD
tu devrais pouvoir t'en sortir. A partir du moment où tu peux accéder à
la collection TableDefs d'une base externe, tu as accès aux champs donc
à l'info que tu cherches.

Message du vendredi 13/07/2007

Bonjour, voila une bonne semaine que je furête dans les différents
sites (tous excellents), mais ... je ne trouve pas la solution.
J'ai besoin de récupérer le nom d'une table soit dans la BdD active
soit dans une BdD distante, je m'adapterai.
J'aurai aussi besoin de récupérer aussi le nom d'un champ.
En fait je ne cherche pas à lister les tables et les champs, j'ai
essayé ça marche mais cela n'est pas mon objectif.
Pour l'instant j'arrive à récupérer le nom d'une BdD par
Un formulaire, une zone de texte, qui va chercher la fonction adéquat
Private Sub Texte78_Click()
nombdd = OuvrirUnFichier(Me.hwnd, "Parcourir", 1, , "")
Me.Texte78.Value = nombdd
End Sub
...
Public Function OuvrirUnFichier(Handle As Long, Titre As String,
TypeRetour As Byte, Optional TitreFiltre As String,
Optional TypeFichier As String, Optional RepParDefaut As String) As
String ...
Je voudrais faire la même chose pour les tables de cette BdD, puis
après avoir sélectionné ma table lister les champs de cette table,
pour pouvoir appliquer un traitement qui fonctionne déjà.
Pour mémoire je suis passé par une création d'une table temporaire
pour récupérer la liste des table
...
Private Sub cherch_tab_Click()
resul = ExistTable("tab_BdD")
If resul = True Then
'Exit Sub
'MonRecordSet.Close
tablbdd = "tab_BdD"
DoCmd.RunSQL "drop table [" & tablbdd & "];"
End If
DoCmd.SetWarnings False
tablbdd = "tab_BdD"
DoCmd.RunSQL "SELECT msysobjects.Name INTO " & tablbdd & " FROM
msysobjects WHERE (((msysobjects.Name) Not Like ""MSys*"") AND
((msysobjects.Name) Not Like ""tab_BdD"") AND ((msysobjects.Name) Not
Like ""~*"") AND ((msysobjects.Type) In (1,6)));"
newcol1 = "Nom"
DoCmd.RunSQL "ALTER TABLE " & tablbdd & " ADD COLUMN " & newcol1 & "
TEXT" DoCmd.RunSQL "UPDATE " & tablbdd & " SET " & tablbdd & "." &
newcol1 & " = " & tablbdd & ".name;"
DoCmd.SetWarnings True
End Sub
...
C'est un peu long mais j'essaye d'être précis
Si vous n'êtes pas toutes et tous parti(e)s en vacances ...
Merci
Denis


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info







--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info













Avatar
Thierry (ze Titi)
Ne t'inquiète pas, je ne me fâche pas. J'apprends en même temps que
toi. Tout ce qui concerne ADO reste flou pour moi pour l'instant. Je
commence à m'y mettre mais ça surprend souvent. Bref, bon code à toi et
n'hésite pas à revenir !

Dans ton message
Ne te fache point !
DAO et ADO sont pour moi une source d'inspiration mais aussi
d'interrogations profondes. Je suis d'une filière qui a commencé avec le VBA
d'Excel, qui est passé sur les requête puis le vba sur ACCESS, et qui doit
encore progresser pour habiller ce qui tourne bien en simple VBA, de là
besoin de controle de vérification qui me complique la vie, alors de temps en
temps je me marche sur les pieds, je me mélange les pinceaux et patatra je
fais appel aux bonnes volontés dont je te remercie amplement d'ailleurs.
Laisse moi un peu de temps et je reviens sur le fil pour te tenir informé du
problème insurmontable auquel je serai confronté (dans pas longtemps) en
parrallèle je me documente sur les syntaxes, les langages, les codes (et j'ai
un mal de tête ...)
Encore merci, mais cela ne fait que commencer
Denis


J'ai l'impression que tu te compliques la vie avec tout ça. D'un côté, je te
propose du DAO, de l'autre tu utilises ADO, ça fait beaucoup de mélanges, ça
ne facilite ni la compréhension ni la maintenance.

A partir du moment où tu récupères la liste des champs, tu es capable de
tester la présence d'un seul. Par exemple:

Public Function ExisteChampTable(strBase As String, strTable As String,
strChamp As String) As Boolean Dim db As Database, fld As Field
ExisteChampTableúlse
ListeChampsTable=""
Set db = OpenDatabase(strBase)
For Each fld In db.TableDefs(strTable).Fields
If fld.Name=strChamp Then ExisteChampTable=True:Exit For
Next
db.Close: Set db = Nothing
End Function

Tu remarqueras que la structure de la fonction est globalement la même que
celle qui te ramène la liste des champs...

En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde tâche
de taper sur ton clavier :
Pour le dernier Problème j'ai rajouté un byval et c'est mieux
Function ExisteChamp(ByVal NomTable As String, NomChamp As String) As
Boolean Je lache le trombone et je coulisse !
Denis


Thierry je suis encore en vie mais cela ne tient quà un fil (de
discussion) cela tourne aussi autour de mon incomphréhension caractérielle
j'ai aussi un test sur l'existence d'un champ
...
Function ExisteChamp(NomTable As String, NomChamp As String) As Boolean
On Error GoTo err:
Dim MCat As New ADOX.Catalog
Dim MTable As ADOX.Table
Dim MField As ADOX.Column
Set MCat.ActiveConnection = CurrentProject.Connection
Set MTable = MCat.Tables(NomTable)
Set MField = MTable.Columns(NomChamp)
ExisteChamp = True
err:
Set MCat = Nothing
Set MTable = Nothing
Set MField = Nothing
End Function
...
' puis je lance le test
Sub test_existe_chp()
'étape 1 OK
' nom_table,nom_chp
If ExisteChamp("MN322B2", "Cde") = True Then
Else
MsgBox "PB le chp n'existe pas"
End If
'étape 2 génère erreur Type d'argument ByRef incompatble
nombdd = Form_Menu.Nom_tab.Value
MsgBox nombdd
If ExisteChamp(nombdd, "Cde") = True Then
Else
MsgBox "PB le chp n'existe pas"
End If
End Sub
...
l'étape 2 bloque or j'essaie de passer en paramètre le nom de de la table
issu d'un textbox
(Je vais tenter le saut à l'élastique mais comme je n'ai pas d'élastique
sur mon bureau je essayer avec un trombone, cela marchera mieux qu'avec
les fonctions !)
a moins que je finisse par comprendre !
Denis





Je ne veux pas de ta mort sur la conscience, j'explicite donc un peu.

Si j'ai bien compris, tu sais récupérer le chemin de la base distante.
Pour récupérer la liste des tables de ladite base, tu peux mettre, en
source contrôle d'une liste déroulante le résultat de la première
fonction.
taListeDéroulanteTables.RowSource = listeTables(cheminDeLaBase)
Cette ligne est à placer dans le code d'un bouton (par exemple).

Si tu veux récupérer la liste des champs d'une table sélectionnée dans
la liste déroulante précédemment alimentée, tu as juste à placer une
seconde liste déroulante. Dans l'évènement "Sur clic" de la liste
précédente, tu places:

taListeDéroulanteChamps.RowSource = ListerChampsTable(cheminDeLaBase,
taListeDéroulanteTables.Value)


En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Fatigue Intellectuelle ou abscence de neurone compatible ? mais je
bloque, je ne sais pas comment utiliser la (les) fonctions, je suis
infoutu de passer les paramètres.
Il ne me reste plus que le gaz ou sauter de mon balcon de rez de
chaussée ! Denis


Hello denis le breton !

J'ai parlé d'utilisation du code, une simple adaptation suffit pour
répondre à ton besoin:

Public Function ListeTables(strBase As String) As String
Dim db As Database
Set db = OpenDatabase(strBase)
ListeTables=""
For Each tdf In db.TableDefs
listeTables=listeTables & tdf.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des tables séparées par des ";"

Public Function ListerChampsTable(strBase As String, _
strTable As String) As String
Dim db As Database, fld As Field
ListeChampsTable=""
Set db = OpenDatabase(strBase)
For Each fld In db.TableDefs(strTable).Fields
ListerChampsTable=ListerChampsTable & fld.Name & ";"
Next
db.Close: Set db = Nothing
End Function

Et tu récupères la liste des champs de la table en paramètre pour la
base en paramètre.

En ce jour mémorable du vendredi 13/07/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Pas tout à fait car ce code nécessite que je connaisse la table (son
nom), or moi je cherche à lister le nom des tables d'une BDD, (et de
récupérer par sélection le nom de l'une d'elles)
Suis je plus clair ?
Merci


Salut denis !

Il me semble qu'en utilisant le code présent ici
http://access.fr.free.fr/articles.php?lng=fr&pgD
tu devrais pouvoir t'en sortir. A partir du moment où tu peux accéder
à la collection TableDefs d'une base externe, tu as accès aux champs
donc à l'info que tu cherches.

Message du vendredi 13/07/2007

Bonjour, voila une bonne semaine que je furête dans les différents
sites (tous excellents), mais ... je ne trouve pas la solution.
J'ai besoin de récupérer le nom d'une table soit dans la BdD active
soit dans une BdD distante, je m'adapterai.
J'aurai aussi besoin de récupérer aussi le nom d'un champ.
En fait je ne cherche pas à lister les tables et les champs, j'ai
essayé ça marche mais cela n'est pas mon objectif.
Pour l'instant j'arrive à récupérer le nom d'une BdD par
Un formulaire, une zone de texte, qui va chercher la fonction
adéquat Private Sub Texte78_Click()
nombdd = OuvrirUnFichier(Me.hwnd, "Parcourir", 1, , "")
Me.Texte78.Value = nombdd
End Sub
...
Public Function OuvrirUnFichier(Handle As Long, Titre As String,
TypeRetour As Byte, Optional TitreFiltre As String,
Optional TypeFichier As String, Optional RepParDefaut As String)
As String ...
Je voudrais faire la même chose pour les tables de cette BdD, puis
après avoir sélectionné ma table lister les champs de cette table,
pour pouvoir appliquer un traitement qui fonctionne déjà.
Pour mémoire je suis passé par une création d'une table temporaire
pour récupérer la liste des table
...
Private Sub cherch_tab_Click()
resul = ExistTable("tab_BdD")
If resul = True Then
'Exit Sub
'MonRecordSet.Close
tablbdd = "tab_BdD"
DoCmd.RunSQL "drop table [" & tablbdd & "];"
End If
DoCmd.SetWarnings False
tablbdd = "tab_BdD"
DoCmd.RunSQL "SELECT msysobjects.Name INTO " & tablbdd & " FROM
msysobjects WHERE (((msysobjects.Name) Not Like ""MSys*"") AND
((msysobjects.Name) Not Like ""tab_BdD"") AND ((msysobjects.Name)
Not Like ""~*"") AND ((msysobjects.Type) In (1,6)));"
newcol1 = "Nom"
DoCmd.RunSQL "ALTER TABLE " & tablbdd & " ADD COLUMN " & newcol1 & "
TEXT" DoCmd.RunSQL "UPDATE " & tablbdd & " SET " & tablbdd & "." &
newcol1 & " = " & tablbdd & ".name;"
DoCmd.SetWarnings True
End Sub
...
C'est un peu long mais j'essaye d'être précis
Si vous n'êtes pas toutes et tous parti(e)s en vacances ...
Merci
Denis


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info







--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info










1 2