| 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 ?
|
| 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 : Définition et manipulation de données avec DAO par Tofalu
lien : Comment déclarer une référence dans MS-Access ?
|
| 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.
|
| 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 ?
|
| auteur : Lucifer | Non, d'ailleurs elles sont en lecture seule.
|
| 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
|
|
| 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 : Tutoriel de JM Rabilloud sur ADOX
|
| 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 : Tutoriel de JM Rabilloud sur ADOX
|
| 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
|
|
| 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 : Tutoriel de JM Rabilloud sur ADOX
|
| 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.
|
| 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 : Définition et manipulation de données avec DAO par Tofalu
lien : Comment déclarer une référence dans MS-Access ?
|
| 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
strMotPasse = " pass "
strCheminBd = " c:\test.mdb "
strNomTable = " Table1 "
Set oDb = CurrentDb
strConnect = " MS Access;pwd= " & strMotPasse & " ;DATABASE=C:\test.mdb "
Set oTbl = oDb. CreateTableDef (strNomTable)
With oTbl
. Connect = strConnect
. SourceTableName = strNomTable
End With
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
strMotPasse = " pass "
strCheminBd = " c:\test.mdb "
strConnect = " MS Access;pwd= " & strMotPasse & " ;DATABASE=C:\test.mdb "
Set oDb = CurrentDb
Set oDbSource = DBEngine. OpenDatabase (strCheminBd, True , True , strConnect)
For Each oTblSource In oDbSource. TableDefs
If (oTblSource. Attributes And dbSystemObject) = 0 Then
strTemp = strTemp & oTblSource. Name & " | "
End If
Next
oDbSource. Close : Set oDbSource = Nothing
strNomsTables = Split (Left (strTemp, Len (strTemp) - 1 ), " | " )
For i = 0 To UBound (strNomsTables)
Set oTbl = oDb. CreateTableDef (strNomsTables (i))
oTbl. Connect = strConnect
oTbl. SourceTableName = strNomsTables (i)
oDb. TableDefs . Append oTbl
Next i
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 : Définition et manipulation de données avec DAO par Tofalu
lien : Comment déclarer une référence dans MS-Access ?
|
| 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
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 : Définition et manipulation de données avec DAO par Tofalu
lien : Comment déclarer une référence dans MS-Access ?
|
| 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 : Comment récupérer le chemin d'accès à la Base contenant les tables ?
|
| 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
catNorthwind. ActiveConnection = " Provider=Microsoft.Jet.OLEDB.4.0; " & _
" data source=c:\Program Files\ " & _
" Microsoft Office\Office\Samples\Northwind.mdb; "
tblNew. Name = " NewTable "
tblNew. Columns . Append " NumField " , adInteger , 20
tblNew. Columns . Append " TextField " , adVarWChar , 20
idxNew. Name = " NumIndex "
idxNew. Columns . Append " NumField "
idxNew. PrimaryKey = True
idxNew. Unique = True
tblNew. Indexes . Append idxNew
tblNew. Indexes . Append " TextIndex " , " TextField "
catNorthwind. Tables . Append tblNew
With tblNew
Debug. Print tblNew. Indexes . Count & " Indexes in " & _
tblNew. Name & " Table "
For Each idxLoop In . Indexes
With idxLoop
Debug. Print " Index " & . Name
Debug. Print " Primary key = " & . PrimaryKey
Debug. Print " Unique = " & . Unique
Debug. Print " Columns "
For Each colLoop In . Columns
Debug. Print " " & colLoop. Name
Next colLoop
End With
Next idxLoop
End With
catNorthwind. Tables . Delete tblNew. Name
Set catNorthwind = Nothing
End Sub
|
|
| auteur : Tofalu | 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 Dim Db as DAO. Database
Set Db= CurrentDb
Db. Tabledefs (" MaTable " ). RefreshLink
|
|
lien : Définition et manipulation de données avec DAO
|
| 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 : Comment effacer tout le contenu d'une table ?
|
| 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
|
|
| 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 : Comment tester l'existence d'une requête en VBA et la supprimer ?
lien : Comment savoir si une table existe ?
|
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.
|