Sauvegarder une base de données Access

Messages postés
2
Date d'inscription
jeudi 17 mars 2005
Statut
Membre
Dernière intervention
21 mars 2005
- - Dernière réponse : andalo
Messages postés
103
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
20 octobre 2012
- 8 nov. 2007 à 15:10
Salut à tous !
En fait je suis actuellement sur une application sur vb6 et je souhaiterais dans la mesure du possible pourvoir sauvegarder ma base de données Acces.
Le problème, c'est que cela peut et doit se faire n'importe quand à partir d'un clique sur un "CommandBouton" par exemple apres avoir selectionné le chemin où l'on souhaite enregistrer la base de données, il faut également savoir que la base de données est ouverte d'office lors de l'execution de l'application dans le module, c'est du DAO que je fais plus précisement.
J'ai regardé les divers éléments qui auraient pu m'aidé sur le site, mais je n'ai pas trouvé de remède, ou alors ça ne collait pas avec ce que je voulais faire.
Y a-t-il quelqu'un apte à m'aider s'il vous plait?
Merci d'avance.
Afficher la suite 

7 réponses

Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
0
Merci
Salut,

Pour pouvoir sauvegarder ta base, il faut qu'elle ne soit ouverte par aucun prog.
Si ta base est mono-utilisateur, tu dois la fermer, faire ta sauvegarde puis la réouvrir. Pas d'autre solution avec access.

Si tu as un recorset en cours, ça signifie aussi que tu dois le recréer et rafraichir ton affichage.

Loup Gris
Messages postés
797
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
4
0
Merci
Salut ;O)

CanisLupus > dans le cas d'un simple FileCopy de VB, en effet il faut que la DB soit fermée sinon il y aura une erreur 70 : Permission Denied. Mais il ne faut pas dire qu'il n'y a pas d'autre solution avec Access... Tu te trompes !

Il est donc possible de copier un fichier en cours d'utilisation. Pour simple exemple, ouvre une DB Access, va dans l'explorateur de Windows et fais un copier-coller de cette DB. Et Ô miracle, cela fonctionne...

Pour arriver à cela, FileCopy de VB n'est pas approprié. Il faudra utiliser l'API CopyFileEx.

Code :

'DECLARATION API

Public Declare Function CopyFileEx Lib "kernel32.dll" Alias "CopyFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal lpProgressRoutine As Long, lpData As Any, ByRef pbCancel As Long, ByVal dwCopyFlags As Long) As Long

'UTILISATION

Dim ret As Long

ret = CopyFileEx("C:\DirectorySource\MaDbSource.Mdb", "C:\DirectoryCible\MaDbCible.Mdb", ByVal 0&, ByVal 0&, ByVal 0&, &H2)

If ret = 0 the MsgBox "Copie réussie" Else Msgbox "La copie a échoué"

Mais comme le disait CannisLupus, les transactions en cours, etc ne seront pas prises en compte. Ce qui est normal !

Guy
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
0
Merci
Effectivement Guy, tu as raison. Je n'avais pas pensé à l'API.

Loup Gris
Messages postés
797
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
4
0
Merci
CanisLupus> on ne peut pas penser à tout ;O)
Messages postés
2
Date d'inscription
jeudi 17 mars 2005
Statut
Membre
Dernière intervention
21 mars 2005
0
Merci
Salut
je vous remercie de m'avoir répondu et le probleme est effectivement le fait que la bd soit ouverte, donc dès lors, jai fait un "bd.close" et apres avoir effectuer l'enregistrement je reouvre la bd et là ça fonctionne !! c'est comme un miracle parfois (lol) mais le souci c'est qu'une disquette c'est trop petit pour la base de données que j'ai à sauvegarder mais heuresement que je peux egalement enregistrer sur mon disque dur ou sur une clé usb
par contre pour l'API je ne sais pas m'en servir malheuresement
merci de votre aide
@ bientot
Messages postés
797
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
4
0
Merci
Crazyturky> Il suffisait de faire un copier-coller et d'adapter selon ton besoin. Mais tu n'es peut-être pas habitué avec les API... L'avantage de l'API proposée est que la DB peut rester ouverte pendant la copie. A toit de voir.
Messages postés
103
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
20 octobre 2012
0
Merci
j'aadore, neobalastik, les deux methodes sont bonnes, mais pas fermer sa base et pas relancer la connexion et tous l'affichage c'est vraiment la classe. Le seul truc que je ne pige pas ce sont les variables aprés le chemin d'origine et le chemin de destination, j'ai utilisé tel quel sans savoir cea quoi ca sert, mais bon ca marche du feu de dieu.