FAQ MS-AccessConsultez toutes les FAQ

Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireTables et ChampsTables

Dans Panneau de configuration/Outils d'administration/Source de données ODBC créez un DSN via l'administrateur de source de données.
Sur l'onglet system DSN.
Cliquez sur Add.
Choisissez dans la liste le bon pilote (au choix celui de Microsoft ou celui d'Oracle).
Vous avez trois informations à renseigner :

  • le nom du DSN que vous voulez créer ;
  • le nom du User ;
  • le nom de la source (chaîne que vous utilisez pour vous connecter via SQL Plus (3e zone) et que vous retrouvez dans votre tnsnames.ora.

Dans Access, dans l'onglet Tables, faites Nouveau/Attacher la table.
Choisissez dans type de fichier source de données ODBC, vous choisissez le DSN que vous venez de créer puis sélectionnez la ou les tables à attacher.

Créé le 1er janvier 2005  par Lucifer

Lien : Comment utiliser Access pour exécuter des requêtes sur d'autres types de base de données ?

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.

Coller ce code dans un nouveau module :

 
Sélectionnez
Public function DateCreation(PTable as string) as Date
On error goto err
Dim DB as DAO.Database
Dim T as DAO.Tabledef
Set DB=CurrentDb
Set T=DB.TableDefs(PTable)
DateCreation=T.DateCreated
Goto fin:
err:
Msgbox "Impossible d\'accéder à la table"
fin:
Set DB=nothing
Set T=nothing
End Function
Créé le 10 mai 2005  par Tofalu

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.

Coller le code suivant dans un nouveau module :

 
Sélectionnez
Public function DateMaj(PTable as string) as Date
On error goto err
Dim DB as DAO.Database
Dim T as DAO.Tabledef
Set DB=CurrentDb
Set T=DB.TableDefs(PTable)
DateMaj=T.LastUpdated
Goto fin:
err:
Msgbox "Impossible d\'accéder à la table"
fin:
Set DB=nothing
Set T=nothing
End Function
Créé le 10 mai 2005  par Tofalu

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

Table importée : amène toute la table sur la base de données, elle n'aura aucun lien avec la table d'origine, si vous modifiez les données dans l'une, ça n'aura aucune répercussion dans l'autre.

Table liée : les tables liées ont les MÊMES DONNÉES. Si vous modifiez des données dans une, elles seront modifiées dans l'autre. En fait, les deux tables liées sont une seule et même table.

Créé le 3 septembre 2004  par Demco

Il faut utiliser la commande DoCmd.TransferDatabase pour transférer une table.
Il vous suffit de créer un tableau contenant le nom de toutes les tables, et d'inclure la commande précédente dans une boucle qui lira un à un chaque nom de table.

Créé le 1er janvier 2005  par argyronet

Lien : Comment récupérer le nom des tables et de leurs champs ?

Non, d'ailleurs elles sont en lecture seule.

Créé le 1er avril 2004  par Lucifer

Pour une table ou bien une requête :

 
Sélectionnez
Dim LaVariable As Integer

LaVariable = DCount("monChamp","NomTableOuNomRequete")

Ou bien (seulement pour une table) :

 
Sélectionnez
LaVariable = Currentdb.TableDefs("NomTable").RecordCount
Créé le 3 septembre 2004  par Demco

Tout d'abord ajouter les références suivantes dans votre projet :

Microsot ADO Ext 2.X for dll and security Microsof ActiveX Data Object 2.X Library.

Puis dans un module, écrire le code suivant :

 
Sélectionnez
Function RenommerTable(Ancien As String, Nouveau As String) As Boolean
On Error GoTo err:
Dim MCat As New ADOX.Catalog
Dim MTable As ADOX.Table
Set MCat.ActiveConnection = CurrentProject.Connection
Set MTable = MCat.Tables(Ancien)
MTable.Name = Nouveau
RenommerTable = True
err:
Set MCat = Nothing
Set MTable = Nothing
End Function

Utilisation :

 
Sélectionnez
MsgBox RenommerTable("Produit", "Produit2")

Affiche True si la table Produit a été renommée avec succès en Produit2. Renvoie False en cas d'échec.

Créé le 10 mai 2005  par Tofalu

Lien : Tutoriel de JM Rabilloud sur ADOX

Tout d'abord ajouter les références suivantes dans votre projet :

Microsot ADO Ext 2.X for dll and security Microsof ActiveX Data Object 2.X Library.

Puis dans un module, écrire le code suivant :

 
Sélectionnez
Function SupprimerTable(NomTable As String) As Boolean
On Error GoTo err
Dim MCat As New ADOX.Catalog
Set MCat.ActiveConnection = CurrentProject.Connection
MCat.Tables.Delete (NomTable)
SupprimerTable = True
err:
Set MCat = Nothing
End Function

Utilisation :

 
Sélectionnez
MsgBox SupprimerTable("test")

Affiche True si la table test a été correctement supprimée.

Créé le 10 mai 2005  par Tofalu

Lien : Tutoriel de JM Rabilloud sur ADOX

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.

 
Sélectionnez
Public Function xKillLinks() 

Dim BD As DAO.Database 
Set BD = CurrentDb 
Dim tb As DAO.TableDef 
For Each tb In BD.TableDefs 
    If left(tb.name, 4) <> "MSys" Then 
        If Len(tb.connect) > 0 Then 
            DoCmd.RunSQL "DROP TABLE [" & tb.name & "] ;" 
            Debug.Print "effacement de " & tb.name & " -=#=> " & tb.connect 
        End If 
    End If 
Next tb 

End Function 
Créé le 3 septembre 2004  par cafeine


Une méthode parmi d'autres : ici par capture d'erreur.

 
Sélectionnez
Function ExistTable2( ByVal strTabl As String) As Boolean
    Dim str As String
    On Error GoTo err01
    str = CurrentDb.TableDefs(strTabl).name
    ExistTable2= True
    Exit Function
err01:
    Select Case Err.Number
        Case 3265
            ExistTable2 = False
    End Select
End Function 
Créé le 1er avril 2003  par Team Access

Lien : Comment tester l'existence d'une requête en VBA et la supprimer ?
Lien : Comment supprimer une table si elle existe ?

Tout d'abord ajouter les références suivantes dans votre projet :

Microsot ADO Ext 2.X for dll and security Microsof ActiveX Data Object 2.X Library.

Puis dans un module, écrire le code suivant :

 
Sélectionnez
Function ExisteTable(NomTable As String) As Boolean
On Error GoTo err:
Dim MCat As New ADOX.Catalog
Dim MTable As ADOX.Table
Set MCat.ActiveConnection = CurrentProject.Connection
Set MTable = MCat.Tables(NomTable)
ExisteTable = True
err:
Set MCat = Nothing
Set MTable = Nothing
End Function

Utilisation :

 
Sélectionnez
Debug.print ExisteTable("Produit")

Affiche dans la fenêtre de débogage True si la table Produit existe, False sinon.

Créé le 10 mai 2005  par Tofalu

Lien : Tutoriel de JM Rabilloud sur ADOX


Pour afficher les tables et autres objets masqués, rendez-vous dans le menu Outils, puis Options. Activez la case : Objets masqués.

Mis à jour le 29 août 2006  par Team Access

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.


Un moyen assez simple et de créer une table identique à la première mais vide avec vos champs qui ne doivent pas être identiques en clé primaire.


Ensuite, via VBA, vous insérez les données d'une table vers l'autre.


Par exemple :

 
Sélectionnez

Sub Insertion(oRst1 As DAO.Recordset, orst2 As DAO.Recordset)
On Error GoTo err
  Dim Fld As DAO.Field
    orst2.AddNew
    For Each Fld In oRst1.Fields
      If (Fld.Attributes And dbAutoIncrField) = 0 Then
        orst2.Fields(Fld.Name).Value = Fld.Value
      End If
    Next Fld
    orst2.Update
err:
End Sub

Sub copier()
Dim NomTable1 As String, NomTable2 As String
Dim oRst1 As DAO.Recordset, orst2 As DAO.Recordset
Dim odb As DAO.Database
Dim Message As String
Set odb = currentdb
NomTable1 = "TblClient"
NomTable2 = "TblClientSansDoublons"
Set oRst1 = odb.OpenRecordset(NomTable1)
Set orst2 = odb.OpenRecordset(NomTable2)
While Not oRst1.EOF
  Insertion oRst1, orst2
  oRst1.MoveNext
Wend
If Not orst2.EOF Then orst2.MoveLast
Message = "Opération terminée" & vbCrLf & vbCrLf & _
          "La table source comportait : " & oRst1.RecordCount & " enregistrement(s)," & vbCrLf & _
          "la table de destination en comporte " & orst2.RecordCount
MsgBox Message, vbInformation, "MAJ terminée"
End Sub


Pour que cela fonctionne vous devez ajouter la référence Microsoft DAO à votre projet.

Créé le 20 novembre 2005  par Tofalu

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

Pour exécuter, ce code il faut activer la référence : Microsoft DAO 3.x Object Library.

 
Sélectionnez
Function Ouvrir_Table_Exclusif (Bd As Database, Ma_Table As String) As Integer
Dim rcd As DAO.Recordset
On Error GoTo Erreur
Set rcd = Bd.OpenRecordset(Ma_Table, dbOpenTable, dbDenyRead) 
 ' -- Mes traitements en mode exclusif
Rcd.Close
Set rcd = Nothing
Exit Function
Erreur:
Msgbox Err.Number & vbcrlf & Err.Description
End Function
Créé le 13 novembre 2003  par Morsi

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.


Il faut utiliser DAO pour créer l'objet TableDef représentant la nouvelle table.
L'emplacement de la source et le mot de passe seront inscrits dans la propriété Connect de cet objet.


Exemple pour lier une table :

 
Sélectionnez

Sub lier()
Dim strMotPasse As String
Dim strCheminBd As String
Dim strNomTable As String
Dim strConnect As String
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
' Définit mot passe, nom table, chemin base de données
strMotPasse = "pass"
strCheminBd = "c:\test.mdb"
strNomTable = "Table1"
' Instancie l'objet Database
Set oDb = CurrentDb
' Définit la chaîne de connexion permettant la liaison
strConnect = "MS Access;pwd=" & strMotPasse & ";DATABASE=C:\test.mdb"
' Crée la nouvelle table
Set oTbl = oDb.CreateTableDef(strNomTable)
With oTbl
    .Connect = strConnect
    .SourceTableName = strNomTable
End With
' Ajoute la table à la base de données
oDb.TableDefs.Append oTbl: oDb.TableDefs.Refresh
End Sub


Exemple pour lier toutes les tables d'une base de données :

 
Sélectionnez

Sub lierToutes()
Dim strMotPasse As String
Dim strCheminBd As String
Dim strConnect As String
Dim strNomsTables() As String
Dim strTemp As String
Dim i As Integer
Dim oDb As DAO.Database
Dim oDbSource As DAO.Database
Dim oTbl As DAO.TableDef
Dim oTblSource As DAO.TableDef
' Définit mot passe, nom table, chemin base de données
strMotPasse = "pass"
strCheminBd = "c:\test.mdb"
' Définit la chaîne de connexion permettant la liaison des tables
strConnect = "MS Access;pwd=" & strMotPasse & ";DATABASE=C:\test.mdb"
' Instancie l'objet Database de la base courante
Set oDb = CurrentDb
' Instancie l'objet Database de la base protégée
Set oDbSource = DBEngine.OpenDatabase(strCheminBd, True, True, strConnect)
 
' Parcourt l'ensemble des tables de la base de données protégée
' et stocke leur nom
For Each oTblSource In oDbSource.TableDefs
    ' Ignore les tables système
    If (oTblSource.Attributes And dbSystemObject) = 0 Then
        strTemp = strTemp & oTblSource.Name & "|"
    End If
Next
' Ferme la base de données source (impératif pour la liaison)
oDbSource.Close: Set oDbSource = Nothing
' Parcourt le tableau de noms de tables
strNomsTables = Split(Left(strTemp, Len(strTemp) - 1), "|")
For i = 0 To UBound(strNomsTables)
  ' Crée une nouvelle table dans la base de données courante
  Set oTbl = oDb.CreateTableDef(strNomsTables(i))
  ' Lie les deux tables
  oTbl.Connect = strConnect
  oTbl.SourceTableName = strNomsTables(i)
  ' Ajoute la table à la base de données
  oDb.TableDefs.Append oTbl
Next i
 
' Rafraichit la liste des tables
oDb.TableDefs.Refresh
End Sub


Pour que cela fonctionne, il ne faut pas oublier d'ajouter la référence Microsoft DAO au projet.

Créé le 29 novembre 2006  par Tofalu

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.

Le code ouvre un Recordset avec un lockedit Optimistic et une option DenyWrite, en cas d'erreur on suppose que ça signifie que la table n'est pas accessible en écriture.

 
Sélectionnez
Dim db As DAO.Database
Dim rs As DAO.Recordset

On Error GoTo ILT_Err

Set db = CurrentDb()
Set rs = db.OpenRecordset(strTbl, dbOpenTable, dbDenyWrite, dbOptimistic)

rs.Close

IsLockedTable = False

ILT_End:
Set rs = Nothing
Set db = Nothing
Exit Function

ILT_Err:
Select Case Err.Number
    Case 3008
        ' La table est verrouillée par un autre processus
        IsLockedTable = True
        GoTo ILT_End
    Case Else
        Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
        IsLockedTable = True
        GoTo ILT_End
End Select
End Function
Créé le 29 novembre 2006  par cafeine

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?


Ce code permet de retrouver le chemin des tables liées de la BDD :

 
Sélectionnez
Public Sub Chemin_Tables()

Dim cnDB    As New ADODB.Connection
Dim catDB   As New ADOX.Catalog
Dim tblDB   As ADOX.Table
 
    Set cnDB = CurrentProject.Connection
    Set catDB.ActiveConnection = cnDB
        
     
      For Each tblDB In catDB.Tables
        If tblDB.Type = "LINK" Then
            Debug.Print tblDB.Name
            Debug.Print tblDB.Properties("Jet OLEDB:Link Datasource")
        End If
      Next
     
    cnDB.Close
    Set cnDB = Nothing
    Set tblDB = Nothing
    Set catDB = Nothing

End Sub
Créé le 14 octobre 2007  par naphta

Lien : Comment récupérer le chemin d'accès à la base contenant les tables ?

Cet exemple montre comment traiter la PrimaryKey et les propriétés uniques d'un index.
Le code crée une nouvelle table avec deux colonnes.
La PrimaryKey et les propriétés uniques sont employées pour faire référence à une colonne, la clef primaire, pour laquelle on ne permet pas des valeurs doubles.

 
Sélectionnez
Sub PrimaryKeyX()

Dim catNorthwind As New ADOX.Catalog
Dim tblNew As New ADOX.Table
Dim idxNew As New ADOX.Index
Dim idxLoop As New ADOX.Index
Dim colLoop As New ADOX.Column

' Relier le catalogue
catNorthwind.ActiveConnection="Provider=Microsoft.Jet.OLEDB.4.0;" & _
"data source=c:\Program Files\" & _
"Microsoft Office\Office\Samples\Northwind.mdb;"

' Nommer nouvelle table  
tblNew.Name = "NewTable"

' Apposer un champ numérique et des textes à la nouvelle table.
tblNew.Columns.Append "NumField", adInteger, 20
tblNew.Columns.Append "TextField", adVarWChar, 20

' Apposer le nouvel index principal primaire sur la colonne de NumField 
' à la nouvelle table 
idxNew.Name = "NumIndex"
idxNew.Columns.Append "NumField"
idxNew.PrimaryKey = True
idxNew.Unique = True
tblNew.Indexes.Append idxNew

' Apposer un index sur TextField à la nouvelle table. 
' Noter la technique différente : indication de l'index 
' et du nom de colonne comme paramètres de la méthode d'apposition 
tblNew.Indexes.Append "TextIndex", "TextField"

' Apposer la nouvelle table 
catNorthwind.Tables.Append tblNew

With tblNew

Debug.Print tblNew.Indexes.Count & " Indexes in " & _
tblNew.Name & " Table"

' Énumérer la collection d'index. 
For Each idxLoop In .Indexes

With idxLoop
Debug.Print "Index " & .Name
Debug.Print " Primary key = " & .PrimaryKey
Debug.Print " Unique = " & .Unique

' Énumérer la collection de colonnes de chaque objet d'index.
Debug.Print " Columns"
For Each colLoop In .Columns
Debug.Print " " & colLoop.Name
Next colLoop

End With

Next idxLoop

End With

' Supprimer la nouvelle table car c'est une démonstration 
catNorthwind.Tables.Delete tblNew.Name
Set catNorthwind = Nothing

End Sub
Créé le 14 octobre 2007  par Frank

La méthode RefreshLink n'est utilisable que sur des tables liées. Elle permet, après avoir modifié la propriété Connect, de rafraîchir les informations de connexion entre la table attachée et la source de données.

Pour ce code, il vous faut activer la référence : Microsoft DAO 3.x Object Library.

 
Sélectionnez
Dim Db as DAO.Database
Set Db=CurrentDb
Db.Tabledefs("MaTable").RefreshLink
Créé le 14 octobre 2007  par Tofalu

Lien : Définition et manipulation de données avec DAO

Le code suivant crée une nouvelle table avec toutes les données de la précédente

 
Sélectionnez
select * into NouvTable from AncienneTable;

Puis il ne reste plus qu'à supprimer l'ancienne table à l'aide de DROP TABLE en SQL

Créé le 14 octobre 2007  par Demco

Lien : Comment effacer tout le contenu d'une table ?

Il ne semble pas qu'Access permette de faire cela. La parade classique consiste à créer une nouvelle colonne et y déplacer les données :

 
Sélectionnez
ALTER TABLE MaTable ADD COLUMN NouvColonne Text(255) 
UPDATE MaTable SET NouvColonne = VieilleColonne 
ALTER TABLE MaTable DROP COLUMN VieilleColonne
Créé le 14 octobre 2007  par Demco

La fonction suivante permet de tester si une table passée en paramètre existe et l'efface si c'est le cas et renvoie True, sinon la fonction renvoie False.

Pour ce code activer, la référence Microsoft DAO 3.x Object Library.

Collez cette fonction dans un nouveau module :

 
Sélectionnez
Function Delete_Table(NomTable As String) As Boolean
    Dim db As DAO.Database
    Dim tbl As DAO.TableDef
    Delete_Table = False
        
    Set db = CurrentDb
    
    For Each tbl In db.TableDefs
        If tbl.Name = NomTable Then
            db.TableDefs.Delete (tbl.Name)
            Delete_Table = True
            Exit Function
        Else
            Delete_Table = False
        End If
    Next tbl
    
End Function

L'appel de la fonction est réalisé de cette façon :

 
Sélectionnez
Dim tbl As String
    
    tbl = "Table1"
    
    If Delete_Table(tbl) = True Then
        MsgBox "La table " & tbl & " a bien été effacée."
    Else
        MsgBox "Aucune table portant le nom de " & tbl & " n'a été trouvée."
    End If
Créé le 14 octobre 2007  par Morgan BILLY

Lien : Comment tester l'existence d'une requête en VBA et la supprimer ?
Lien : Comment savoir si une table existe ?

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.