Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo
Sommaire > Tables et Champs > Tables
        Comment attacher une table Oracle ?
        Comment connaître la date de création d'une table en DAO ?
        Comment connaître la date de dernière modification d'une table en DAO ?
        Quelle est la différence entre table liée et table importée ?
        Comment exporter plusieurs tables en même temps ?
        Est-il possible de modifier les tables systèmes ?
        Comment connaître le nombre d'enregistrements d'une table ou d'une requête ?
        Comment renommer une table avec ADO ?
        Comment supprimer une table avec ADO ?
        Comment faire pour que toutes les tables liées ne soient plus présentes dans ma base de données ?
        Comment savoir si une table existe ?
        Comment tester l'existence d'une table avec ADO ?
        Comment afficher les tables masquées ?
        Comment fusionner deux tables, en ne gardant pas les enregistrements de la table 2 identiques à ceux de la table 1 ?
        Comment ouvrir une table en mode exclusif ?
        Comment lier des tables en VBA dans une base de données protégées par un mot de passe ?
        Comment savoir si une table est verrouillée ?
        Comment récupérer le chemin d'accès à la Base contenant les tables par ADO ?
        Comment obtenir la clé primaire d'une table en ADO ?
        Comment mettre à jour des tables liées après modifications ?
        Comment renommer une table en SQL ?
        Comment renommer une colonne en SQL ?
        Comment supprimer une table si elle existe ?

precedent    sommaire    suivant   


Comment attacher une table Oracle ?
auteur : Lucifer
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 3 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 (3ème zone) et que vous retrouvez dans votre tnsnames.ora)
Dans Access, dans l'onglet table, 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.

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

Comment connaître la date de création d'une table en DAO ?
auteur : Tofalu
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:
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
lien : fr Définition et manipulation de données avec DAO par Tofalu
lien : faq Comment déclarer une référence dans MS-Access ?

Comment connaître la date de dernière modification d'une table en DAO ?
auteur : Tofalu
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 :
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
lien : fr Définition et manipulation de données avec DAO par Tofalu
lien : faq Comment déclarer une référence dans MS-Access ?

Quelle est la différence entre table liée et table importée ?
auteur : Demco
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épercutions dans l'autre.

Table liée : les tables liées ont les MEMES DONNEES. Si vous modifiez des données dans une, elles seront modifiées dans l'autre. En fait, les deux tables liées sont une et même table.


Comment exporter plusieurs tables en même temps ?
auteur : argyronet
Il faut utiliser la commande DoCmd.TransfertDatabase 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.

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

Est-il possible de modifier les tables systèmes ?
auteur : Lucifer
Non, d'ailleurs elles sont en lecture seule.


Comment connaître le nombre d'enregistrements d'une table ou d'une requête ?
auteur : Demco
Pour une table ou bien une requête :
Dim LaVariable As Integer

LaVariable = DCount("monChamp","NomTableOuNomRequete")
ou bien (seulement pour une table) :
Currentdb.TableDefs("NomTable").RecordCount

Comment renommer une table avec ADO ?
auteur : Tofalu
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 :
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 :
MsgBox RenommerTable("Produit", "Produit2")
Affiche true si la table Produit à été renommée avec succés en Produit2. Renvoie false en cas d'echec.

lien : fr Tutoriel de JM Rabilloud sur ADOX

Comment supprimer une table avec ADO ?
auteur : Tofalu
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 :
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 :
MsgBox SupprimerTable("test")
Affiche vrai si la table test a été corectement supprimée.

lien : fr Tutoriel de JM Rabilloud sur ADOX

Comment faire pour que toutes les tables liées ne soient plus présentes dans ma base de données ?
auteur : Cafeine
Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library
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 

Comment savoir si une table existe ?
auteur : Team Access

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

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 
lien : faq Comment tester l'existence d'une requête en VBA et la supprimer ?
lien : faq Comment supprimer une table si elle existe ?

Comment tester l'existence d'une table avec ADO ?
auteur : Tofalu
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 :
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 :
Debug.print ExisteTable("Produit")
Affiche dans la fenêtre de deboguage True si la table produit existe, False sinon.

lien : fr Tutoriel de JM Rabilloud sur ADOX

Comment afficher les tables masquées ?
auteur : Team Access

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


Comment fusionner deux tables, en ne gardant pas les enregistrements de la table 2 identiques à ceux de la table 1 ?
auteur : Tofalu
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é primaires.


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


Par exemple :

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.

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

Comment ouvrir une table en mode exclusif ?
auteur : Morsi
Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library
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 traitemens en mode exclusif
Rcd.Close
Set rcd = Nothing
Exit Function
Erreur:
Msgbox Err.Number & vbcrlf & Err.Description
End Function
lien : fr Définition et manipulation de données avec DAO par Tofalu
lien : faq Comment déclarer une référence dans MS-Access ?

Comment lier des tables en VBA dans une base de données protégées par un mot de passe ?
auteur : Tofalu
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 :

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 chaine 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 :

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 chaine 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)
 
'Parcours 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 system
    If (oTblSource.Attributes And dbSystemObject) = 0 Then
        strTemp = strTemp & oTblSource.Name & "|"
    End If
Next
'Ferme la base de données sources (impératif pour la liaison)
oDbSource.Close: Set oDbSource = Nothing
'parcours 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

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

Comment savoir si une table est verrouillée ?
auteur : Cafeine
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.
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
lien : fr Définition et manipulation de données avec DAO par Tofalu
lien : faq Comment déclarer une référence dans MS-Access ?

Comment récupérer le chemin d'accès à la Base contenant les tables par ADO ?
auteur : naphta

Ce code permet de retrouver le chemin des liaisons des tables liées de la bdd :
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
lien : faq Comment récupérer le chemin d'accès à la Base contenant les tables ?

Comment obtenir la clé primaire d'une table en ADO ?
auteur : Frank
Cet exemple démontre le PrimaryKey et les propriétés uniques d'un index.
Le code crée une nouvelle table avec deux colonnes.
Le PrimaryKey et les propriétés uniques sont employés pour faire référence à une colonne, la clef primaire, pour laquelle on ne permet pas des valeurs doubles.
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'apposer 
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


Comment renommer une table en SQL ?
auteur : Demco
Le code suivant crée une nouvelle table avec toutes les données de la précédente
select * into NouvTable from AncienneTable;
Puis il ne reste plus qu'à supprimer l'ancienne table à l'aide de DROP TABLE en SQL

lien : faq Comment effacer tout le contenu d'une table ?

Comment renommer une colonne en SQL ?
auteur : Demco
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 :
ALTER TABLE MaTable ADD COLUMN NouvColonne Text(255) 
UPDATE MaTable SET NouvColonne = VieilleColonne 
ALTER TABLE MaTable DROP COLUMN VieilleColonne

Comment supprimer une table si elle existe ?
auteur : Morgan BILLY
La fonction suivante permet de tester si une table passée en paramètre existe et l'efface si c'est le cas et renvoi True, sinon la fonction renvoi False.

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

Collez cette fonction dans un nouveau module :
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
        Else
            Delete_Table = False
        End If
    Next tbl
    
End Function
L'appel de la fonction est réalisé de cette façon :
Dim tbl As String
    
    tbl = "Table1"
    
    If Delete_Table(tbl) = True Then
        MsgBox "La table " & tbl & " a bien été éffacée."
    Else
        MsgBox "Aucune table portant le nom de " & tbl & " a été trouvée."
    End If
lien : faq Comment tester l'existence d'une requête en VBA et la supprimer ?
lien : faq Comment savoir si une table existe ?

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2004  Developpez LLC. Tout 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'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com