Bonjour à tous,
Je repose (en partie) ma question du 28/11 laissée sans réponse...
Access 2007 Format base 2000
J'ai une appli. avec tables dans une base attachée Access.
Par Ex : Application dans C:\Appli\Appli.mdb, Tables dans
D:\Tables\Tables.mdb, les sauvegardes dans
D:\Sauvegardes\Tables2009-12-01.mdb (nom de la base avec la date de
sauvegarde), les archives dans D:\Archives\Tables2008.mdb (nom de la base
avec l'année de l'exercice)
En VBA :
J'ai mis en place les fonctionnalités "Sauvegarde/Restauration/Archivage des
tables"
Pas de pb. en sauvegarde (je copie la base D:\Tables\Tables.mdb dans le
dossier D:\Sauvegardes\), ni pour lire une archive, ni pour revenir à la
base courante (en modifiant les attaches)
En revanche, en restauration (je copie D:\Sauvegardes\Tables2009-12-01.mdb
par ex. dans D:\Tables\ et je la renomme Tables.mdb), j'ai qques pb.
(Evidemment, je fais ça "à la volée" et ça engendre qques
dysfonctionnements... ) :
soit Access ne "voit pas" les nouvelles tables (je ne retrouve pas les
enregistrements tels qu'ils étaient),
soit j'ai une erreur du genre "format de base de données inconnu ou
signet inexistant (?)"
J'ai bien essayer de rafraîchir les attaches, rien n'y fait.
Le pb. vient-il du fichier de lock ? (Tables.ldb)
Je suis obligé de fermer/réouvrir l'appli. pour que les modifs. soient
prises en compte.
Si qq1 a une idée, d'avance merci.
jpg
Tu ne peux/dois pas, entre autres, utiliser CurrentDb comme tu le fais, car à chaque utilisation, tu crées une nouvelle référence.
Dim Db as dao.database : Set Db = CurrentDb
est mieux, voir obligatoire...
Pour ce qui est de mises en oeuvre... je ne veux pas être tributaire d'une quelconque "nouveauté" et donc, les sauvegardes et autres des tables d'une dorsale ou non sont faites avec un peu de code passe partout ;-)
Salut 3Stone 1-Merci de la réponse 2-> il te faut te déconnecter totalement de la base dorsale (pas de formulaire ou autre y ayant sa source) Oui, c'est ce que j'avais fait (il y 2 formulaires à fermer) 3-Par contre, regarde les 3 procédures ci-dessous et dis-moi pourquoi les 2 premières posent problème et pas la dernière...
Public Function ModifierAttacheTables_Bug1(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String, Tbl As DAO.TableDef ModifierAttacheTables_Bug1 = True On Error GoTo Err_AttacherTables NbTables = CurrentDb().TableDefs().Count For I = 0 To NbTables - 1 Set Tbl = CurrentDb().TableDefs(I) If Tbl.Connect <> "" Then '<=Erreur n° 3420 : L'objet est incorrect ou n'est plus défini. Tbl.Connect = ";DATABASE=" & Chemin Tbl.RefreshLink End If Next I CurrentDb().TableDefs().Refresh Exit_AttacherTables: Set Tbl = Nothing Exit Function Err_AttacherTables: ModifierAttacheTables_Bug1 = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Public Function ModifierAttacheTables_Bug2(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String ModifierAttacheTables_Bug2 = True On Error GoTo Err_AttacherTables NbTables = CurrentDb().TableDefs().Count For I = 0 To NbTables - 1 If CurrentDb().TableDefs(I).Connect <> "" Then CurrentDb().TableDefs(I).Connect = ";DATABASE=" & Chemin '<=Ne modifie pas la connexion CurrentDb().TableDefs(I).RefreshLink End If Next I CurrentDb().TableDefs().Refresh Exit_AttacherTables: Exit Function Err_AttacherTables: ModifierAttacheTables_Bug2 = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Public Function ModifierAttacheTables_SansBug(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String, Db As DAO.Database, Tbl As DAO.TableDef Set Db = CurrentDb() ModifierAttacheTables_SansBug = True On Error GoTo Err_AttacherTables NbTables = Db.TableDefs().Count For I = 0 To NbTables - 1 Set Tbl = Db.TableDefs(I) If Tbl.Connect <> "" Then Tbl.Connect = ";DATABASE=" & Chemin Tbl.RefreshLink End If Next I Db.TableDefs().Refresh Exit_AttacherTables: Set Tbl = Nothing Set Db = Nothing Exit Function Err_AttacherTables: ModifierAttacheTables_SansBug = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Est-ce uniquement parceque dans la 3ème, on utilise une variable pour la CurrentDb() ? Avais-tu déjà mis en oeuvre ces fonctionnalités : Sauvegarde, Restauration, Archivage et "Consulter une archive" (je pense que oui) ; si tu as des conseils supplémentaires... A+ et meilleurs voeux, jpg "3stone" a écrit dans le message de news: upUnCL%
Salut,
jero wrote: [...]
J'ai fouillé sur le Web (Access Restauration tables vba) ; rien ou presque (sur la sauvegarde OUI, sur la restauration NON) Je reste persuadé que c'est le ".ldb" qui fout la zone...
Avant toute manipulation, il te faut te déconnecter totalement de la base dorsale (pas de formulaire ou autre y ayant sa source)
Puis, tu peux relier les tables en t'inspirant de ceci: http://www.3stone.be/access/articles.php?lng=fr&pg(
Tu ne peux/dois pas, entre autres, utiliser CurrentDb comme tu le
fais, car à chaque utilisation, tu crées une nouvelle référence.
Dim Db as dao.database : Set Db = CurrentDb
est mieux, voir obligatoire...
Pour ce qui est de mises en oeuvre... je ne veux pas être
tributaire d'une quelconque "nouveauté" et donc, les sauvegardes
et autres des tables d'une dorsale ou non sont faites avec un peu
de code passe partout ;-)
Salut 3Stone
1-Merci de la réponse
2-> il te faut te déconnecter totalement de la base dorsale (pas de
formulaire ou autre y ayant sa source)
Oui, c'est ce que j'avais fait (il y 2 formulaires à fermer)
3-Par contre, regarde les 3 procédures ci-dessous et dis-moi pourquoi
les 2 premières posent problème et pas la dernière...
Public Function ModifierAttacheTables_Bug1(Chemin As String) As
Boolean Dim NbTables As Integer, I As Integer, Msg As String, Tbl As
DAO.TableDef ModifierAttacheTables_Bug1 = True
On Error GoTo Err_AttacherTables
NbTables = CurrentDb().TableDefs().Count
For I = 0 To NbTables - 1
Set Tbl = CurrentDb().TableDefs(I)
If Tbl.Connect <> "" Then '<=Erreur n° 3420 : L'objet est
incorrect ou n'est plus défini.
Tbl.Connect = ";DATABASE=" & Chemin
Tbl.RefreshLink
End If
Next I
CurrentDb().TableDefs().Refresh
Exit_AttacherTables:
Set Tbl = Nothing
Exit Function
Err_AttacherTables:
ModifierAttacheTables_Bug1 = False
Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION
MsgBox Msg, vbOKOnly, ""
On Error GoTo 0
Resume Exit_AttacherTables
End Function
Public Function ModifierAttacheTables_Bug2(Chemin As String) As
Boolean Dim NbTables As Integer, I As Integer, Msg As String
ModifierAttacheTables_Bug2 = True
On Error GoTo Err_AttacherTables
NbTables = CurrentDb().TableDefs().Count
For I = 0 To NbTables - 1
If CurrentDb().TableDefs(I).Connect <> "" Then
CurrentDb().TableDefs(I).Connect = ";DATABASE=" & Chemin '<=Ne
modifie pas la connexion
CurrentDb().TableDefs(I).RefreshLink
End If
Next I
CurrentDb().TableDefs().Refresh
Exit_AttacherTables:
Exit Function
Err_AttacherTables:
ModifierAttacheTables_Bug2 = False
Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION
MsgBox Msg, vbOKOnly, ""
On Error GoTo 0
Resume Exit_AttacherTables
End Function
Public Function ModifierAttacheTables_SansBug(Chemin As String) As
Boolean Dim NbTables As Integer, I As Integer, Msg As String, Db As
DAO.Database, Tbl As DAO.TableDef
Set Db = CurrentDb()
ModifierAttacheTables_SansBug = True
On Error GoTo Err_AttacherTables
NbTables = Db.TableDefs().Count
For I = 0 To NbTables - 1
Set Tbl = Db.TableDefs(I)
If Tbl.Connect <> "" Then
Tbl.Connect = ";DATABASE=" & Chemin
Tbl.RefreshLink
End If
Next I
Db.TableDefs().Refresh
Exit_AttacherTables:
Set Tbl = Nothing
Set Db = Nothing
Exit Function
Err_AttacherTables:
ModifierAttacheTables_SansBug = False
Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION
MsgBox Msg, vbOKOnly, ""
On Error GoTo 0
Resume Exit_AttacherTables
End Function
Est-ce uniquement parceque dans la 3ème, on utilise une variable pour
la CurrentDb() ?
Avais-tu déjà mis en oeuvre ces fonctionnalités : Sauvegarde,
Restauration, Archivage et "Consulter une archive" (je pense que oui)
; si tu as des conseils supplémentaires...
A+ et meilleurs voeux,
jpg
"3stone" <home@sweet_home.be> a écrit dans le message de news:
upUnCL%23hKHA.1540@TK2MSFTNGP06.phx.gbl...
Salut,
jero wrote:
[...]
J'ai fouillé sur le Web (Access Restauration tables vba) ; rien ou
presque (sur la sauvegarde OUI, sur la restauration NON)
Je reste persuadé que c'est le ".ldb" qui fout la zone...
Avant toute manipulation, il te faut te déconnecter totalement
de la base dorsale (pas de formulaire ou autre y ayant sa source)
Puis, tu peux relier les tables en t'inspirant de ceci:
http://www.3stone.be/access/articles.php?lng=fr&pg(
Tu ne peux/dois pas, entre autres, utiliser CurrentDb comme tu le fais, car à chaque utilisation, tu crées une nouvelle référence.
Dim Db as dao.database : Set Db = CurrentDb
est mieux, voir obligatoire...
Pour ce qui est de mises en oeuvre... je ne veux pas être tributaire d'une quelconque "nouveauté" et donc, les sauvegardes et autres des tables d'une dorsale ou non sont faites avec un peu de code passe partout ;-)
Salut 3Stone 1-Merci de la réponse 2-> il te faut te déconnecter totalement de la base dorsale (pas de formulaire ou autre y ayant sa source) Oui, c'est ce que j'avais fait (il y 2 formulaires à fermer) 3-Par contre, regarde les 3 procédures ci-dessous et dis-moi pourquoi les 2 premières posent problème et pas la dernière...
Public Function ModifierAttacheTables_Bug1(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String, Tbl As DAO.TableDef ModifierAttacheTables_Bug1 = True On Error GoTo Err_AttacherTables NbTables = CurrentDb().TableDefs().Count For I = 0 To NbTables - 1 Set Tbl = CurrentDb().TableDefs(I) If Tbl.Connect <> "" Then '<=Erreur n° 3420 : L'objet est incorrect ou n'est plus défini. Tbl.Connect = ";DATABASE=" & Chemin Tbl.RefreshLink End If Next I CurrentDb().TableDefs().Refresh Exit_AttacherTables: Set Tbl = Nothing Exit Function Err_AttacherTables: ModifierAttacheTables_Bug1 = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Public Function ModifierAttacheTables_Bug2(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String ModifierAttacheTables_Bug2 = True On Error GoTo Err_AttacherTables NbTables = CurrentDb().TableDefs().Count For I = 0 To NbTables - 1 If CurrentDb().TableDefs(I).Connect <> "" Then CurrentDb().TableDefs(I).Connect = ";DATABASE=" & Chemin '<=Ne modifie pas la connexion CurrentDb().TableDefs(I).RefreshLink End If Next I CurrentDb().TableDefs().Refresh Exit_AttacherTables: Exit Function Err_AttacherTables: ModifierAttacheTables_Bug2 = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Public Function ModifierAttacheTables_SansBug(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String, Db As DAO.Database, Tbl As DAO.TableDef Set Db = CurrentDb() ModifierAttacheTables_SansBug = True On Error GoTo Err_AttacherTables NbTables = Db.TableDefs().Count For I = 0 To NbTables - 1 Set Tbl = Db.TableDefs(I) If Tbl.Connect <> "" Then Tbl.Connect = ";DATABASE=" & Chemin Tbl.RefreshLink End If Next I Db.TableDefs().Refresh Exit_AttacherTables: Set Tbl = Nothing Set Db = Nothing Exit Function Err_AttacherTables: ModifierAttacheTables_SansBug = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Est-ce uniquement parceque dans la 3ème, on utilise une variable pour la CurrentDb() ? Avais-tu déjà mis en oeuvre ces fonctionnalités : Sauvegarde, Restauration, Archivage et "Consulter une archive" (je pense que oui) ; si tu as des conseils supplémentaires... A+ et meilleurs voeux, jpg "3stone" a écrit dans le message de news: upUnCL%
Salut,
jero wrote: [...]
J'ai fouillé sur le Web (Access Restauration tables vba) ; rien ou presque (sur la sauvegarde OUI, sur la restauration NON) Je reste persuadé que c'est le ".ldb" qui fout la zone...
Avant toute manipulation, il te faut te déconnecter totalement de la base dorsale (pas de formulaire ou autre y ayant sa source)
Puis, tu peux relier les tables en t'inspirant de ceci: http://www.3stone.be/access/articles.php?lng=fr&pg(
Salut 3Stone (et meilleurs voeux et merci). Je m'en suis sorti de mon pb. de restauration avec une "bidouille" en passant par une AutoKeys Code (simplifié) : Cas n°1 : Ce qui fonctionne Private Sub btRestauration_Click() Dim Msg As String Msg = "Etes-vous certain de vouloir effectuer la restauration des tables ?" & vbCrLf & vbCrLf Msg = Msg & "Note importante : après avoir cliqué sur Oui, appuyez sur Ctrl+Maj+R pour lancer l'opération." If MsgBox(Msg, vbInformation + vbYesNo, "") = vbYes Then Echo False FermerFormulaires End If End Sub Note : la macro AutoKeys Ctrl+Maj+R exécute la procédure Restauration
Cas n° 2 : Ce qui ne fonctionne pas Private Sub btRestauration_Click() Dim Msg As String Msg = "Etes-vous certain de vouloir effectuer la restauration des tables ?" If MsgBox(Msg, vbInformation + vbYesNo, "") = vbYes Then Echo False FermerFormulaires Restauration End If End Sub
Dans le cas n°2, le fichier de lock .ldb n’est pas fermé après « FermerFormulaires » et ça plante. Il semble, qu’après cet appel, il faut vraiment « quitter » la procédure en cours. Voilà, voilà, A+
"3stone" a écrit dans le message de news: eX$
Salut,
Tu ne peux/dois pas, entre autres, utiliser CurrentDb comme tu le fais, car à chaque utilisation, tu crées une nouvelle référence.
Dim Db as dao.database : Set Db = CurrentDb
est mieux, voir obligatoire...
Pour ce qui est de mises en oeuvre... je ne veux pas être tributaire d'une quelconque "nouveauté" et donc, les sauvegardes et autres des tables d'une dorsale ou non sont faites avec un peu de code passe partout ;-)
Salut 3Stone 1-Merci de la réponse 2-> il te faut te déconnecter totalement de la base dorsale (pas de formulaire ou autre y ayant sa source) Oui, c'est ce que j'avais fait (il y 2 formulaires à fermer) 3-Par contre, regarde les 3 procédures ci-dessous et dis-moi pourquoi les 2 premières posent problème et pas la dernière...
Public Function ModifierAttacheTables_Bug1(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String, Tbl As DAO.TableDef ModifierAttacheTables_Bug1 = True On Error GoTo Err_AttacherTables NbTables = CurrentDb().TableDefs().Count For I = 0 To NbTables - 1 Set Tbl = CurrentDb().TableDefs(I) If Tbl.Connect <> "" Then '<=Erreur n° 3420 : L'objet est incorrect ou n'est plus défini. Tbl.Connect = ";DATABASE=" & Chemin Tbl.RefreshLink End If Next I CurrentDb().TableDefs().Refresh Exit_AttacherTables: Set Tbl = Nothing Exit Function Err_AttacherTables: ModifierAttacheTables_Bug1 = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Public Function ModifierAttacheTables_Bug2(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String ModifierAttacheTables_Bug2 = True On Error GoTo Err_AttacherTables NbTables = CurrentDb().TableDefs().Count For I = 0 To NbTables - 1 If CurrentDb().TableDefs(I).Connect <> "" Then CurrentDb().TableDefs(I).Connect = ";DATABASE=" & Chemin '<=Ne modifie pas la connexion CurrentDb().TableDefs(I).RefreshLink End If Next I CurrentDb().TableDefs().Refresh Exit_AttacherTables: Exit Function Err_AttacherTables: ModifierAttacheTables_Bug2 = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Public Function ModifierAttacheTables_SansBug(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String, Db As DAO.Database, Tbl As DAO.TableDef Set Db = CurrentDb() ModifierAttacheTables_SansBug = True On Error GoTo Err_AttacherTables NbTables = Db.TableDefs().Count For I = 0 To NbTables - 1 Set Tbl = Db.TableDefs(I) If Tbl.Connect <> "" Then Tbl.Connect = ";DATABASE=" & Chemin Tbl.RefreshLink End If Next I Db.TableDefs().Refresh Exit_AttacherTables: Set Tbl = Nothing Set Db = Nothing Exit Function Err_AttacherTables: ModifierAttacheTables_SansBug = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Est-ce uniquement parceque dans la 3ème, on utilise une variable pour la CurrentDb() ? Avais-tu déjà mis en oeuvre ces fonctionnalités : Sauvegarde, Restauration, Archivage et "Consulter une archive" (je pense que oui) ; si tu as des conseils supplémentaires... A+ et meilleurs voeux, jpg "3stone" a écrit dans le message de news: upUnCL%
Salut,
jero wrote: [...]
J'ai fouillé sur le Web (Access Restauration tables vba) ; rien ou presque (sur la sauvegarde OUI, sur la restauration NON) Je reste persuadé que c'est le ".ldb" qui fout la zone...
Avant toute manipulation, il te faut te déconnecter totalement de la base dorsale (pas de formulaire ou autre y ayant sa source)
Puis, tu peux relier les tables en t'inspirant de ceci: http://www.3stone.be/access/articles.php?lng=fr&pg(
Salut 3Stone (et meilleurs voeux et merci).
Je m'en suis sorti de mon pb. de restauration avec une "bidouille" en
passant par une AutoKeys
Code (simplifié) :
Cas n°1 : Ce qui fonctionne
Private Sub btRestauration_Click()
Dim Msg As String
Msg = "Etes-vous certain de vouloir effectuer la restauration des tables
?" & vbCrLf & vbCrLf
Msg = Msg & "Note importante : après avoir cliqué sur Oui, appuyez sur
Ctrl+Maj+R pour lancer l'opération."
If MsgBox(Msg, vbInformation + vbYesNo, "") = vbYes Then
Echo False
FermerFormulaires
End If
End Sub
Note : la macro AutoKeys Ctrl+Maj+R exécute la procédure Restauration
Cas n° 2 : Ce qui ne fonctionne pas
Private Sub btRestauration_Click()
Dim Msg As String
Msg = "Etes-vous certain de vouloir effectuer la restauration des tables
?"
If MsgBox(Msg, vbInformation + vbYesNo, "") = vbYes Then
Echo False
FermerFormulaires
Restauration
End If
End Sub
Dans le cas n°2, le fichier de lock .ldb n’est pas fermé après «
FermerFormulaires » et ça plante. Il semble, qu’après cet appel, il faut
vraiment « quitter » la procédure en cours.
Voilà, voilà,
A+
"3stone" <home@sweet_home.be> a écrit dans le message de news:
eX$yki6iKHA.1236@TK2MSFTNGP04.phx.gbl...
Salut,
Tu ne peux/dois pas, entre autres, utiliser CurrentDb comme tu le
fais, car à chaque utilisation, tu crées une nouvelle référence.
Dim Db as dao.database : Set Db = CurrentDb
est mieux, voir obligatoire...
Pour ce qui est de mises en oeuvre... je ne veux pas être
tributaire d'une quelconque "nouveauté" et donc, les sauvegardes
et autres des tables d'une dorsale ou non sont faites avec un peu
de code passe partout ;-)
Salut 3Stone
1-Merci de la réponse
2-> il te faut te déconnecter totalement de la base dorsale (pas de
formulaire ou autre y ayant sa source)
Oui, c'est ce que j'avais fait (il y 2 formulaires à fermer)
3-Par contre, regarde les 3 procédures ci-dessous et dis-moi pourquoi
les 2 premières posent problème et pas la dernière...
Public Function ModifierAttacheTables_Bug1(Chemin As String) As
Boolean Dim NbTables As Integer, I As Integer, Msg As String, Tbl As
DAO.TableDef ModifierAttacheTables_Bug1 = True
On Error GoTo Err_AttacherTables
NbTables = CurrentDb().TableDefs().Count
For I = 0 To NbTables - 1
Set Tbl = CurrentDb().TableDefs(I)
If Tbl.Connect <> "" Then '<=Erreur n° 3420 : L'objet est
incorrect ou n'est plus défini.
Tbl.Connect = ";DATABASE=" & Chemin
Tbl.RefreshLink
End If
Next I
CurrentDb().TableDefs().Refresh
Exit_AttacherTables:
Set Tbl = Nothing
Exit Function
Err_AttacherTables:
ModifierAttacheTables_Bug1 = False
Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION
MsgBox Msg, vbOKOnly, ""
On Error GoTo 0
Resume Exit_AttacherTables
End Function
Public Function ModifierAttacheTables_Bug2(Chemin As String) As
Boolean Dim NbTables As Integer, I As Integer, Msg As String
ModifierAttacheTables_Bug2 = True
On Error GoTo Err_AttacherTables
NbTables = CurrentDb().TableDefs().Count
For I = 0 To NbTables - 1
If CurrentDb().TableDefs(I).Connect <> "" Then
CurrentDb().TableDefs(I).Connect = ";DATABASE=" & Chemin '<=Ne
modifie pas la connexion
CurrentDb().TableDefs(I).RefreshLink
End If
Next I
CurrentDb().TableDefs().Refresh
Exit_AttacherTables:
Exit Function
Err_AttacherTables:
ModifierAttacheTables_Bug2 = False
Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION
MsgBox Msg, vbOKOnly, ""
On Error GoTo 0
Resume Exit_AttacherTables
End Function
Public Function ModifierAttacheTables_SansBug(Chemin As String) As
Boolean Dim NbTables As Integer, I As Integer, Msg As String, Db As
DAO.Database, Tbl As DAO.TableDef
Set Db = CurrentDb()
ModifierAttacheTables_SansBug = True
On Error GoTo Err_AttacherTables
NbTables = Db.TableDefs().Count
For I = 0 To NbTables - 1
Set Tbl = Db.TableDefs(I)
If Tbl.Connect <> "" Then
Tbl.Connect = ";DATABASE=" & Chemin
Tbl.RefreshLink
End If
Next I
Db.TableDefs().Refresh
Exit_AttacherTables:
Set Tbl = Nothing
Set Db = Nothing
Exit Function
Err_AttacherTables:
ModifierAttacheTables_SansBug = False
Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION
MsgBox Msg, vbOKOnly, ""
On Error GoTo 0
Resume Exit_AttacherTables
End Function
Est-ce uniquement parceque dans la 3ème, on utilise une variable pour
la CurrentDb() ?
Avais-tu déjà mis en oeuvre ces fonctionnalités : Sauvegarde,
Restauration, Archivage et "Consulter une archive" (je pense que oui)
; si tu as des conseils supplémentaires...
A+ et meilleurs voeux,
jpg
"3stone" <home@sweet_home.be> a écrit dans le message de news:
upUnCL%23hKHA.1540@TK2MSFTNGP06.phx.gbl...
Salut,
jero wrote:
[...]
J'ai fouillé sur le Web (Access Restauration tables vba) ; rien ou
presque (sur la sauvegarde OUI, sur la restauration NON)
Je reste persuadé que c'est le ".ldb" qui fout la zone...
Avant toute manipulation, il te faut te déconnecter totalement
de la base dorsale (pas de formulaire ou autre y ayant sa source)
Puis, tu peux relier les tables en t'inspirant de ceci:
http://www.3stone.be/access/articles.php?lng=fr&pg(
Salut 3Stone (et meilleurs voeux et merci). Je m'en suis sorti de mon pb. de restauration avec une "bidouille" en passant par une AutoKeys Code (simplifié) : Cas n°1 : Ce qui fonctionne Private Sub btRestauration_Click() Dim Msg As String Msg = "Etes-vous certain de vouloir effectuer la restauration des tables ?" & vbCrLf & vbCrLf Msg = Msg & "Note importante : après avoir cliqué sur Oui, appuyez sur Ctrl+Maj+R pour lancer l'opération." If MsgBox(Msg, vbInformation + vbYesNo, "") = vbYes Then Echo False FermerFormulaires End If End Sub Note : la macro AutoKeys Ctrl+Maj+R exécute la procédure Restauration
Cas n° 2 : Ce qui ne fonctionne pas Private Sub btRestauration_Click() Dim Msg As String Msg = "Etes-vous certain de vouloir effectuer la restauration des tables ?" If MsgBox(Msg, vbInformation + vbYesNo, "") = vbYes Then Echo False FermerFormulaires Restauration End If End Sub
Dans le cas n°2, le fichier de lock .ldb n’est pas fermé après « FermerFormulaires » et ça plante. Il semble, qu’après cet appel, il faut vraiment « quitter » la procédure en cours. Voilà, voilà, A+
"3stone" a écrit dans le message de news: eX$
Salut,
Tu ne peux/dois pas, entre autres, utiliser CurrentDb comme tu le fais, car à chaque utilisation, tu crées une nouvelle référence.
Dim Db as dao.database : Set Db = CurrentDb
est mieux, voir obligatoire...
Pour ce qui est de mises en oeuvre... je ne veux pas être tributaire d'une quelconque "nouveauté" et donc, les sauvegardes et autres des tables d'une dorsale ou non sont faites avec un peu de code passe partout ;-)
Salut 3Stone 1-Merci de la réponse 2-> il te faut te déconnecter totalement de la base dorsale (pas de formulaire ou autre y ayant sa source) Oui, c'est ce que j'avais fait (il y 2 formulaires à fermer) 3-Par contre, regarde les 3 procédures ci-dessous et dis-moi pourquoi les 2 premières posent problème et pas la dernière...
Public Function ModifierAttacheTables_Bug1(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String, Tbl As DAO.TableDef ModifierAttacheTables_Bug1 = True On Error GoTo Err_AttacherTables NbTables = CurrentDb().TableDefs().Count For I = 0 To NbTables - 1 Set Tbl = CurrentDb().TableDefs(I) If Tbl.Connect <> "" Then '<=Erreur n° 3420 : L'objet est incorrect ou n'est plus défini. Tbl.Connect = ";DATABASE=" & Chemin Tbl.RefreshLink End If Next I CurrentDb().TableDefs().Refresh Exit_AttacherTables: Set Tbl = Nothing Exit Function Err_AttacherTables: ModifierAttacheTables_Bug1 = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Public Function ModifierAttacheTables_Bug2(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String ModifierAttacheTables_Bug2 = True On Error GoTo Err_AttacherTables NbTables = CurrentDb().TableDefs().Count For I = 0 To NbTables - 1 If CurrentDb().TableDefs(I).Connect <> "" Then CurrentDb().TableDefs(I).Connect = ";DATABASE=" & Chemin '<=Ne modifie pas la connexion CurrentDb().TableDefs(I).RefreshLink End If Next I CurrentDb().TableDefs().Refresh Exit_AttacherTables: Exit Function Err_AttacherTables: ModifierAttacheTables_Bug2 = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Public Function ModifierAttacheTables_SansBug(Chemin As String) As Boolean Dim NbTables As Integer, I As Integer, Msg As String, Db As DAO.Database, Tbl As DAO.TableDef Set Db = CurrentDb() ModifierAttacheTables_SansBug = True On Error GoTo Err_AttacherTables NbTables = Db.TableDefs().Count For I = 0 To NbTables - 1 Set Tbl = Db.TableDefs(I) If Tbl.Connect <> "" Then Tbl.Connect = ";DATABASE=" & Chemin Tbl.RefreshLink End If Next I Db.TableDefs().Refresh Exit_AttacherTables: Set Tbl = Nothing Set Db = Nothing Exit Function Err_AttacherTables: ModifierAttacheTables_SansBug = False Msg = "Erreur n° " & Err.Number & " : " & Err.DESCRIPTION MsgBox Msg, vbOKOnly, "" On Error GoTo 0 Resume Exit_AttacherTables End Function
Est-ce uniquement parceque dans la 3ème, on utilise une variable pour la CurrentDb() ? Avais-tu déjà mis en oeuvre ces fonctionnalités : Sauvegarde, Restauration, Archivage et "Consulter une archive" (je pense que oui) ; si tu as des conseils supplémentaires... A+ et meilleurs voeux, jpg "3stone" a écrit dans le message de news: upUnCL%
Salut,
jero wrote: [...]
J'ai fouillé sur le Web (Access Restauration tables vba) ; rien ou presque (sur la sauvegarde OUI, sur la restauration NON) Je reste persuadé que c'est le ".ldb" qui fout la zone...
Avant toute manipulation, il te faut te déconnecter totalement de la base dorsale (pas de formulaire ou autre y ayant sa source)
Puis, tu peux relier les tables en t'inspirant de ceci: http://www.3stone.be/access/articles.php?lng=fr&pg(