Comment peut on accèder à la lecture et la signification des attributs des
tables dans une BD access ?
Plus précisément comment reconnaitre en VBA les tables systèmes ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Argyronet
Bonjour,
Si la base est constituée de tables liées, vous pouvez différencier une table système par le biais de la propriété Connect qui doitretourner une longueur de chaîne différente de 0. Sinon bien évidement, par son nom, enfin, les 4 premiers caractères ("MSys") Pour ce faire, utilsez un objet TableDef de la collection TableDefs de l'objet Database.
Ex: ¯¯¯ CurrentDB.TableDefs("Nom d'une table iée").Connect = une chaîne... avec le nom de la BDD Len(CurrentDB.TableDefs("MSysObjects").Connect) = 0
Et pour les tables locales, vous pouvez faire une simple requête : SELECT Name FROM MSysObjects WHERE Flags = 0 AND Type = 1 -- Argy http://argyronet.developpez.com/ Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442) VBA pour Office 2007 (ISBN 2742983910)
"Francis SLAWNY" a écrit :
Bonjour tout le monde
XPPro SP3 Access 2003
Comment peut on accèder à la lecture et la signification des attributs des tables dans une BD access ? Plus précisément comment reconnaitre en VBA les tables systèmes ?
Merci pour vos reponses FS
Bonjour,
Si la base est constituée de tables liées, vous pouvez différencier une
table système par le biais de la propriété Connect qui doitretourner une
longueur de chaîne différente de 0.
Sinon bien évidement, par son nom, enfin, les 4 premiers caractères ("MSys")
Pour ce faire, utilsez un objet TableDef de la collection TableDefs de
l'objet Database.
Ex:
¯¯¯
CurrentDB.TableDefs("Nom d'une table iée").Connect = une chaîne... avec le
nom de la BDD
Len(CurrentDB.TableDefs("MSysObjects").Connect) = 0
Et pour les tables locales, vous pouvez faire une simple requête :
SELECT Name FROM MSysObjects WHERE Flags = 0 AND Type = 1
--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)
"Francis SLAWNY" a écrit :
Bonjour tout le monde
XPPro SP3 Access 2003
Comment peut on accèder à la lecture et la signification des attributs des
tables dans une BD access ?
Plus précisément comment reconnaitre en VBA les tables systèmes ?
Si la base est constituée de tables liées, vous pouvez différencier une table système par le biais de la propriété Connect qui doitretourner une longueur de chaîne différente de 0. Sinon bien évidement, par son nom, enfin, les 4 premiers caractères ("MSys") Pour ce faire, utilsez un objet TableDef de la collection TableDefs de l'objet Database.
Ex: ¯¯¯ CurrentDB.TableDefs("Nom d'une table iée").Connect = une chaîne... avec le nom de la BDD Len(CurrentDB.TableDefs("MSysObjects").Connect) = 0
Et pour les tables locales, vous pouvez faire une simple requête : SELECT Name FROM MSysObjects WHERE Flags = 0 AND Type = 1 -- Argy http://argyronet.developpez.com/ Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442) VBA pour Office 2007 (ISBN 2742983910)
"Francis SLAWNY" a écrit :
Bonjour tout le monde
XPPro SP3 Access 2003
Comment peut on accèder à la lecture et la signification des attributs des tables dans une BD access ? Plus précisément comment reconnaitre en VBA les tables systèmes ?
Merci pour vos reponses FS
Blaise Cacramp
Selon : Bonjour ou bonsoir
J'ai trouvé du code quelque part il y a longtemps (je n'ai pas noté la source) que j'ai adapté à mes besoins. Attention : il utilise Excel. Il faut donc le référencer dans le VBA
Sub ListeTablesChamps() Dim Db As DAO.Database, tdf As DAO.TableDef, Fld As DAO.Field Dim strDescription As String Dim L, Att As Long Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet
Set Db = CurrentDb Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add xlApp.Visible = True
For Each tdf In Db.TableDefs If Not tdf.Properties("Attributes") And dbHiddenObject Then Set xlSheet = xlBook.Worksheets.Add With xlSheet .Name = tdf.Name .Cells(1, 1) = tdf.Name .Cells(1, 2) = "Description" .Cells(1, 3) = "Type" .Cells(1, 4) = "Valeur Défaut" .Cells(1, 5) = "Taille" .Cells(1, 6) = "NumAuto" .Cells(1, 7) = "tri Z-A" .Cells(1, 8) = "Taille Fixe" .Cells(1, 9) = "Requis" .Cells(1, 10) = "Règle"
L = 2 For Each Fld In tdf.Fields .Cells(L, 1) = Fld.Name On Error Resume Next .Cells(L, 2) = Fld.Properties("Description") On Error GoTo 0 .Cells(L, 3) = TypeValeur(Fld.Properties("Type")) .Cells(L, 4) = Fld.Properties("DefaultValue") .Cells(L, 5) = Fld.Properties("Size") Att = Fld.Properties("Attributes") .Cells(L, 6) = IIf(Att And dbAutoIncrField, "X", "") .Cells(L, 7) = IIf(Att And dbDescending, "X", "") .Cells(L, 8) = IIf(Att And dbFixedField, "X", "") .Cells(L, 9) = IIf(Fld.Properties("Required"), "X", "") .Cells(L, 10) = Fld.Properties("ValidationRule") L = L + 1 Next Fld End With End If Next tdf
Set Fld = Nothing Set tdf = Nothing Set Db = Nothing End Sub
Function TypeValeur(Tpe) As String Select Case Tpe Case dbBigInt: TypeValeur = "Big Integer" Case dbBinary: TypeValeur = "Binary" Case dbBoolean: TypeValeur = "Boolean" Case dbByte: TypeValeur = "Byte" Case dbChar: TypeValeur = "Char" Case dbCurrency: TypeValeur = "Currency" Case dbDate: TypeValeur = "Date / Time" Case dbDecimal: TypeValeur = "Decimal" Case dbDouble: TypeValeur = "Double" Case dbFloat: TypeValeur = "Float" Case dbGUID: TypeValeur = "Guid" Case dbInteger: TypeValeur = "Integer" Case dbLong: TypeValeur = "Long" Case dbLongBinary: TypeValeur = "Long Binary (OLE object)" Case dbMemo: TypeValeur = "Memo" Case dbNumeric: TypeValeur = "Numeric" Case dbSingle: TypeValeur = "Single" Case dbText: TypeValeur = "Text" Case dbTime: TypeValeur = "Time" Case dbTimeStamp: TypeValeur = "Time Stamp" Case dbVarBinary: TypeValeur = "VarBinary" End Select End Function
Cdt, Blaise ---- ---- ----
"Argyronet" a écrit dans le message de news:
Bonjour,
Si la base est constituée de tables liées, vous pouvez différencier une table système par le biais de la propriété Connect qui doitretourner une longueur de chaîne différente de 0. Sinon bien évidement, par son nom, enfin, les 4 premiers caractères ("MSys") Pour ce faire, utilsez un objet TableDef de la collection TableDefs de l'objet Database.
Ex: ¯¯¯ CurrentDB.TableDefs("Nom d'une table iée").Connect = une chaîne... avec le nom de la BDD Len(CurrentDB.TableDefs("MSysObjects").Connect) = 0
Et pour les tables locales, vous pouvez faire une simple requête : SELECT Name FROM MSysObjects WHERE Flags = 0 AND Type = 1 -- Argy http://argyronet.developpez.com/ Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442) VBA pour Office 2007 (ISBN 2742983910)
"Francis SLAWNY" a écrit :
Bonjour tout le monde
XPPro SP3 Access 2003
Comment peut on accèder à la lecture et la signification des attributs des tables dans une BD access ? Plus précisément comment reconnaitre en VBA les tables systèmes ?
Merci pour vos reponses FS
Selon : Bonjour ou bonsoir
J'ai trouvé du code quelque part il y a longtemps (je n'ai pas noté la
source) que j'ai adapté à mes besoins.
Attention : il utilise Excel. Il faut donc le référencer dans le VBA
Sub ListeTablesChamps()
Dim Db As DAO.Database, tdf As DAO.TableDef, Fld As DAO.Field
Dim strDescription As String
Dim L, Att As Long
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set Db = CurrentDb
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
xlApp.Visible = True
For Each tdf In Db.TableDefs
If Not tdf.Properties("Attributes") And dbHiddenObject Then
Set xlSheet = xlBook.Worksheets.Add
With xlSheet
.Name = tdf.Name
.Cells(1, 1) = tdf.Name
.Cells(1, 2) = "Description"
.Cells(1, 3) = "Type"
.Cells(1, 4) = "Valeur Défaut"
.Cells(1, 5) = "Taille"
.Cells(1, 6) = "NumAuto"
.Cells(1, 7) = "tri Z-A"
.Cells(1, 8) = "Taille Fixe"
.Cells(1, 9) = "Requis"
.Cells(1, 10) = "Règle"
L = 2
For Each Fld In tdf.Fields
.Cells(L, 1) = Fld.Name
On Error Resume Next
.Cells(L, 2) = Fld.Properties("Description")
On Error GoTo 0
.Cells(L, 3) = TypeValeur(Fld.Properties("Type"))
.Cells(L, 4) = Fld.Properties("DefaultValue")
.Cells(L, 5) = Fld.Properties("Size")
Att = Fld.Properties("Attributes")
.Cells(L, 6) = IIf(Att And dbAutoIncrField, "X", "")
.Cells(L, 7) = IIf(Att And dbDescending, "X", "")
.Cells(L, 8) = IIf(Att And dbFixedField, "X", "")
.Cells(L, 9) = IIf(Fld.Properties("Required"), "X", "")
.Cells(L, 10) = Fld.Properties("ValidationRule")
L = L + 1
Next Fld
End With
End If
Next tdf
Set Fld = Nothing
Set tdf = Nothing
Set Db = Nothing
End Sub
Function TypeValeur(Tpe) As String
Select Case Tpe
Case dbBigInt: TypeValeur = "Big Integer"
Case dbBinary: TypeValeur = "Binary"
Case dbBoolean: TypeValeur = "Boolean"
Case dbByte: TypeValeur = "Byte"
Case dbChar: TypeValeur = "Char"
Case dbCurrency: TypeValeur = "Currency"
Case dbDate: TypeValeur = "Date / Time"
Case dbDecimal: TypeValeur = "Decimal"
Case dbDouble: TypeValeur = "Double"
Case dbFloat: TypeValeur = "Float"
Case dbGUID: TypeValeur = "Guid"
Case dbInteger: TypeValeur = "Integer"
Case dbLong: TypeValeur = "Long"
Case dbLongBinary: TypeValeur = "Long Binary (OLE object)"
Case dbMemo: TypeValeur = "Memo"
Case dbNumeric: TypeValeur = "Numeric"
Case dbSingle: TypeValeur = "Single"
Case dbText: TypeValeur = "Text"
Case dbTime: TypeValeur = "Time"
Case dbTimeStamp: TypeValeur = "Time Stamp"
Case dbVarBinary: TypeValeur = "VarBinary"
End Select
End Function
Cdt, Blaise
---- ---- ----
"Argyronet" <Argyronet@discussions.microsoft.com> a écrit dans le message de
news: F85E9153-D82C-4FC7-8876-7BB0EA5214B9@microsoft.com...
Bonjour,
Si la base est constituée de tables liées, vous pouvez différencier une
table système par le biais de la propriété Connect qui doitretourner une
longueur de chaîne différente de 0.
Sinon bien évidement, par son nom, enfin, les 4 premiers caractères
("MSys")
Pour ce faire, utilsez un objet TableDef de la collection TableDefs de
l'objet Database.
Ex:
¯¯¯
CurrentDB.TableDefs("Nom d'une table iée").Connect = une chaîne... avec le
nom de la BDD
Len(CurrentDB.TableDefs("MSysObjects").Connect) = 0
Et pour les tables locales, vous pouvez faire une simple requête :
SELECT Name FROM MSysObjects WHERE Flags = 0 AND Type = 1
--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)
"Francis SLAWNY" a écrit :
Bonjour tout le monde
XPPro SP3 Access 2003
Comment peut on accèder à la lecture et la signification des attributs
des
tables dans une BD access ?
Plus précisément comment reconnaitre en VBA les tables systèmes ?
J'ai trouvé du code quelque part il y a longtemps (je n'ai pas noté la source) que j'ai adapté à mes besoins. Attention : il utilise Excel. Il faut donc le référencer dans le VBA
Sub ListeTablesChamps() Dim Db As DAO.Database, tdf As DAO.TableDef, Fld As DAO.Field Dim strDescription As String Dim L, Att As Long Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet
Set Db = CurrentDb Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add xlApp.Visible = True
For Each tdf In Db.TableDefs If Not tdf.Properties("Attributes") And dbHiddenObject Then Set xlSheet = xlBook.Worksheets.Add With xlSheet .Name = tdf.Name .Cells(1, 1) = tdf.Name .Cells(1, 2) = "Description" .Cells(1, 3) = "Type" .Cells(1, 4) = "Valeur Défaut" .Cells(1, 5) = "Taille" .Cells(1, 6) = "NumAuto" .Cells(1, 7) = "tri Z-A" .Cells(1, 8) = "Taille Fixe" .Cells(1, 9) = "Requis" .Cells(1, 10) = "Règle"
L = 2 For Each Fld In tdf.Fields .Cells(L, 1) = Fld.Name On Error Resume Next .Cells(L, 2) = Fld.Properties("Description") On Error GoTo 0 .Cells(L, 3) = TypeValeur(Fld.Properties("Type")) .Cells(L, 4) = Fld.Properties("DefaultValue") .Cells(L, 5) = Fld.Properties("Size") Att = Fld.Properties("Attributes") .Cells(L, 6) = IIf(Att And dbAutoIncrField, "X", "") .Cells(L, 7) = IIf(Att And dbDescending, "X", "") .Cells(L, 8) = IIf(Att And dbFixedField, "X", "") .Cells(L, 9) = IIf(Fld.Properties("Required"), "X", "") .Cells(L, 10) = Fld.Properties("ValidationRule") L = L + 1 Next Fld End With End If Next tdf
Set Fld = Nothing Set tdf = Nothing Set Db = Nothing End Sub
Function TypeValeur(Tpe) As String Select Case Tpe Case dbBigInt: TypeValeur = "Big Integer" Case dbBinary: TypeValeur = "Binary" Case dbBoolean: TypeValeur = "Boolean" Case dbByte: TypeValeur = "Byte" Case dbChar: TypeValeur = "Char" Case dbCurrency: TypeValeur = "Currency" Case dbDate: TypeValeur = "Date / Time" Case dbDecimal: TypeValeur = "Decimal" Case dbDouble: TypeValeur = "Double" Case dbFloat: TypeValeur = "Float" Case dbGUID: TypeValeur = "Guid" Case dbInteger: TypeValeur = "Integer" Case dbLong: TypeValeur = "Long" Case dbLongBinary: TypeValeur = "Long Binary (OLE object)" Case dbMemo: TypeValeur = "Memo" Case dbNumeric: TypeValeur = "Numeric" Case dbSingle: TypeValeur = "Single" Case dbText: TypeValeur = "Text" Case dbTime: TypeValeur = "Time" Case dbTimeStamp: TypeValeur = "Time Stamp" Case dbVarBinary: TypeValeur = "VarBinary" End Select End Function
Cdt, Blaise ---- ---- ----
"Argyronet" a écrit dans le message de news:
Bonjour,
Si la base est constituée de tables liées, vous pouvez différencier une table système par le biais de la propriété Connect qui doitretourner une longueur de chaîne différente de 0. Sinon bien évidement, par son nom, enfin, les 4 premiers caractères ("MSys") Pour ce faire, utilsez un objet TableDef de la collection TableDefs de l'objet Database.
Ex: ¯¯¯ CurrentDB.TableDefs("Nom d'une table iée").Connect = une chaîne... avec le nom de la BDD Len(CurrentDB.TableDefs("MSysObjects").Connect) = 0
Et pour les tables locales, vous pouvez faire une simple requête : SELECT Name FROM MSysObjects WHERE Flags = 0 AND Type = 1 -- Argy http://argyronet.developpez.com/ Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442) VBA pour Office 2007 (ISBN 2742983910)
"Francis SLAWNY" a écrit :
Bonjour tout le monde
XPPro SP3 Access 2003
Comment peut on accèder à la lecture et la signification des attributs des tables dans une BD access ? Plus précisément comment reconnaitre en VBA les tables systèmes ?