Sur le modèle du suprême proposé par Dude ici : https://forum.openoffice.org/fr/forum/v ... =15&t=6872 et dans la lignée de ce message là : https://forum.openoffice.org/fr/forum/v ... =8&t=57294, je souhaite non pas créer une source de données mais la remplacer de manière automatique en utilisant le classeur courant comme source.
Mon code modifié est donc le suivant :
Code : Tout sélectionner
Sub ActualiserSource(vSource as String, vChemin as String)
Dim vBase as string
Dim vContexte, vSrcODB as Object
vBase = vChemin & vSource & ".odb"
' on vérifie que la source est déclarée et, dans ce cas, on casse le lien
vContexte = createUnoService("com.sun.star.sdb.DatabaseContext")
If vContexte.hasByName(vSource) Then
vContexte.revokeObject(vSource)
end if
' désormais, la source n'est plus enregistrée, on recrée le lien avec le fichier Base (.odb)
' la création du lien va forcer l'actualisation de la source
vSrcODB = createUnoService("com.sun.star.sdb.DataSource")
vBase = ConvertToURL(vChemin)
vSrcODB.DatabaseDocument.storeAsURL(vBase & vSource & ".odb", Array())
vBase = "sdbc:calc:" & thisComponent.geturl()
vContexte.registerObject(vSource, vSrcODB)
vSrcODB.setPropertyValue("URL", vBase)
vSrcODB.DatabaseDocument.store()
end sub
Il semble qu'il y ait un problème d'accès à ma base odb, ce qui est confirmé quand je tente de renommer à la main ce fichier, renommage bloqué car le fichier est ouvert dans libreoffice (ce qui doit être en arrière plan puisque je n'ai pas la vue sur ce fichier)
Y-a-t'il moyen, après avoir révoqué la base, d'en forcer la fermeture alors que je ne l'ai jamais nulle part explicitement ouverte ?
Dans le cas contraire, y-a-t'il moyen de forcer le remplacement ?
Au pire, j'envisage de lancer ce code à l'ouverture du document, ce qui fera le boulot, mais je dois avouer que j'aimerai bien comprendre la raison et l'éventuelle parade à ce blocage pour toute éventualité future et pour la compréhension des principes.
Merci de votre aide
Cordialement
Frédérick