Est-il possible de définir une table attachée, mais avec une adresse relative au lieu d'absolue ?
Je désire avoir une table attachée, dans un fichier mdb à part, pour que je puisse envoyer des données
sur un autre serveur, sans avoir à se coltiner l'ensemble de la base de données à chaque fois.
Le problème, c'est qu'il n'est pas possible d'avoir les deux BD dans les mêmes répertoires
sur les deux machines, donc si on transfere le fichier principal d'un serveur à l'autre l'adresse
de la table attachée ne colle plus.
Je voudrais donc tout simplement déclarer la table attachée dans un fichier dans le MEME répertoire,
sans aucun nom de répertoire. Est-ce possible ?
Merci.
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
Raymond
Bonjour.
Ton problème parait bien compliqué. Pour ne pas avoir de souci avec un chemin, le plus simple est d'utiliser un "disque reseau" dans ta base access. tu définis que le chemin réseau de telle base est F:.......monrepertoire et tu affecte le disque Z à ce chemin. Tu attaches ta base .mdb qui est sur ce disque et ta table sera attachée en permanence à Z:mabase.mdb quel que soit le chemin réseau. si tu décides de changer ta base de place tu supprimes ton disque Z et tu en crées un autre avec le nouveau chemin.
-- @+ Raymond Access MVP. http://access.seneque.free.fr/ http://access2003.free.fr/ http://users.skynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA.
"Claude Schneegans" a écrit dans le message de news:
Bonjour,
Est-il possible de définir une table attachée, mais avec une adresse relative au lieu d'absolue ?
Je désire avoir une table attachée, dans un fichier mdb à part, pour que je puisse envoyer des données
sur un autre serveur, sans avoir à se coltiner l'ensemble de la base de données à chaque fois.
Le problème, c'est qu'il n'est pas possible d'avoir les deux BD dans les mêmes répertoires
sur les deux machines, donc si on transfere le fichier principal d'un serveur à l'autre l'adresse
de la table attachée ne colle plus. Je voudrais donc tout simplement déclarer la table attachée dans un fichier dans le MEME répertoire,
sans aucun nom de répertoire. Est-ce possible ? Merci.
Bonjour.
Ton problème parait bien compliqué.
Pour ne pas avoir de souci avec un chemin, le plus simple est d'utiliser un
"disque reseau" dans ta base access.
tu définis que le chemin réseau de telle base est F:.......monrepertoire
et tu affecte le disque Z à ce chemin. Tu attaches ta base .mdb qui est sur
ce disque et ta table sera attachée en permanence à Z:mabase.mdb quel que
soit le chemin réseau. si tu décides de changer ta base de place tu
supprimes ton disque Z et tu en crées un autre avec le nouveau chemin.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.
"Claude Schneegans" <schneegans@internetique.com> a écrit dans le message de
news:3F884D2D.DACAFFFF@internetique.com...
Bonjour,
Est-il possible de définir une table attachée, mais avec une adresse
relative au lieu d'absolue ?
Je désire avoir une table attachée, dans un fichier mdb à part, pour que
je puisse envoyer des données
sur un autre serveur, sans avoir à se coltiner l'ensemble de la base de
données à chaque fois.
Le problème, c'est qu'il n'est pas possible d'avoir les deux BD dans les
mêmes répertoires
sur les deux machines, donc si on transfere le fichier principal d'un
serveur à l'autre l'adresse
de la table attachée ne colle plus.
Je voudrais donc tout simplement déclarer la table attachée dans un
fichier dans le MEME répertoire,
sans aucun nom de répertoire. Est-ce possible ?
Merci.
Ton problème parait bien compliqué. Pour ne pas avoir de souci avec un chemin, le plus simple est d'utiliser un "disque reseau" dans ta base access. tu définis que le chemin réseau de telle base est F:.......monrepertoire et tu affecte le disque Z à ce chemin. Tu attaches ta base .mdb qui est sur ce disque et ta table sera attachée en permanence à Z:mabase.mdb quel que soit le chemin réseau. si tu décides de changer ta base de place tu supprimes ton disque Z et tu en crées un autre avec le nouveau chemin.
-- @+ Raymond Access MVP. http://access.seneque.free.fr/ http://access2003.free.fr/ http://users.skynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA.
"Claude Schneegans" a écrit dans le message de news:
Bonjour,
Est-il possible de définir une table attachée, mais avec une adresse relative au lieu d'absolue ?
Je désire avoir une table attachée, dans un fichier mdb à part, pour que je puisse envoyer des données
sur un autre serveur, sans avoir à se coltiner l'ensemble de la base de données à chaque fois.
Le problème, c'est qu'il n'est pas possible d'avoir les deux BD dans les mêmes répertoires
sur les deux machines, donc si on transfere le fichier principal d'un serveur à l'autre l'adresse
de la table attachée ne colle plus. Je voudrais donc tout simplement déclarer la table attachée dans un fichier dans le MEME répertoire,
sans aucun nom de répertoire. Est-ce possible ? Merci.
David Berthemet
Bonjour,
Si j'ai bien compris ton problème, j'ai peut-être une solution à te proposer. Ayant moi-même à reconnecter toutes mes tables liées lorsque je passe de mon poste de développement au poste de mon client et ayant plusieurs bases à reconnecter à chaque fois ce qui n'est pas pratique, j'ai créé une procédure reconnectant automatiquement les tables liées si nécessaire (voir plus bas le texte de cette procédure). Pour que cette procédure fonctionne, il est nécessaire qu'il existe un table nommée "TblEmplacementTables" dans lequel le premier champ contient l'emplacement des tables liées et dans le répertoire ou se trouve la base de données contenant les tables liées un fichier INI ayant pour nom "ConfigCheminLENOMDELABASEFRONTALE.ini" ou "LENOMDELABASEFRONTALE" est le nom de la base contenant les tables liées. Il suffit alors d'appeler cette procédure au lancement de la base et si l'emplacement contenu dans le fichier INI diffère de celui inscrit dans la base, les tables sont automatiquement reliées.
Espérant avoir aidé. -- David Berthemet
"La forme même des pyramides d'Égypte montre que déjà les ouvriers avaient tendance à en faire de moins en moins." Will Cuppy - Humoriste et journaliste américain
Public Sub ConnecteTblLiees()
Dim TablesBase As TableDef Dim EmplacementTemp As String Dim DBEmplacement As Database, rsEmplacement As Recordset Dim EmplacementActuel As String, RechercheEmplacement As String, NomTableALier As String, CheminARemplacer As String Dim NomFichierIni As String, NomCompletFichierIni As String, NumFichierOuvrable As Integer, LigneTexte As String
Set DBEmplacement = CurrentDb Set rsEmplacement = DBEmplacement.OpenRecordset("TblEmplacementTables")
NomFichierIni = "ConfigChemin" & Left(CurrentProject.Name, Len(CurrentProject.Name) - 4) & ".ini" NomCompletFichierIni = CurrentProject.Path & "" & NomFichierIni If Dir(NomCompletFichierIni) <> "" Then NumFichierOuvrable = FreeFile Open NomCompletFichierIni For Input As #NumFichierOuvrable Do While Not EOF(NumFichierOuvrable) ' Effectue la boucle jusqu'à la fin du fichier. Line Input #NumFichierOuvrable, LigneTexte ' Lit la ligne dans la variable. Loop Close #NumFichierOuvrable ' Ferme le fichier.
If rsEmplacement.RecordCount <> 0 Then EmplacementActuel = rsEmplacement.Fields(0) If LigneTexte = EmplacementActuel Then Set DBEmplacement = Nothing: Set TablesBase = Nothing: Set rsEmplacement = Nothing Exit Sub Else rsEmplacement.Edit rsEmplacement.Fields(0) = LigneTexte rsEmplacement.Update EmplacementActuel = rsEmplacement.Fields(0) For Each TablesBase In CurrentDb().TableDefs EmplacementTemp = TablesBase.Properties("Connect") RechercheEmplacement = InStr(EmplacementTemp, "Tables") If EmplacementTemp <> "" Then NomTableALier = Right(EmplacementTemp, Len(EmplacementTemp) - RechercheEmplacement) CheminARemplacer = ";DATABASE=" & EmplacementActuel & NomTableALier If EmplacementTemp <> CheminARemplacer Then '// Si c'est une table liée, il faut recréé le lien. If Len(TablesBase.Connect) > 0 Then TablesBase.Connect = CheminARemplacer '// Recréation du lien. TablesBase.RefreshLink End If End If End If Next TablesBase End If End If End If
Set DBEmplacement = Nothing: Set TablesBase = Nothing: Set rsEmplacement Nothing
End Sub
Bonjour,
Si j'ai bien compris ton problème, j'ai peut-être une solution à te
proposer. Ayant moi-même à reconnecter toutes mes tables liées lorsque je
passe de mon poste de développement au poste de mon client et ayant
plusieurs bases à reconnecter à chaque fois ce qui n'est pas pratique, j'ai
créé une procédure reconnectant automatiquement les tables liées si
nécessaire (voir plus bas le texte de cette procédure).
Pour que cette procédure fonctionne, il est nécessaire qu'il existe un table
nommée "TblEmplacementTables" dans lequel le premier champ contient
l'emplacement des tables liées et dans le répertoire ou se trouve la base de
données contenant les tables liées un fichier INI ayant pour nom
"ConfigCheminLENOMDELABASEFRONTALE.ini" ou "LENOMDELABASEFRONTALE" est le
nom de la base contenant les tables liées.
Il suffit alors d'appeler cette procédure au lancement de la base et si
l'emplacement contenu dans le fichier INI diffère de celui inscrit dans la
base, les tables sont automatiquement reliées.
Espérant avoir aidé.
--
David Berthemet
"La forme même des pyramides d'Égypte montre que déjà les ouvriers avaient
tendance à en faire de moins en moins." Will Cuppy - Humoriste et
journaliste américain
Public Sub ConnecteTblLiees()
Dim TablesBase As TableDef
Dim EmplacementTemp As String
Dim DBEmplacement As Database, rsEmplacement As Recordset
Dim EmplacementActuel As String, RechercheEmplacement As String,
NomTableALier As String, CheminARemplacer As String
Dim NomFichierIni As String, NomCompletFichierIni As String,
NumFichierOuvrable As Integer, LigneTexte As String
Set DBEmplacement = CurrentDb
Set rsEmplacement = DBEmplacement.OpenRecordset("TblEmplacementTables")
NomFichierIni = "ConfigChemin" & Left(CurrentProject.Name,
Len(CurrentProject.Name) - 4) & ".ini"
NomCompletFichierIni = CurrentProject.Path & "" & NomFichierIni
If Dir(NomCompletFichierIni) <> "" Then
NumFichierOuvrable = FreeFile
Open NomCompletFichierIni For Input As #NumFichierOuvrable
Do While Not EOF(NumFichierOuvrable) ' Effectue la boucle jusqu'à la
fin du fichier.
Line Input #NumFichierOuvrable, LigneTexte ' Lit la ligne
dans la variable.
Loop
Close #NumFichierOuvrable ' Ferme le fichier.
If rsEmplacement.RecordCount <> 0 Then
EmplacementActuel = rsEmplacement.Fields(0)
If LigneTexte = EmplacementActuel Then
Set DBEmplacement = Nothing: Set TablesBase = Nothing: Set
rsEmplacement = Nothing
Exit Sub
Else
rsEmplacement.Edit
rsEmplacement.Fields(0) = LigneTexte
rsEmplacement.Update
EmplacementActuel = rsEmplacement.Fields(0)
For Each TablesBase In CurrentDb().TableDefs
EmplacementTemp = TablesBase.Properties("Connect")
RechercheEmplacement = InStr(EmplacementTemp, "Tables")
If EmplacementTemp <> "" Then
NomTableALier = Right(EmplacementTemp,
Len(EmplacementTemp) - RechercheEmplacement)
CheminARemplacer = ";DATABASE=" & EmplacementActuel &
NomTableALier
If EmplacementTemp <> CheminARemplacer Then
'// Si c'est une table liée, il faut recréé le lien.
If Len(TablesBase.Connect) > 0 Then
TablesBase.Connect = CheminARemplacer
'// Recréation du lien.
TablesBase.RefreshLink
End If
End If
End If
Next TablesBase
End If
End If
End If
Set DBEmplacement = Nothing: Set TablesBase = Nothing: Set rsEmplacement Nothing
Si j'ai bien compris ton problème, j'ai peut-être une solution à te proposer. Ayant moi-même à reconnecter toutes mes tables liées lorsque je passe de mon poste de développement au poste de mon client et ayant plusieurs bases à reconnecter à chaque fois ce qui n'est pas pratique, j'ai créé une procédure reconnectant automatiquement les tables liées si nécessaire (voir plus bas le texte de cette procédure). Pour que cette procédure fonctionne, il est nécessaire qu'il existe un table nommée "TblEmplacementTables" dans lequel le premier champ contient l'emplacement des tables liées et dans le répertoire ou se trouve la base de données contenant les tables liées un fichier INI ayant pour nom "ConfigCheminLENOMDELABASEFRONTALE.ini" ou "LENOMDELABASEFRONTALE" est le nom de la base contenant les tables liées. Il suffit alors d'appeler cette procédure au lancement de la base et si l'emplacement contenu dans le fichier INI diffère de celui inscrit dans la base, les tables sont automatiquement reliées.
Espérant avoir aidé. -- David Berthemet
"La forme même des pyramides d'Égypte montre que déjà les ouvriers avaient tendance à en faire de moins en moins." Will Cuppy - Humoriste et journaliste américain
Public Sub ConnecteTblLiees()
Dim TablesBase As TableDef Dim EmplacementTemp As String Dim DBEmplacement As Database, rsEmplacement As Recordset Dim EmplacementActuel As String, RechercheEmplacement As String, NomTableALier As String, CheminARemplacer As String Dim NomFichierIni As String, NomCompletFichierIni As String, NumFichierOuvrable As Integer, LigneTexte As String
Set DBEmplacement = CurrentDb Set rsEmplacement = DBEmplacement.OpenRecordset("TblEmplacementTables")
NomFichierIni = "ConfigChemin" & Left(CurrentProject.Name, Len(CurrentProject.Name) - 4) & ".ini" NomCompletFichierIni = CurrentProject.Path & "" & NomFichierIni If Dir(NomCompletFichierIni) <> "" Then NumFichierOuvrable = FreeFile Open NomCompletFichierIni For Input As #NumFichierOuvrable Do While Not EOF(NumFichierOuvrable) ' Effectue la boucle jusqu'à la fin du fichier. Line Input #NumFichierOuvrable, LigneTexte ' Lit la ligne dans la variable. Loop Close #NumFichierOuvrable ' Ferme le fichier.
If rsEmplacement.RecordCount <> 0 Then EmplacementActuel = rsEmplacement.Fields(0) If LigneTexte = EmplacementActuel Then Set DBEmplacement = Nothing: Set TablesBase = Nothing: Set rsEmplacement = Nothing Exit Sub Else rsEmplacement.Edit rsEmplacement.Fields(0) = LigneTexte rsEmplacement.Update EmplacementActuel = rsEmplacement.Fields(0) For Each TablesBase In CurrentDb().TableDefs EmplacementTemp = TablesBase.Properties("Connect") RechercheEmplacement = InStr(EmplacementTemp, "Tables") If EmplacementTemp <> "" Then NomTableALier = Right(EmplacementTemp, Len(EmplacementTemp) - RechercheEmplacement) CheminARemplacer = ";DATABASE=" & EmplacementActuel & NomTableALier If EmplacementTemp <> CheminARemplacer Then '// Si c'est une table liée, il faut recréé le lien. If Len(TablesBase.Connect) > 0 Then TablesBase.Connect = CheminARemplacer '// Recréation du lien. TablesBase.RefreshLink End If End If End If Next TablesBase End If End If End If
Set DBEmplacement = Nothing: Set TablesBase = Nothing: Set rsEmplacement Nothing
End Sub
Claude Schneegans
Ton problème parait bien compliqué.
Ben voyons ? Ce n'est pas plus compliqué qu'une adresse HTML relative par rapport à une adresse absolue. Ma base de donnée se trouve à la fois sur mon serveur de développement, et sur un serveur HTTP chez l'hébergeur de mon client pour qui je développe. Dans les deux cas, on n'utilise que le fichier MDB accédé par ODBC. Mon client a besoin de pouvoir télécharger une partie des données pour bidouiller ce qu'il veut avec (requêtes et rapports ad libitum). Afin déviter d'avoir à télécharger la bd au complet, une solution serait de copier la seule table nécessaire dans une table attaché dans un fichier externe, et de ne télécharger que ce fichier. Le problème, c'est que la table attachée est défini à l'aide d'un chemin absolu, (ce qui est franchement nul). Je n'ai aucun contrôle sur la nomenclature des fichiers et répertoires sur le serveur de l'hébergeur, ni sur l'ordinateur de mon client, et de plus, il faut que je puisse tester le tout de chez moi. Il faut aussi que je puisse à tout moment modifier la base de données et écraser celle qui est sur le serveur. Donc le chemin de la table attachée qui se retrouve sur le serveur est le mien, et ça ne marche plus.
Donc si on pouvait tout simplementattacher une table dans un fichier dans le même répertoire que le fichier principal, juste en donnant le nom du fichier, ça serait tellement plus simple ;-)
Pour ne pas avoir de souci avec un chemin, le plus simple est d'utiliser un "disque reseau" dans ta base access.
Ouais, d'accord, mais ni mon système de développement, ni celui de l'hébergeur, ni celui du client ne sont raccordés au même réseau.
Ton problème parait bien compliqué.
Ben voyons ? Ce n'est pas plus compliqué qu'une adresse HTML relative par rapport à une adresse absolue.
Ma base de donnée se trouve à la fois sur mon serveur de développement, et sur un serveur HTTP chez
l'hébergeur de mon client pour qui je développe. Dans les deux cas, on n'utilise que le fichier MDB accédé
par ODBC.
Mon client a besoin de pouvoir télécharger une partie des données pour bidouiller ce qu'il veut avec (requêtes
et rapports ad libitum). Afin déviter d'avoir à télécharger la bd au complet, une solution serait de copier la seule table
nécessaire dans une table attaché dans un fichier externe, et de ne télécharger que ce fichier.
Le problème, c'est que la table attachée est défini à l'aide d'un chemin absolu, (ce qui est franchement nul).
Je n'ai aucun contrôle sur la nomenclature des fichiers et répertoires sur le serveur de l'hébergeur,
ni sur l'ordinateur de mon client, et de plus, il faut que je puisse tester le tout de chez moi.
Il faut aussi que je puisse à tout moment modifier la base de données et écraser celle qui est sur le serveur.
Donc le chemin de la table attachée qui se retrouve sur le serveur est le mien, et ça ne marche plus.
Donc si on pouvait tout simplementattacher une table dans un fichier dans le même répertoire que le fichier principal,
juste en donnant le nom du fichier, ça serait tellement plus simple ;-)
Pour ne pas avoir de souci avec un chemin, le plus simple est d'utiliser un
"disque reseau" dans ta base access.
Ouais, d'accord, mais ni mon système de développement, ni celui de l'hébergeur, ni celui du client
ne sont raccordés au même réseau.
Ben voyons ? Ce n'est pas plus compliqué qu'une adresse HTML relative par rapport à une adresse absolue. Ma base de donnée se trouve à la fois sur mon serveur de développement, et sur un serveur HTTP chez l'hébergeur de mon client pour qui je développe. Dans les deux cas, on n'utilise que le fichier MDB accédé par ODBC. Mon client a besoin de pouvoir télécharger une partie des données pour bidouiller ce qu'il veut avec (requêtes et rapports ad libitum). Afin déviter d'avoir à télécharger la bd au complet, une solution serait de copier la seule table nécessaire dans une table attaché dans un fichier externe, et de ne télécharger que ce fichier. Le problème, c'est que la table attachée est défini à l'aide d'un chemin absolu, (ce qui est franchement nul). Je n'ai aucun contrôle sur la nomenclature des fichiers et répertoires sur le serveur de l'hébergeur, ni sur l'ordinateur de mon client, et de plus, il faut que je puisse tester le tout de chez moi. Il faut aussi que je puisse à tout moment modifier la base de données et écraser celle qui est sur le serveur. Donc le chemin de la table attachée qui se retrouve sur le serveur est le mien, et ça ne marche plus.
Donc si on pouvait tout simplementattacher une table dans un fichier dans le même répertoire que le fichier principal, juste en donnant le nom du fichier, ça serait tellement plus simple ;-)
Pour ne pas avoir de souci avec un chemin, le plus simple est d'utiliser un "disque reseau" dans ta base access.
Ouais, d'accord, mais ni mon système de développement, ni celui de l'hébergeur, ni celui du client ne sont raccordés au même réseau.
Claude Schneegans
Si j'ai bien compris ton problème,
T'as tout compris en effet ;-) C'est exactement ça mon problème.
J'ai créé une procédure reconnectant automatiquement les tables liées si nécessaire
Ok, c'est rusé en effet. Je pourrais d'ailleurs la simplifier pas mal vu que je n'aurais qu'une seule table à lier. Reste à voir comment je pourrais faire exécuter cette procédure à distance, ce n'est pas évident. Access n'est pas installé sur le serveur, seulement ODBC.
Merci.
Si j'ai bien compris ton problème,
T'as tout compris en effet ;-) C'est exactement ça mon problème.
J'ai créé une procédure reconnectant automatiquement les tables liées si
nécessaire
Ok, c'est rusé en effet. Je pourrais d'ailleurs la simplifier pas mal vu que je n'aurais qu'une seule table à lier.
Reste à voir comment je pourrais faire exécuter cette procédure à distance, ce n'est pas évident.
Access n'est pas installé sur le serveur, seulement ODBC.
T'as tout compris en effet ;-) C'est exactement ça mon problème.
J'ai créé une procédure reconnectant automatiquement les tables liées si nécessaire
Ok, c'est rusé en effet. Je pourrais d'ailleurs la simplifier pas mal vu que je n'aurais qu'une seule table à lier. Reste à voir comment je pourrais faire exécuter cette procédure à distance, ce n'est pas évident. Access n'est pas installé sur le serveur, seulement ODBC.
Merci.
Claude Schneegans
J'ai planché sur une autre avenue :
Je vois dans la table MsysObjects un enregistrement de type = 6 qui contient les information à propos de ma table attachée, avec le nom du fichier et les répertoires. Mais j'ai beau donner toutes les permissions possibles et imaginables, le système ne me laisse pas modifier quoique ce soit dans la table. C'est dommage, parce que ça serait une façon simple et élégante de régler le problème.
La solution de la procédure interne est intéressante, mais je ne vois pas comment je pourrais la faire exécuter par simple accès ODBC.
J'ai planché sur une autre avenue :
Je vois dans la table MsysObjects un enregistrement de type = 6 qui contient les
information à propos de ma table attachée, avec le nom du fichier et les
répertoires.
Mais j'ai beau donner toutes les permissions possibles et imaginables, le système ne
me laisse pas modifier quoique ce soit dans la table.
C'est dommage, parce que ça serait une façon simple et élégante de régler le
problème.
La solution de la procédure interne est intéressante, mais je ne vois pas comment je
pourrais la faire exécuter par simple accès ODBC.
Je vois dans la table MsysObjects un enregistrement de type = 6 qui contient les information à propos de ma table attachée, avec le nom du fichier et les répertoires. Mais j'ai beau donner toutes les permissions possibles et imaginables, le système ne me laisse pas modifier quoique ce soit dans la table. C'est dommage, parce que ça serait une façon simple et élégante de régler le problème.
La solution de la procédure interne est intéressante, mais je ne vois pas comment je pourrais la faire exécuter par simple accès ODBC.