La modération vous a écrit: le terme problème est inutile car implicite. Nous l'avons supprimé
Bonjour,
J'ai développé une base de données avec OpenOffice Base 4.11x86 et je réalise des requêtes sql depuis Excel pour lire et modifier la base.
Tout fonctionne bien entre Excel et OpenOffice.
Depuis que j'ai appris qu'il n'y aurait plus de mise à jour pour OpenOffice je me suis tourné vers LibreOffice 5.1.6x86 tout en conservant le même fichier Excel.
Lors de la premier exécution d'une requête tout se passe sans problème.
Après réexécution de la même requête il se trouve que soffice.bin *32 ne réponde plus à la demande faite depuis Excel et qu'il tourne en boucle sans fin. Excel se retrouve dans un état d'attente d'une réponse OLE de Soffice qui n'arrive jamais.
J'arrive à reprendre la main sur Excel à partir du moment ou le processus Soffice.bin est fermé.
J'arrive alors à réexécuter ma requête sans problème puis si je relance à nouveau la requête, le même problème revient.
Le code utilisé dans la macro Excel est le suivant:
Code : Tout sélectionner
Private Sub CommandButton1_Click()
Dim oDB As Object, oBase As Object
Dim oStatement As Object
Dim rSQL As String
Dim rSQL1 As String
Dim oRequete As Object
Dim oServiceManager As Object, CreateUnoService As Object
Dim x As Integer
'---------------------------------------
Dim feuille5 As String
feuille5 = "Liste des entreprises"
ActiveWorkbook.Unprotect Password:="opfr452"
'-------------------------------------------------
'Création instance Open office
Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
Set CreateUnoService = oServiceManager.createInstance("com.sun.star.sdb.DatabaseContext")
'Indique le nom de la base
Set oDB = CreateUnoService.getByName("Listing_prix")
'Connection
Set oBase = oDB.getConnection("", "")
Set oStatement = oBase.createStatement
'------------------------------------------------------
'Création requète
rSQL = "SELECT ""entreprise"", ""index_entreprises"" FROM ""table_entreprises"" ORDER BY ""entreprise"""
Set oRequete = oStatement.executeQuery(rSQL)
'Affichage du résultat de la requête dans les cellules Excel
If Not IsNull(oRequete) Then
x = 3
While oRequete.Next
x = x + 1
Cells(x, 2) = oRequete.getString(1) 'cells(ligne, colonne)
Cells(x, 3) = oRequete.getString(2)
Wend
End If
'------------------------------------------------------------
oRequete.Close
oStatement.Close
oBase.Close
oBase.Dispose
ActiveWorkbook.Protect Password:="opfr452"
End Sub
Code : Tout sélectionner
Set oBase = oDB.getConnection("", "")
Lors de la première exécution, le fichier .LCK est bien créé et il est bien supprimé à la fin de l’exécution de la macro.
Lors de la seconde exécution, le fichier .LCK n'est pas créé.
Autre constatation:
En mode pas à pas, si j'exécute la macro en m'arrêtant avant le "oRequete.Close" j'arrive sans problème à réexécuter la macro.
Le fichier .LCK n'est plus effacé mais les macro peuvent toujours s’exécuter.
Svp quelqu'un aurait-il une solution ou au moins une piste à explorer?