Sauvegarde, restauration et Archivage

Le
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: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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Blaise Cacramp
Le #20739651
Selon : Bonjour ou bonsoir

Avec un exemple concret ?


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


"jero" %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




jero
Le #20763961
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,
Michel__D
Le #20800211
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.
jero
Le #20808821
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"

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.


Michel__D
Le #20813131
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"

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.
jero
Le #20832201
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" 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"

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.


Michel__D
Le #20832551
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" 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







jero
Le #20837311
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" 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" 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









3stone
Le #20848181
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(

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
jero
Le #20860481
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" 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(

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



Publicité
Poster une réponse
Anonyme