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

reuperer le nom de la colonne qui est défini comme clef primaire ADO(X)

8 réponses
Avatar
Emcy
Bonjours,

comment faire en ADO(X) pour récupérer le nom de la colonne qui est definie
comme clef primaire (pour une BDD Access) ?

8 réponses

Avatar
Michel Pierron
Bonsoir Emcy;
Par exemple:

Sub KeysList()
Const Chemin = "Ici chemin complet de la base .mdb"
Dim Conn As Object, Cat As Object
Set Conn = CreateObject("ADODB.Connection")
Set Cat = CreateObject("ADOX.Catalog")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Chemin
Set Cat.ActiveConnection = Conn
Dim tbl As Object, key As Object, Col As Object
Application.ScreenUpdating = False
Workbooks.Add
Cells(1, 1) = "TABLE"
Cells(1, 2) = "KEY"
Cells(1, 3) = "TYPE"
Rows("1:1").Font.Bold = True
Range("A2").Select
ActiveWindow.FreezePanes = True
Dim i&: i = 1
For Each tbl In Cat.Tables
If Left(tbl.Name, 4) <> "MSys" Then
For Each key In tbl.Keys
For Each Col In key.Columns
i = i + 1
Cells(i, 1) = tbl.Name
Cells(i, 2) = Col.Name
Cells(i, 3) = key.Name
Next
Next
End If
Next
Set Cat = Nothing
Conn.Close: Set Conn = Nothing
Cells.Columns.AutoFit
End Sub

MP

"Emcy" a écrit dans le message de news:
uA#
Bonjours,

comment faire en ADO(X) pour récupérer le nom de la colonne qui est
definie

comme clef primaire (pour une BDD Access) ?




Avatar
Emcy
merci ça à l'air de marcher

ta macro, récupère bien que le nom de la colonne de la clef primaire non ?
n'y a t-il pas un moyen plus directe d'avoir la clef primaire (sans avoir à
balayer tous les elements de Keys) ?

