Sauvegarder une base de données Access

Crazyturky Messages postés 2 Date d'inscription jeudi 17 mars 2005 Statut Membre Dernière intervention 21 mars 2005 - 18 mars 2005 à 22:19
andalo Messages postés 102 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.

7 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
18 mars 2005 à 23:37
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
0
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
19 mars 2005 à 15:17
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
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
19 mars 2005 à 15:36
Effectivement Guy, tu as raison. Je n'avais pas pensé à l'API.

Loup Gris
0
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
19 mars 2005 à 18:23
CanisLupus> on ne peut pas penser à tout ;O)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Crazyturky Messages postés 2 Date d'inscription jeudi 17 mars 2005 Statut Membre Dernière intervention 21 mars 2005
21 mars 2005 à 16:22
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
0
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
22 mars 2005 à 08:42
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.
0
andalo Messages postés 102 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 20 octobre 2012
8 nov. 2007 à 15:10
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.
0
Rejoignez-nous