Gestion des tables liées via VB [Résolu]

Tuxyl 4 Messages postés samedi 24 juillet 2004Date d'inscription 2 septembre 2007 Dernière intervention - 24 août 2007 à 12:21 - Dernière réponse : cs_Ouneufe 60 Messages postés mardi 4 septembre 2001Date d'inscription 19 janvier 2009 Dernière intervention
- 30 avril 2008 à 10:48
Bonjour,

J'ai deux fichiers liés dynamiquement par access : appli.mdb et tables.mdb.
A l'installation de l'application, je l'aisse à l'utilisateur le choix des répertoires où seront installés les deux fichiers.
Les répertoires choisis sont écris dans un fichier ini.
Au cas où les répertoires sont différents, comment pourrais-je lier les tables (une 20aine) à l'application frontale, sans utiliser l'interface access ? Je n'arrive pas à trouver de fonction utile pour ça et je vous serais très reconnaissant de m'orienter. Merci beaucoup !
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
eltino 8 Messages postés mardi 16 septembre 2003Date d'inscription 16 décembre 2008 Dernière intervention - 28 août 2007 à 16:47
3
Merci
Bonjour,
Il y a un certain temps, j'ai écrit ces fonctions permettant les attaches et dés-attaches de table.
Tu n'as qu'à insérer les 3 fonctions ci-dessous dans un module et le tour est joué.
Nota : Je n'ai pas eu le courage de vérifier si ce code est optimisé mais il fonctionne parfaitement (exemple : le cas error de la fonction table_existe n'est pas traité!). Toutes les applis que j'ai developpées les utilisent chaque jour, en environnement réseau.
Bonne continuation,
Eltino

Public Function attachT(ByVal strtable As String, strConnect As String, strSourceTable As String) as boolean
' Attache une table à la base de données courante, paramètres :
' strtable : nom local de la table à créer
' strconnect : localisation de la base où trouver la table à attacher
' strsourcetable : nom de la table dans la base source



On Error GoTo Err_attachT



Dim dbsTemp As Database
Dim tdfLinked As TableDef
Dim rstLinked As Recordset
Dim intTemp As Integer
Dim endroit As String
endroit = ";DATABASE=" & strConnect
   
Set dbsTemp = CurrentDb



' Crée un objet TableDef, définit ses propriétés
' Connect et SourceTableName en fonction des
' arguments passés et ajoute l'objet à la collection TableDefs.
Set tdfLinked = dbsTemp.CreateTableDef(strtable)



tdfLinked.Connect = endroit
tdfLinked.SourceTableName = strSourceTable
dbsTemp.TableDefs.Append tdfLinked

' table attachée ?
If table_existe(strtable) <> "no found" Then
    attachT = True
Else
    attachT = False
End If
Exit Function



Err_attachT:
    attachT = False
    Exit Function
End Function





Public Function detachT(ByVal strtable As String) as boolean
' Supprime l'attache d'une table dont le nom est passé en paramètre



' si la table n'existe pas, inutile d'aller plus loin
If table_existe(strtable) = "no found" Then
    detachT = True
    Exit Function
End If



On Error GoTo Err_detachT



Dim dbsTemp As Database
Set dbsTemp = CurrentDb
dbsTemp.TableDefs.Delete strtable
Set dbsTemp = Nothing



' table détachée ?
If table_existe(strtable) = "no found" Then
    detachT = True
Else
    detachT = False
End If
Exit Function



Err_detachT:
    Set dbsTemp = Nothing
    detachT = False
    Exit Function
End Function



Public Function table_existe(ByVal strtable As String)
' Est-ce que la table donnée existe dans la base courante ?
On Error GoTo err_table_existe
Dim dbs As Database, tdfLoop As TableDef, strrep As String
Set dbs = CurrentDb
strrep = "no found"
For Each tdfLoop In dbs.TableDefs
    If UCase(tdfLoop.Name) = UCase(strtable) Then
        strrep = strtable
        Exit For
    End If
Next tdfLoop
Set tdfLoop = Nothing
Set dbs = Nothing
table_existe = strrep
Exit Function



err_table_existe:
Set tdfLoop = Nothing
Set dbs = Nothing
table_existe = "error"
End Function

Merci eltino 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de eltino
Meilleure réponse
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 28 août 2007 à 17:06
3
Merci
Salut,

Pour la fonction table_existe, tu oublies de declarer son type
Public Function table_existe(ByVal strtable As String) As String

Ensuite , moi je fais comme ceci:

Public Function table_existe(ByVal strtable As String) As Boolean
' Est-ce que la table donnée existe dans la base courante ?


Dim dbs As Database
Set dbs = CurrentDb


Dim i As integer, xCount As Integer
xCount =dbs.TableDefs.Count
For =i=1 To xCount
   If UCase(strtable)=UCase(dbs.TableDefs(i).Name) Then
        table_existe=True
        Exit For
    End If
Next
End Function


<hr />

I LIKE TO BE HERE WHEN I CAN


<hr />

Merci chaibat05 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de chaibat05
Tuxyl 4 Messages postés samedi 24 juillet 2004Date d'inscription 2 septembre 2007 Dernière intervention - 2 sept. 2007 à 19:58
0
Merci
Merci infiniment !! C'est exactement ce que mon programme a besoin.
Encore merci à vous deux
Commenter la réponse de Tuxyl
cs_Ouneufe 60 Messages postés mardi 4 septembre 2001Date d'inscription 19 janvier 2009 Dernière intervention - 30 avril 2008 à 10:48
0
Merci
Très cool, c'est strictement ce dont j'avais besoin.

le feu ça fait peur mais avec l'eau tu l'arrêtes, le feu.
L'eau, tu l'arrêtes pas.
Commenter la réponse de cs_Ouneufe

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.