la collection Tables.Keys est toujours composée que d'un element (il ne peut
y avoir qu'une clef primaire par table, non ?) ?
la collection Tables.Keys.Coloumns est toujours composée que d'un element
(pour une clef primair, il ne peut y avoir qu'une colonne associée, non ?) ?


"Michel Pierron" a écrit dans le message de news:

Bonsoir Emcy;
Par exemple:

Sub KeysList()
Const Chemin = "Ici chemin complet de la base .mdb"
Dim Conn As Object, Cat As Object
Set Conn = CreateObject("ADODB.Connection")
Set Cat = CreateObject("ADOX.Catalog")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Chemin
Set Cat.ActiveConnection = Conn
Dim tbl As Object, key As Object, Col As Object
Application.ScreenUpdating = False
Workbooks.Add
Cells(1, 1) = "TABLE"
Cells(1, 2) = "KEY"
Cells(1, 3) = "TYPE"
Rows("1:1").Font.Bold = True
Range("A2").Select
ActiveWindow.FreezePanes = True
Dim i&: i = 1
For Each tbl In Cat.Tables
If Left(tbl.Name, 4) <> "MSys" Then
For Each key In tbl.Keys
For Each Col In key.Columns
i = i + 1
Cells(i, 1) = tbl.Name
Cells(i, 2) = Col.Name
Cells(i, 3) = key.Name
Next
Next
End If
Next
Set Cat = Nothing
Conn.Close: Set Conn = Nothing
Cells.Columns.AutoFit
End Sub

MP

"Emcy" a écrit dans le message de news:
uA#
Bonjours,

comment faire en ADO(X) pour récupérer le nom de la colonne qui est
definie

comme clef primaire (pour une BDD Access) ?








Avatar
Emcy
j'ai vu qu'il existe d'autre type de clef :
KeyForeign
KeyUnique
=> c'est quoi la différence avec une clef primaire ?


"Emcy" a écrit dans le message de news:

merci ça à l'air de marcher

ta macro, récupère bien que le nom de la colonne de la clef primaire non ?
n'y a t-il pas un moyen plus directe d'avoir la clef primaire (sans avoir
à balayer tous les elements de Keys) ?

la collection Tables.Keys est toujours composée que d'un element (il ne
peut y avoir qu'une clef primaire par table, non ?) ?
la collection Tables.Keys.Coloumns est toujours composée que d'un element
(pour une clef primair, il ne peut y avoir qu'une colonne associée, non ?)
?


"Michel Pierron" a écrit dans le message de news:

Bonsoir Emcy;
Par exemple:

Sub KeysList()
Const Chemin = "Ici chemin complet de la base .mdb"
Dim Conn As Object, Cat As Object
Set Conn = CreateObject("ADODB.Connection")
Set Cat = CreateObject("ADOX.Catalog")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Chemin
Set Cat.ActiveConnection = Conn
Dim tbl As Object, key As Object, Col As Object
Application.ScreenUpdating = False
Workbooks.Add
Cells(1, 1) = "TABLE"
Cells(1, 2) = "KEY"
Cells(1, 3) = "TYPE"
Rows("1:1").Font.Bold = True
Range("A2").Select
ActiveWindow.FreezePanes = True
Dim i&: i = 1
For Each tbl In Cat.Tables
If Left(tbl.Name, 4) <> "MSys" Then
For Each key In tbl.Keys
For Each Col In key.Columns
i = i + 1
Cells(i, 1) = tbl.Name
Cells(i, 2) = Col.Name
Cells(i, 3) = key.Name
Next
Next
End If
Next
Set Cat = Nothing
Conn.Close: Set Conn = Nothing
Cells.Columns.AutoFit
End Sub

MP

"Emcy" a écrit dans le message de news:
uA#
Bonjours,

comment faire en ADO(X) pour récupérer le nom de la colonne qui est
definie

comme clef primaire (pour une BDD Access) ?












Avatar
Michel Pierron
Bonjour Emcy;
Avec Adox, je ne pense pas; si tu ne veux pas balayer l'ensemble des clefs,
il faut balayer l'ensemble des index, ce qui revient au même:

Private Function KeyName$(FullPath$, Tbl$)
Dim Cat As Object, idx As Object
Set Cat = CreateObject("ADOX.Catalog")
Cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & FullPath
For Each idx In Cat.Tables(Tbl).Indexes
If idx.PrimaryKey Then
For i = 0 To idx.Columns.Count - 1
KeyName = idx.Columns(i).Name
Next
End If
Next
Set Cat = Nothing
End Function

Sub GetKeyName()
Const Chemin = "Ici chemein complet de la base .mdb"
MsgBox KeyName(Chemin, "Ici le nom de la table"), 64
End Sub

MP

"Emcy" a écrit dans le message de news:

merci ça à l'air de marcher

ta macro, récupère bien que le nom de la colonne de la clef primaire non ?
n'y a t-il pas un moyen plus directe d'avoir la clef primaire (sans avoir
à

balayer tous les elements de Keys) ?

la collection Tables.Keys est toujours composée que d'un element (il ne
peut

y avoir qu'une clef primaire par table, non ?) ?
la collection Tables.Keys.Coloumns est toujours composée que d'un element
(pour une clef primair, il ne peut y avoir qu'une colonne associée, non ?)
?



"Michel Pierron" a écrit dans le message de news:

Bonsoir Emcy;
Par exemple:

Sub KeysList()
Const Chemin = "Ici chemin complet de la base .mdb"
Dim Conn As Object, Cat As Object
Set Conn = CreateObject("ADODB.Connection")
Set Cat = CreateObject("ADOX.Catalog")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Chemin
Set Cat.ActiveConnection = Conn
Dim tbl As Object, key As Object, Col As Object
Application.ScreenUpdating = False
Workbooks.Add
Cells(1, 1) = "TABLE"
Cells(1, 2) = "KEY"
Cells(1, 3) = "TYPE"
Rows("1:1").Font.Bold = True
Range("A2").Select
ActiveWindow.FreezePanes = True
Dim i&: i = 1
For Each tbl In Cat.Tables
If Left(tbl.Name, 4) <> "MSys" Then
For Each key In tbl.Keys
For Each Col In key.Columns
i = i + 1
Cells(i, 1) = tbl.Name
Cells(i, 2) = Col.Name
Cells(i, 3) = key.Name
Next
Next
End If
Next
Set Cat = Nothing
Conn.Close: Set Conn = Nothing
Cells.Columns.AutoFit
End Sub

MP

"Emcy" a écrit dans le message de news:
uA#
Bonjours,

comment faire en ADO(X) pour récupérer le nom de la colonne qui est
definie

comme clef primaire (pour une BDD Access) ?












Avatar
Michel Pierron
Re Emcy;
Je ne suis pas spécialiste de la manipulation de table, mais je pense que
KeyForeign est utilisé pour désigner les clefs secondaires d'une table,
clefs qui peuvent être uniques ou non alors que la table ne peut avoir
qu'une seule clef primaire.

MP

"Emcy" a écrit dans le message de news:

j'ai vu qu'il existe d'autre type de clef :
KeyForeign
KeyUnique
=> c'est quoi la différence avec une clef primaire ?


"Emcy" a écrit dans le message de news:

merci ça à l'air de marcher

ta macro, récupère bien que le nom de la colonne de la clef primaire non
?


n'y a t-il pas un moyen plus directe d'avoir la clef primaire (sans
avoir


à balayer tous les elements de Keys) ?

la collection Tables.Keys est toujours composée que d'un element (il ne
peut y avoir qu'une clef primaire par table, non ?) ?
la collection Tables.Keys.Coloumns est toujours composée que d'un
element


(pour une clef primair, il ne peut y avoir qu'une colonne associée, non
?)


?


"Michel Pierron" a écrit dans le message de
news:



Bonsoir Emcy;
Par exemple:

Sub KeysList()
Const Chemin = "Ici chemin complet de la base .mdb"
Dim Conn As Object, Cat As Object
Set Conn = CreateObject("ADODB.Connection")
Set Cat = CreateObject("ADOX.Catalog")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Chemin
Set Cat.ActiveConnection = Conn
Dim tbl As Object, key As Object, Col As Object
Application.ScreenUpdating = False
Workbooks.Add
Cells(1, 1) = "TABLE"
Cells(1, 2) = "KEY"
Cells(1, 3) = "TYPE"
Rows("1:1").Font.Bold = True
Range("A2").Select
ActiveWindow.FreezePanes = True
Dim i&: i = 1
For Each tbl In Cat.Tables
If Left(tbl.Name, 4) <> "MSys" Then
For Each key In tbl.Keys
For Each Col In key.Columns
i = i + 1
Cells(i, 1) = tbl.Name
Cells(i, 2) = Col.Name
Cells(i, 3) = key.Name
Next
Next
End If
Next
Set Cat = Nothing
Conn.Close: Set Conn = Nothing
Cells.Columns.AutoFit
End Sub

MP

"Emcy" a écrit dans le message de news:
uA#
Bonjours,

comment faire en ADO(X) pour récupérer le nom de la colonne qui est
definie

comme clef primaire (pour une BDD Access) ?
















Avatar
Emcy
merci pour ton aide

J'ai trouvé la reponse pour la clef Foreign mais pas pour l'autre :
http://www.microsoft.com/FRANCE/MSDN/Technologies/technos/dataaccess/info/info.asp?mar=/FRANCE/MSDN/Technologies/technos/dataaccess/info/migration_DAO_ADO.html


"Michel Pierron" a écrit dans le message de news:

Re Emcy;
Je ne suis pas spécialiste de la manipulation de table, mais je pense que
KeyForeign est utilisé pour désigner les clefs secondaires d'une table,
clefs qui peuvent être uniques ou non alors que la table ne peut avoir
qu'une seule clef primaire.

MP

"Emcy" a écrit dans le message de news:

j'ai vu qu'il existe d'autre type de clef :
KeyForeign
KeyUnique
=> c'est quoi la différence avec une clef primaire ?


"Emcy" a écrit dans le message de news:

merci ça à l'air de marcher

ta macro, récupère bien que le nom de la colonne de la clef primaire
non
?


n'y a t-il pas un moyen plus directe d'avoir la clef primaire (sans
avoir


à balayer tous les elements de Keys) ?

la collection Tables.Keys est toujours composée que d'un element (il ne
peut y avoir qu'une clef primaire par table, non ?) ?
la collection Tables.Keys.Coloumns est toujours composée que d'un
element


(pour une clef primair, il ne peut y avoir qu'une colonne associée, non
?)


?


"Michel Pierron" a écrit dans le message de
news:



Bonsoir Emcy;
Par exemple:

Sub KeysList()
Const Chemin = "Ici chemin complet de la base .mdb"
Dim Conn As Object, Cat As Object
Set Conn = CreateObject("ADODB.Connection")
Set Cat = CreateObject("ADOX.Catalog")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Chemin
Set Cat.ActiveConnection = Conn
Dim tbl As Object, key As Object, Col As Object
Application.ScreenUpdating = False
Workbooks.Add
Cells(1, 1) = "TABLE"
Cells(1, 2) = "KEY"
Cells(1, 3) = "TYPE"
Rows("1:1").Font.Bold = True
Range("A2").Select
ActiveWindow.FreezePanes = True
Dim i&: i = 1
For Each tbl In Cat.Tables
If Left(tbl.Name, 4) <> "MSys" Then
For Each key In tbl.Keys
For Each Col In key.Columns
i = i + 1
Cells(i, 1) = tbl.Name
Cells(i, 2) = Col.Name
Cells(i, 3) = key.Name
Next
Next
End If
Next
Set Cat = Nothing
Conn.Close: Set Conn = Nothing
Cells.Columns.AutoFit
End Sub

MP

"Emcy" a écrit dans le message de news:
uA#
Bonjours,

comment faire en ADO(X) pour récupérer le nom de la colonne qui est
definie

comme clef primaire (pour une BDD Access) ?




















Avatar
michdenis
Bonjour Emcy,

Si tu as besoin d'informations supplémentaires :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vdbt7/html/dvhowmodifyingforeignkey.asp


Salutations!



"Emcy" a écrit dans le message de news:
merci pour ton aide

J'ai trouvé la reponse pour la clef Foreign mais pas pour l'autre :
http://www.microsoft.com/FRANCE/MSDN/Technologies/technos/dataaccess/info/info.asp?mar=/FRANCE/MSDN/Technologies/technos/dataaccess/info/migration_DAO_ADO.html


"Michel Pierron" a écrit dans le message de news:

Re Emcy;
Je ne suis pas spécialiste de la manipulation de table, mais je pense que
KeyForeign est utilisé pour désigner les clefs secondaires d'une table,
clefs qui peuvent être uniques ou non alors que la table ne peut avoir
qu'une seule clef primaire.

MP

"Emcy" a écrit dans le message de news:

j'ai vu qu'il existe d'autre type de clef :
KeyForeign
KeyUnique
=> c'est quoi la différence avec une clef primaire ?


"Emcy" a écrit dans le message de news:

merci ça à l'air de marcher

ta macro, récupère bien que le nom de la colonne de la clef primaire
non
?


n'y a t-il pas un moyen plus directe d'avoir la clef primaire (sans
avoir


à balayer tous les elements de Keys) ?

la collection Tables.Keys est toujours composée que d'un element (il ne
peut y avoir qu'une clef primaire par table, non ?) ?
la collection Tables.Keys.Coloumns est toujours composée que d'un
element


(pour une clef primair, il ne peut y avoir qu'une colonne associée, non
?)


?


"Michel Pierron" a écrit dans le message de
news:



Bonsoir Emcy;
Par exemple:

Sub KeysList()
Const Chemin = "Ici chemin complet de la base .mdb"
Dim Conn As Object, Cat As Object
Set Conn = CreateObject("ADODB.Connection")
Set Cat = CreateObject("ADOX.Catalog")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Chemin
Set Cat.ActiveConnection = Conn
Dim tbl As Object, key As Object, Col As Object
Application.ScreenUpdating = False
Workbooks.Add
Cells(1, 1) = "TABLE"
Cells(1, 2) = "KEY"
Cells(1, 3) = "TYPE"
Rows("1:1").Font.Bold = True
Range("A2").Select
ActiveWindow.FreezePanes = True
Dim i&: i = 1
For Each tbl In Cat.Tables
If Left(tbl.Name, 4) <> "MSys" Then
For Each key In tbl.Keys
For Each Col In key.Columns
i = i + 1
Cells(i, 1) = tbl.Name
Cells(i, 2) = Col.Name
Cells(i, 3) = key.Name
Next
Next
End If
Next
Set Cat = Nothing
Conn.Close: Set Conn = Nothing
Cells.Columns.AutoFit
End Sub

MP

"Emcy" a écrit dans le message de news:
uA#
Bonjours,

comment faire en ADO(X) pour récupérer le nom de la colonne qui est
definie

comme clef primaire (pour une BDD Access) ?




















Avatar
Emcy
merci

"michdenis" a écrit dans le message de news:

Bonjour Emcy,

Si tu as besoin d'informations supplémentaires :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vdbt7/html/dvhowmodifyingforeignkey.asp


Salutations!



"Emcy" a écrit dans le message de news:

merci pour ton aide

J'ai trouvé la reponse pour la clef Foreign mais pas pour l'autre :
http://www.microsoft.com/FRANCE/MSDN/Technologies/technos/dataaccess/info/info.asp?mar=/FRANCE/MSDN/Technologies/technos/dataaccess/info/migration_DAO_ADO.html


"Michel Pierron" a écrit dans le message de news:

Re Emcy;
Je ne suis pas spécialiste de la manipulation de table, mais je pense que
KeyForeign est utilisé pour désigner les clefs secondaires d'une table,
clefs qui peuvent être uniques ou non alors que la table ne peut avoir
qu'une seule clef primaire.

MP

"Emcy" a écrit dans le message de news:

j'ai vu qu'il existe d'autre type de clef :
KeyForeign
KeyUnique
=> c'est quoi la différence avec une clef primaire ?


"Emcy" a écrit dans le message de news:

merci ça à l'air de marcher

ta macro, récupère bien que le nom de la colonne de la clef primaire
non
?


n'y a t-il pas un moyen plus directe d'avoir la clef primaire (sans
avoir


à balayer tous les elements de Keys) ?

la collection Tables.Keys est toujours composée que d'un element (il
ne
peut y avoir qu'une clef primaire par table, non ?) ?
la collection Tables.Keys.Coloumns est toujours composée que d'un
element


(pour une clef primair, il ne peut y avoir qu'une colonne associée,
non
?)


?


"Michel Pierron" a écrit dans le message de
news:



Bonsoir Emcy;
Par exemple:

Sub KeysList()
Const Chemin = "Ici chemin complet de la base .mdb"
Dim Conn As Object, Cat As Object
Set Conn = CreateObject("ADODB.Connection")
Set Cat = CreateObject("ADOX.Catalog")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Chemin
Set Cat.ActiveConnection = Conn
Dim tbl As Object, key As Object, Col As Object
Application.ScreenUpdating = False
Workbooks.Add
Cells(1, 1) = "TABLE"
Cells(1, 2) = "KEY"
Cells(1, 3) = "TYPE"
Rows("1:1").Font.Bold = True
Range("A2").Select
ActiveWindow.FreezePanes = True
Dim i&: i = 1
For Each tbl In Cat.Tables
If Left(tbl.Name, 4) <> "MSys" Then
For Each key In tbl.Keys
For Each Col In key.Columns
i = i + 1
Cells(i, 1) = tbl.Name
Cells(i, 2) = Col.Name
Cells(i, 3) = key.Name
Next
Next
End If
Next
Set Cat = Nothing
Conn.Close: Set Conn = Nothing
Cells.Columns.AutoFit
End Sub

MP

"Emcy" a écrit dans le message de news:
uA#
Bonjours,

comment faire en ADO(X) pour récupérer le nom de la colonne qui est
definie

comme clef primaire (pour une BDD Access) ?