Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sauvegarde, restauration et Archivage

12 réponses
Avatar
jero
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

10 réponses

1 2
Avatar
Blaise Cacramp
Selon : Bonjour ou bonsoir

Avec un exemple concret ?


Cdt, Blaise
---- ---- ----


"jero" <~ a écrit dans le message de news:
%23%
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:AppliAppli.mdb, Tables dans
D:TablesTables.mdb, les sauvegardes dans
D:SauvegardesTables2009-12-01.mdb (nom de la base avec la date de
sauvegarde), les archives dans D:ArchivesTables2008.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:TablesTables.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:SauvegardesTables2009-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




Avatar
jero
Bonjour,
Restauration : je remplace la base "attachée" par une des sauvegardes (mais
sans quitter l'application et c'est là que ça pose problème... évidemment)
Le code est tout simple (le pb. n'est pas là):
Private Sub btRestauration_Click()
Dim NomDossierSauvegarde As String, NomBaseSauvegardée As String,
NomBaseAttachée As String, NomDossierRestauration As String, Msg As String
NomDossierSauvegarde = DLookup("[DossierSauvegarde]",
"[tblParamètresApplication]")
'NomBaseAttachée = fctNomBaseAttachée()
'NomDossierRestauration = fctRépertoireBaseAttachée()
'Par exemple :
NomBaseAttachée = "Tables.mdb"
NomDossierRestauration = "C:Tables"
NomBaseSauvegardée = SélectionBase(NomDossierSauvegarde)
If NomBaseSauvegardée = "" Then Exit Sub
If CopieBase(NomBaseSauvegardée, NomBaseAttachée, NomDossierRestauration)
Then
Msg = "Restauration des tables : " & MSG_OPERATION_OK & vbCrLf
'Pour l'instant... (26/11/2009)
Msg = Msg & "L'application doit être fermée pour que la restauration
soit prise en compte." & vbCrLf
Msg = Msg & "Cliquez sur OK pour continuer."
MsgBox Msg, vbOKOnly, ""
DoCmd.Quit
Else
Msg = "Erreur de Restauration."
MsgBox Msg, vbCritical + vbOKOnly, ""
End If
End Sub

Public Function SélectionBase(DossierParDéfaut As String) As String
Dim Fd As FileDialog, FiltreFichier As String
SélectionBase = ""
Set Fd = Application.FileDialog(msoFileDialogFilePicker)
With Fd
.Title = "Sélection d'une base Access"
.InitialView = msoFileDialogViewDetails
.AllowMultiSelect = False
.InitialFileName = DossierParDéfaut
FiltreFichier = "*.mdb; *.accdb"
.Filters.Clear
.Filters.Add "Bases", FiltreFichier
If .Show Then
SélectionBase = .SelectedItems(1)
End If
End With
Set Fd = Nothing
End Function

Public Function CopieBase(NomBaseSource As String, NomBaseDestination As
String, DossierDestination As String) As Boolean
Dim oFs As Scripting.FileSystemObject, Msg As String
CopieBase = True
Set oFs = CreateObject("Scripting.FileSystemObject")
On Error GoTo Err_CopieBase
With oFs
.CopyFile NomBaseSource, DossierDestination & NomBaseDestination, True
End With
Exit_CopieBase:
Set oFs = Nothing
Exit Function

Err_CopieBase:
Msg = "Erreur n° " & Err.Number & vbCrLf
Msg = Msg & Err.DESCRIPTION
MsgBox Msg, vbCritical + vbOKOnly, ""
CopieBase = False
Resume Exit_CopieBase
End Function
Donc, ma question est la suivante : comment peut-on faire ça sans quitter
l'application ? D'ailleurs est-ce possible ?
Merci d'avance,
Avatar
Michel__D
Bonjour,

jero a écrit :
Bonjour,
Restauration : je remplace la base "attachée" par une des sauvegardes (mais
sans quitter l'application et c'est là que ça pose problème... évidemment)
Le code est tout simple (le pb. n'est pas là):
Private Sub btRestauration_Click()
Dim NomDossierSauvegarde As String, NomBaseSauvegardée As String,
NomBaseAttachée As String, NomDossierRestauration As String, Msg As String
NomDossierSauvegarde = DLookup("[DossierSauvegarde]",
"[tblParamètresApplication]")
'NomBaseAttachée = fctNomBaseAttachée()
'NomDossierRestauration = fctRépertoireBaseAttachée()
'Par exemple :
NomBaseAttachée = "Tables.mdb"
NomDossierRestauration = "C:Tables"
NomBaseSauvegardée = SélectionBase(NomDossierSauvegarde)
If NomBaseSauvegardée = "" Then Exit Sub
If CopieBase(NomBaseSauvegardée, NomBaseAttachée, NomDossierRestauration)
Then
Msg = "Restauration des tables : " & MSG_OPERATION_OK & vbCrLf
'Pour l'instant... (26/11/2009)
Msg = Msg & "L'application doit être fermée pour que la restauration
soit prise en compte." & vbCrLf
Msg = Msg & "Cliquez sur OK pour continuer."
MsgBox Msg, vbOKOnly, ""
DoCmd.Quit
Else
Msg = "Erreur de Restauration."
MsgBox Msg, vbCritical + vbOKOnly, ""
End If
End Sub

Public Function SélectionBase(DossierParDéfaut As String) As String
Dim Fd As FileDialog, FiltreFichier As String
SélectionBase = ""
Set Fd = Application.FileDialog(msoFileDialogFilePicker)
With Fd
.Title = "Sélection d'une base Access"
.InitialView = msoFileDialogViewDetails
.AllowMultiSelect = False
.InitialFileName = DossierParDéfaut
FiltreFichier = "*.mdb; *.accdb"
.Filters.Clear
.Filters.Add "Bases", FiltreFichier
If .Show Then
SélectionBase = .SelectedItems(1)
End If
End With
Set Fd = Nothing
End Function

Public Function CopieBase(NomBaseSource As String, NomBaseDestination As
String, DossierDestination As String) As Boolean
Dim oFs As Scripting.FileSystemObject, Msg As String
CopieBase = True
Set oFs = CreateObject("Scripting.FileSystemObject")
On Error GoTo Err_CopieBase
With oFs
.CopyFile NomBaseSource, DossierDestination & NomBaseDestination, True
End With
Exit_CopieBase:
Set oFs = Nothing
Exit Function

Err_CopieBase:
Msg = "Erreur n° " & Err.Number & vbCrLf
Msg = Msg & Err.DESCRIPTION
MsgBox Msg, vbCritical + vbOKOnly, ""
CopieBase = False
Resume Exit_CopieBase
End Function
Donc, ma question est la suivante : comment peut-on faire ça sans quitter
l'application ? D'ailleurs est-ce possible ?
Merci d'avance,



Tu as essayé de supprimer tes liens vers tes tables, puis tu remplace
ta base qui contient les tables et tu attache à nouveau tes tables.
Avatar
jero
Salut Michel__D,
Premièrement, merci de répondre (je n'ai pas eu beaucoup de réponses...)
Tu as essayé de supprimer tes liens vers tes tables, puis tu remplace
ta base qui contient les tables et tu attache à nouveau tes tables.


J'ai essayé ça (extrait) pour supprimer les liens :
Sub Test()
Dim NbTables As Integer, I As Integer, Table As DAO.TableDef, Chemin As
String
Chemin = "C:$BudgetCETablesBudgetCETablesComptaCE.mdb"
For I = 0 To NbTables - 1
Set Table = CurrentDb.TableDefs(I)
If Table.Connect <> "" Then
Table.Connect = ""
Table.RefreshLink
End If
Next I
CurrentDb.TableDefs().Refresh 'Utile ?
Stop 'Pour vérifier j'ai fermé la base qui réouvert : aucun changement
'et ça pour rétablir :
For I = 0 To NbTables - 1
Set Table = CurrentDb.TableDefs(I)
If Table.Connect <> "" Then
Table.Connect = ";DATABASE=" & Chemin
Table.RefreshLink
End If
Next I

End Sub
...mais, apparemment, ça ne change pas grand chose (j'ai toujours les mêmes
tables liées avec le meme chemin..)
donc, apparemment, Table.Connect = "" ne suffit pas.
jpg



"Michel__D" a écrit dans le m


essage de news:
Bonjour,

jero a écrit :
Bonjour,
Restauration : je remplace la base "attachée" par une des sauvegardes
(mais sans quitter l'application et c'est là que ça pose problème...
évidemment)
Le code est tout simple (le pb. n'est pas là):
Private Sub btRestauration_Click()
Dim NomDossierSauvegarde As String, NomBaseSauvegardée As String,
NomBaseAttachée As String, NomDossierRestauration As String, Msg As
String
NomDossierSauvegarde = DLookup("[DossierSauvegarde]",
"[tblParamètresApplication]")
'NomBaseAttachée = fctNomBaseAttachée()
'NomDossierRestauration = fctRépertoireBaseAttachée()
'Par exemple :
NomBaseAttachée = "Tables.mdb"
NomDossierRestauration = "C:Tables"
NomBaseSauvegardée = SélectionBase(NomDossierSauvegarde)
If NomBaseSauvegardée = "" Then Exit Sub
If CopieBase(NomBaseSauvegardée, NomBaseAttachée, NomDossierRestauration)
Then
Msg = "Restauration des tables : " & MSG_OPERATION_OK & vbCrLf
'Pour l'instant... (26/11/2009)
Msg = Msg & "L'application doit être fermée pour que la restauration
soit prise en compte." & vbCrLf
Msg = Msg & "Cliquez sur OK pour continuer."
MsgBox Msg, vbOKOnly, ""
DoCmd.Quit
Else
Msg = "Erreur de Restauration."
MsgBox Msg, vbCritical + vbOKOnly, ""
End If
End Sub

Public Function SélectionBase(DossierParDéfaut As String) As String
Dim Fd As FileDialog, FiltreFichier As String
SélectionBase = ""
Set Fd = Application.FileDialog(msoFileDialogFilePicker)
With Fd
.Title = "Sélection d'une base Access"
.InitialView = msoFileDialogViewDetails
.AllowMultiSelect = False
.InitialFileName = DossierParDéfaut
FiltreFichier = "*.mdb; *.accdb"
.Filters.Clear
.Filters.Add "Bases", FiltreFichier
If .Show Then
SélectionBase = .SelectedItems(1)
End If
End With
Set Fd = Nothing
End Function

Public Function CopieBase(NomBaseSource As String, NomBaseDestination As
String, DossierDestination As String) As Boolean
Dim oFs As Scripting.FileSystemObject, Msg As String
CopieBase = True
Set oFs = CreateObject("Scripting.FileSystemObject")
On Error GoTo Err_CopieBase
With oFs
.CopyFile NomBaseSource, DossierDestination & NomBaseDestination,
True
End With
Exit_CopieBase:
Set oFs = Nothing
Exit Function

Err_CopieBase:
Msg = "Erreur n° " & Err.Number & vbCrLf
Msg = Msg & Err.DESCRIPTION
MsgBox Msg, vbCritical + vbOKOnly, ""
CopieBase = False
Resume Exit_CopieBase
End Function
Donc, ma question est la suivante : comment peut-on faire ça sans quitter
l'application ? D'ailleurs est-ce possible ?
Merci d'avance,



Tu as essayé de supprimer tes liens vers tes tables, puis tu remplace
ta base qui contient les tables et tu attache à nouveau tes tables.


Avatar
Michel__D
Bonjour,

jero a écrit :
Salut Michel__D,
Premièrement, merci de répondre (je n'ai pas eu beaucoup de réponses...)

Tu as essayé de supprimer tes liens vers tes tables, puis tu remplace
ta base qui contient les tables et tu attache à nouveau tes tables.



J'ai essayé ça (extrait) pour supprimer les liens :
Sub Test()
Dim NbTables As Integer, I As Integer, Table As DAO.TableDef, Chemin As
String
Chemin = "C:$BudgetCETablesBudgetCETablesComptaCE.mdb"
For I = 0 To NbTables - 1
Set Table = CurrentDb.TableDefs(I)
If Table.Connect <> "" Then
Table.Connect = ""
Table.RefreshLink
End If
Next I
CurrentDb.TableDefs().Refresh 'Utile ?
Stop 'Pour vérifier j'ai fermé la base qui réouvert : aucun changement
'et ça pour rétablir :
For I = 0 To NbTables - 1
Set Table = CurrentDb.TableDefs(I)
If Table.Connect <> "" Then
Table.Connect = ";DATABASE=" & Chemin
Table.RefreshLink
End If
Next I

End Sub
....mais, apparemment, ça ne change pas grand chose (j'ai toujours les mêmes
tables liées avec le meme chemin..)
donc, apparemment, Table.Connect = "" ne suffit pas.
jpg



"Michel__D" a écrit dans le m


essage de news:

Bonjour,

jero a écrit :

Bonjour,
Restauration : je remplace la base "attachée" par une des sauvegardes
(mais sans quitter l'application et c'est là que ça pose problème...
évidemment)
Le code est tout simple (le pb. n'est pas là):
Private Sub btRestauration_Click()
Dim NomDossierSauvegarde As String, NomBaseSauvegardée As String,
NomBaseAttachée As String, NomDossierRestauration As String, Msg As
String
NomDossierSauvegarde = DLookup("[DossierSauvegarde]",
"[tblParamètresApplication]")
'NomBaseAttachée = fctNomBaseAttachée()
'NomDossierRestauration = fctRépertoireBaseAttachée()
'Par exemple :
NomBaseAttachée = "Tables.mdb"
NomDossierRestauration = "C:Tables"
NomBaseSauvegardée = SélectionBase(NomDossierSauvegarde)
If NomBaseSauvegardée = "" Then Exit Sub
If CopieBase(NomBaseSauvegardée, NomBaseAttachée, NomDossierRestauration)
Then
Msg = "Restauration des tables : " & MSG_OPERATION_OK & vbCrLf
'Pour l'instant... (26/11/2009)
Msg = Msg & "L'application doit être fermée pour que la restauration
soit prise en compte." & vbCrLf
Msg = Msg & "Cliquez sur OK pour continuer."
MsgBox Msg, vbOKOnly, ""
DoCmd.Quit
Else
Msg = "Erreur de Restauration."
MsgBox Msg, vbCritical + vbOKOnly, ""
End If
End Sub

Public Function SélectionBase(DossierParDéfaut As String) As String
Dim Fd As FileDialog, FiltreFichier As String
SélectionBase = ""
Set Fd = Application.FileDialog(msoFileDialogFilePicker)
With Fd
.Title = "Sélection d'une base Access"
.InitialView = msoFileDialogViewDetails
.AllowMultiSelect = False
.InitialFileName = DossierParDéfaut
FiltreFichier = "*.mdb; *.accdb"
.Filters.Clear
.Filters.Add "Bases", FiltreFichier
If .Show Then
SélectionBase = .SelectedItems(1)
End If
End With
Set Fd = Nothing
End Function

Public Function CopieBase(NomBaseSource As String, NomBaseDestination As
String, DossierDestination As String) As Boolean
Dim oFs As Scripting.FileSystemObject, Msg As String
CopieBase = True
Set oFs = CreateObject("Scripting.FileSystemObject")
On Error GoTo Err_CopieBase
With oFs
.CopyFile NomBaseSource, DossierDestination & NomBaseDestination,
True
End With
Exit_CopieBase:
Set oFs = Nothing
Exit Function

Err_CopieBase:
Msg = "Erreur n° " & Err.Number & vbCrLf
Msg = Msg & Err.DESCRIPTION
MsgBox Msg, vbCritical + vbOKOnly, ""
CopieBase = False
Resume Exit_CopieBase
End Function
Donc, ma question est la suivante : comment peut-on faire ça sans quitter
l'application ? D'ailleurs est-ce possible ?
Merci d'avance,



Tu as essayé de supprimer tes liens vers tes tables, puis tu remplace
ta base qui contient les tables et tu attache à nouveau tes tables.








Je t'avais suggéré de supprimer tes tables liées, pas de d'effacer la

chaîne de connection de tes tables liées.
Avatar
jero
Bonjour Michel__D,
J'ai supprimé les tables attachées et remplacé la base qui contient les
tables, et j'ai attaché à nouveau les tables.
ça marche mais les données ne sont toujours pas actualisées.
Note : après suppression des tables attachées, le fichier TablesComptaCE.ldb
existe toujours (et impossible de le supprimer).
J'ai remarqué qu'en fermant le formulaire principal et en l'ouvrant de
nouveau, les données sont bien actualisées.
J'ai donc essayé d'ajouter ça à mon code :
Echo False
DoCmd.Close acForm, "frmMenuPrincipal", acSaveNo
DoCmd.OpenForm "frmMenuPrincipal", acNormal, , , , acDialog
Echo True
Mais, ça ne donne rien...
Joyeux Noël
jpg

"Michel__D" a écrit dans le message de
news:
Bonjour,

jero a écrit :
Salut Michel__D,
Premièrement, merci de répondre (je n'ai pas eu beaucoup de réponses...)

Tu as essayé de supprimer tes liens vers tes tables, puis tu remplace
ta base qui contient les tables et tu attache à nouveau tes tables.



J'ai essayé ça (extrait) pour supprimer les liens :
Sub Test()
Dim NbTables As Integer, I As Integer, Table As DAO.TableDef, Chemin As
String
Chemin = "C:$BudgetCETablesBudgetCETablesComptaCE.mdb"
For I = 0 To NbTables - 1
Set Table = CurrentDb.TableDefs(I)
If Table.Connect <> "" Then
Table.Connect = ""
Table.RefreshLink
End If
Next I
CurrentDb.TableDefs().Refresh 'Utile ?
Stop 'Pour vérifier j'ai fermé la base qui réouvert : aucun changement
'et ça pour rétablir :
For I = 0 To NbTables - 1
Set Table = CurrentDb.TableDefs(I)
If Table.Connect <> "" Then
Table.Connect = ";DATABASE=" & Chemin
Table.RefreshLink
End If
Next I

End Sub
....mais, apparemment, ça ne change pas grand chose (j'ai toujours les
mêmes tables liées avec le meme chemin..)
donc, apparemment, Table.Connect = "" ne suffit pas.
jpg



"Michel__D" a écrit dans le m


essage de news:

Bonjour,

jero a écrit :

Bonjour,
Restauration : je remplace la base "attachée" par une des sauvegardes
(mais sans quitter l'application et c'est là que ça pose problème...
évidemment)
Le code est tout simple (le pb. n'est pas là):
Private Sub btRestauration_Click()
Dim NomDossierSauvegarde As String, NomBaseSauvegardée As String,
NomBaseAttachée As String, NomDossierRestauration As String, Msg As
String
NomDossierSauvegarde = DLookup("[DossierSauvegarde]",
"[tblParamètresApplication]")
'NomBaseAttachée = fctNomBaseAttachée()
'NomDossierRestauration = fctRépertoireBaseAttachée()
'Par exemple :
NomBaseAttachée = "Tables.mdb"
NomDossierRestauration = "C:Tables"
NomBaseSauvegardée = SélectionBase(NomDossierSauvegarde)
If NomBaseSauvegardée = "" Then Exit Sub
If CopieBase(NomBaseSauvegardée, NomBaseAttachée,
NomDossierRestauration) Then
Msg = "Restauration des tables : " & MSG_OPERATION_OK & vbCrLf
'Pour l'instant... (26/11/2009)
Msg = Msg & "L'application doit être fermée pour que la
restauration soit prise en compte." & vbCrLf
Msg = Msg & "Cliquez sur OK pour continuer."
MsgBox Msg, vbOKOnly, ""
DoCmd.Quit
Else
Msg = "Erreur de Restauration."
MsgBox Msg, vbCritical + vbOKOnly, ""
End If
End Sub

Public Function SélectionBase(DossierParDéfaut As String) As String
Dim Fd As FileDialog, FiltreFichier As String
SélectionBase = ""
Set Fd = Application.FileDialog(msoFileDialogFilePicker)
With Fd
.Title = "Sélection d'une base Access"
.InitialView = msoFileDialogViewDetails
.AllowMultiSelect = False
.InitialFileName = DossierParDéfaut
FiltreFichier = "*.mdb; *.accdb"
.Filters.Clear
.Filters.Add "Bases", FiltreFichier
If .Show Then
SélectionBase = .SelectedItems(1)
End If
End With
Set Fd = Nothing
End Function

Public Function CopieBase(NomBaseSource As String, NomBaseDestination
As String, DossierDestination As String) As Boolean
Dim oFs As Scripting.FileSystemObject, Msg As String
CopieBase = True
Set oFs = CreateObject("Scripting.FileSystemObject")
On Error GoTo Err_CopieBase
With oFs
.CopyFile NomBaseSource, DossierDestination & NomBaseDestination,
True
End With
Exit_CopieBase:
Set oFs = Nothing
Exit Function

Err_CopieBase:
Msg = "Erreur n° " & Err.Number & vbCrLf
Msg = Msg & Err.DESCRIPTION
MsgBox Msg, vbCritical + vbOKOnly, ""
CopieBase = False
Resume Exit_CopieBase
End Function
Donc, ma question est la suivante : comment peut-on faire ça sans
quitter l'application ? D'ailleurs est-ce possible ?
Merci d'avance,



Tu as essayé de supprimer tes liens vers tes tables, puis tu remplace
ta base qui contient les tables et tu attache à nouveau tes tables.







Je t'avais suggéré de supprimer tes tables liées, pas de d'effacer la

chaîne de connection de tes tables liées.


Avatar
Michel__D
Bonjour,

Si ton formukaire "frmMenuPrincipal" accède aux tables attachées, la
présence du fichier .ldb est normale
il faudrait essayer de fermer le formulaire "frmMenuPrincipal" et de
faire ta manipulation dans un autre formulaire.

Bonnes Fêtes à tous.

jero a écrit :
Bonjour Michel__D,
J'ai supprimé les tables attachées et remplacé la base qui contient les
tables, et j'ai attaché à nouveau les tables.
ça marche mais les données ne sont toujours pas actualisées.
Note : après suppression des tables attachées, le fichier TablesComptaCE.ldb
existe toujours (et impossible de le supprimer).
J'ai remarqué qu'en fermant le formulaire principal et en l'ouvrant de
nouveau, les données sont bien actualisées.
J'ai donc essayé d'ajouter ça à mon code :
Echo False
DoCmd.Close acForm, "frmMenuPrincipal", acSaveNo
DoCmd.OpenForm "frmMenuPrincipal", acNormal, , , , acDialog
Echo True
Mais, ça ne donne rien...
Joyeux Noël
jpg

"Michel__D" a écrit dans le message de
news:

Bonjour,

jero a écrit :

Salut Michel__D,
Premièrement, merci de répondre (je n'ai pas eu beaucoup de réponses...)


Tu as essayé de supprimer tes liens vers tes tables, puis tu remplace
ta base qui contient les tables et tu attache à nouveau tes tables.




J'ai essayé ça (extrait) pour supprimer les liens :
Sub Test()
Dim NbTables As Integer, I As Integer, Table As DAO.TableDef, Chemin As
String
Chemin = "C:$BudgetCETablesBudgetCETablesComptaCE.mdb"
For I = 0 To NbTables - 1
Set Table = CurrentDb.TableDefs(I)
If Table.Connect <> "" Then
Table.Connect = ""
Table.RefreshLink
End If
Next I
CurrentDb.TableDefs().Refresh 'Utile ?
Stop 'Pour vérifier j'ai fermé la base qui réouvert : aucun changement
'et ça pour rétablir :
For I = 0 To NbTables - 1
Set Table = CurrentDb.TableDefs(I)
If Table.Connect <> "" Then
Table.Connect = ";DATABASE=" & Chemin
Table.RefreshLink
End If
Next I

End Sub
....mais, apparemment, ça ne change pas grand chose (j'ai toujours les
mêmes tables liées avec le meme chemin..)
donc, apparemment, Table.Connect = "" ne suffit pas.
jpg







Avatar
jero
Salut Michel__D
la présence du fichier .ldb est normale : oui, je sais...
il faudrait essayer de fermer le formulaire "frmMenuPrincipal" et de faire
ta manipulation dans un autre formulaire.


C'est ce que je viens d'essayer (j'exécute une procédure d'un module
standard) : pas plus de réussite...
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...
A+ et encore merci.
jpg



"Michel__D" a écrit dans le message de
news:
Bonjour,

Si ton formukaire "frmMenuPrincipal" accède aux tables attachées, la
présence du fichier .ldb est normale
il faudrait essayer de fermer le formulaire "frmMenuPrincipal" et de faire
ta manipulation dans un autre formulaire.

Bonnes Fêtes à tous.

jero a écrit :
Bonjour Michel__D,
J'ai supprimé les tables attachées et remplacé la base qui contient les
tables, et j'ai attaché à nouveau les tables.
ça marche mais les données ne sont toujours pas actualisées.
Note : après suppression des tables attachées, le fichier
TablesComptaCE.ldb existe toujours (et impossible de le supprimer).
J'ai remarqué qu'en fermant le formulaire principal et en l'ouvrant de
nouveau, les données sont bien actualisées.
J'ai donc essayé d'ajouter ça à mon code :
Echo False
DoCmd.Close acForm, "frmMenuPrincipal", acSaveNo
DoCmd.OpenForm "frmMenuPrincipal", acNormal, , , , acDialog
Echo True
Mais, ça ne donne rien...
Joyeux Noël
jpg

"Michel__D" a écrit dans le message
de news:

Bonjour,

jero a écrit :

Salut Michel__D,
Premièrement, merci de répondre (je n'ai pas eu beaucoup de
réponses...)


Tu as essayé de supprimer tes liens vers tes tables, puis tu remplace
ta base qui contient les tables et tu attache à nouveau tes tables.




J'ai essayé ça (extrait) pour supprimer les liens :
Sub Test()
Dim NbTables As Integer, I As Integer, Table As DAO.TableDef, Chemin As
String
Chemin = "C:$BudgetCETablesBudgetCETablesComptaCE.mdb"
For I = 0 To NbTables - 1
Set Table = CurrentDb.TableDefs(I)
If Table.Connect <> "" Then
Table.Connect = ""
Table.RefreshLink
End If
Next I
CurrentDb.TableDefs().Refresh 'Utile ?
Stop 'Pour vérifier j'ai fermé la base qui réouvert : aucun changement
'et ça pour rétablir :
For I = 0 To NbTables - 1
Set Table = CurrentDb.TableDefs(I)
If Table.Connect <> "" Then
Table.Connect = ";DATABASE=" & Chemin
Table.RefreshLink
End If
Next I

End Sub
....mais, apparemment, ça ne change pas grand chose (j'ai toujours les
mêmes tables liées avec le meme chemin..)
donc, apparemment, Table.Connect = "" ne suffit pas.
jpg









Avatar
3stone
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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.3stone.be/access/articles.php?lng=fr&pg(

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
jero
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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.3stone.be/access/articles.php?lng=fr&pg(

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)



1 2