Bernard Marcelly a écrit :
Bonjour,
Je ne comprends pas bien, mais je vois des bizarreries.
Message de Philippe Allart  date 2007-03-26 14:46 :
Re,

Je pensais avoir résolu le problème, mais décidemment, non.

Après avoir créé dynamiquement un .odb défini sur une source calc, et l'avoir interrogé avec succès, j'essaie de supprimer complètement la connection:


A quoi correspond ce code ? Basic et API savent gérer les références devenues inutiles.
resultat.close      ' le resultset
uneCommande.close   ' le statement

Comme ça ne marchait pas, j'ai chiné dans les API, et j'ai essayé ça.
Si j'ai bien compris , "monDoc.close(True)" veut dire "En ce qui me concerne, je n'ai plus besoin de ce doc, mais s'il y a encore quelqu'un qui s'en sert, les clés sont chez le concierge".

Comme je ne savais pas écraser le .odb, j'en ai conclu qu'il est toujours utilisé par quelque chose (spécifique à l'environnement Windows), et c'est pour ça que j'ai essayé de fermer tous les trucs possibles.

[ .. ]

Ceci me semble étrange: utiliser une source qui a été révoquée, et disposer d'un document déjà fermé.
maSource.databaseDocument.close(True)
maSource.databaseDocument.dispose

J'aurai plutôt fait
maSource =  monDbContext.GetByName(nomSource)
monDoc = maSource.databaseDocument
monDoc.close(True)
monDBContext.revokeObject(nomSource)

C'est plus logique en effet.
Mais ça ne marche toujours pas.

Voici en simplifié la séquence que j'essaie de réitérer. Les séquences entre deux lignes de tirets sont isolées dans des fonctions.

L'application s'exécute bien au premier appel.
Si on réexécute l'application sans sortir d'OOo, ça se plante sur
le StoreAsURL marqué d'une flèche, avec une "InteractiveAugmentedIOException"

----------------
monDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
maSource = monDBContext.CreateInstance()
monDoc = maSource.DatabaseDocument
monDoc.storeAsURL(convertToURL(nomODB), Array()) <===
monDBContext.registerObject(nomSource, maSource)
maSource.URL = "sdbc:flat:" & chemin
maSource.info() = info
monDoc.store
---------------
monDbContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
maSource =  monDbContext.GetByName(nomSource)
maConnexion =  maSource.getConnection(login, password)
---------------
<travail sur la connexion>
---------------
maConnexion.close
maConnexion.dispose
----------------
monDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
maSource =  monDbContext.GetByName(nomSource)
monDoc = maSource.databaseDocument
monDoc.close(True)
monDBContext.revokeObject(nomSource)
-----------------

Ca ne suffit apparemment ps pour revenir à l'état initial. Ou est le problème?

Amicalement,

Ph.

--

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Répondre à