[Résolu] [Calc] Fonctionnement de la connexion à une base de données

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
bonsaiko
Membre OOrganisé
Membre OOrganisé
Messages : 61
Inscription : 12 oct. 2023 14:37

[Résolu] [Calc] Fonctionnement de la connexion à une base de données

Message par bonsaiko »

Bonjour,

Dans le cadre d'une conversion d'une macro VBA en LibreOffice j'ai dû établir une connexion à une base de données.
Voici la manière dont j'ai procédé :

J'ai cliqué sur "Base", j'ai choisi le type de connexion "ADO" et ensuite j'ai renseigné les paramètres de connexion à ma base de données.
Je vous passe les détails inutiles et à la fin, j'ai indiqué le nom d'une base de données et un emplacement et je me retrouve donc dans le dossier où j'ai ma macro, avec un fichier de base de données maBase.odb.

Du coup, au sein de ma macro j'ai fait ceci en suivant un tuto qu'on m'a donné sur ce forum :

Code : Tout sélectionner


Const sdatabase = "maBase"
Const sDbUser = "***"
Const sDbPassword = "***"

Sub ConnectSource()

	Dim strSourceName
	Dim oCurrentSource As Object, oDbContext As Object
	
	oDbContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
	oCurrentSource = oDbContext.getByName(sdatabase)
	
	oCurrentConnexion = oCurrentSource.getConnection(sDbUser, sDbPassword)
	if IsNull(oCurrentConnexion) Then
	  MsgBox("Connexion impossible", 16)
	  Stop
	End if

End Sub
et tout fonctionne parfaitement.

Le seul souci c'est que je ne comprends pas vraiment comment cela fonctionne derrière.
En l'occurrence la macro ne va pas rester dans ce répertoire de travail, elle va être placée à un autre endroit pour que les utilisateurs puissent s'en servir. Dans ce cas est-ce que je dois "juste" copier / coller la base maBase.odb dans le nouveau répertoire ? Est-ce que cela sera suffisant ?
Ou est-ce que je devrai recommencer toute la connexion ?
Et je n'ai pas bien compris le "pourquoi" de cette base car lorsque je consulte les données, je vois le contenu de ma base de données initiale, donc est-ce qu'il s'agit d'une copie ? C'est cela que je ne comprends pas bien.

Est-ce que vous pourriez m'expliquer car j'ai beau chercher, je trouve bien le "comment faire" mais pas le "pourquoi on le fait".

Merci par avance.
Dernière modification par bonsaiko le 22 nov. 2023 10:15, modifié 1 fois.
Libre Office 7.6.2.1 Windows Server
bonsaiko
Membre OOrganisé
Membre OOrganisé
Messages : 61
Inscription : 12 oct. 2023 14:37

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par bonsaiko »

Je renchéris la question :
Est-il possible d'établir une connexion avec le code ci-dessus sans avoir au préalable fait la connexion via les fenêtres ?

La modération vous a écrit: Merci de ne pas poster plusieurs messages à la suite, si vous devez ajouter un complément d'information, le bouton "Modifier" à la droite du message permet d'y remédier.
Image
En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.

Libre Office 7.6.2.1 Windows Server
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25964
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par Dude »

Salut,
bonsaiko a écrit : 24 oct. 2023 12:23en suivant un tuto qu'on m'a donné sur ce forum
Il faut fournir le lien vers ce tuto.
Tu n'es pas seul sur ce forum et tu dois penser à ceux qui tomberont sur ta question.
bonsaiko a écrit : 24 oct. 2023 12:23 Dans ce cas est-ce que je dois "juste" copier / coller la base maBase.odb dans le nouveau répertoire ? Est-ce que cela sera suffisant ?
Comme nous ne savons pas à quoi ton ODB est connecté, le plus simple est que tu fasses d'abord un essai.
Et ensuite, tu reviens nous dire ce qui ne fonctionne pas en donnant plus d'informations sur le contexte(*).


(*) Fournir le contexte signifie joindre un document explicatif et exhaustif permettant de comprendre et surtout reproduire la problématique.
bonsaiko
Membre OOrganisé
Membre OOrganisé
Messages : 61
Inscription : 12 oct. 2023 14:37

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par bonsaiko »

Bonjour,

Voici le lien vers le tuto que j'ai suivi :
viewtopic.php?t=1454

Pour la suite, j'ai fait un essai et ce que je craignais est arrivé.
Un autre utilisateur a fait un copié / collé de mon répertoire de travail.
Ce répertoire contient le fichier ods avec la macro + la base maBase.odb.

Lorsqu'il a voulu exécuter la macro il a eu une erreur et en faisant ensemble du pas à pas on a compris qu'il n'était pas connecté à la base de données.

Il a donc refait les étapes que j'avais fait de mon côté, à savoir cliquer sur Base, choisir le type de connexion, choisir la base de données, etc. tout cela via les fenêtres de paramétrages.

J'aimerais savoir s'il est possible de faire autrement, c'est à dire établir la connexion uniquement en passant par le code de la macro. Ainsi, un utilisateur pourrait exécuter la macro sans avoir besoin de refaire tout ce paramétrage manuel. Je ne sais pas si je suis clair...
Libre Office 7.6.2.1 Windows Server
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25964
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par Dude »

bonsaiko a écrit : 25 oct. 2023 08:14 Un autre utilisateur a fait un copié / collé de mon répertoire de travail.
bonsaiko a écrit : 24 oct. 2023 12:23 En l'occurrence la macro ne va pas rester dans ce répertoire de travail, elle va être placée à un autre endroit pour que les utilisateurs puissent s'en servir.
bonsaiko
Membre OOrganisé
Membre OOrganisé
Messages : 61
Inscription : 12 oct. 2023 14:37

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par bonsaiko »

Je ne comprends pas pourquoi tu as repris mon message sans explication.
Il y a un souci quelque part ?
Libre Office 7.6.2.1 Windows Server
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25964
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par Dude »

Parce que les 2 phrases sont contradictoires.
Mets tes documents au bon endroit avec le paramétrage de l'ODB dans ce répertoire final et tout devrait fonctionner.

Maintenant, on va aussi faire un petit rappel : Calc et Base sont des applications mono-utilisateur.
On peut certes, faire du mode partagé avec le tableur mais avec pas mal de restrictions.
bonsaiko
Membre OOrganisé
Membre OOrganisé
Messages : 61
Inscription : 12 oct. 2023 14:37

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par bonsaiko »

Je ne vois pas en quoi les phrases sont contradictoires mais peut-être que je me suis mal exprimé.

Je travaille actuellement dans un répertoire mais une fois que j'aurai terminé, il sera déplacé ailleurs, afin que d'autres utilisateurs aient accès au fichier contenant la macro.

Je n'ai pas accès au répertoire final donc je dois travailler dans ce répertoire temporaire.
Lorsque je dis que quelqu'un l'a copié / collé pour le mettre ailleurs, c'est une façon de simuler le fait que ce dossier va bouger.

Donc ma question est : est-ce qu'il y aurait un moyen d'établir une connexion directement dans la macro, par exemple en passant une chaine de connexion indiquant le driver et toutes les infos nécessaires, ou est-ce qu'on est obligé de passer par les réglages manuels.

Et autre question : à quoi correspond au juste le fichier maBase.odb qui est créé ? Est-ce une copie de la base à laquelle je me connecte ou est-ce une sorte de lien symbolique ? Tu pourrais m'expliquer stp ?
Libre Office 7.6.2.1 Windows Server
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par Jurassic Pork »

Hello,
quel type de base de données ? quel driver ?
Moi avec une base de données postgresql en local, j'ai cela comme chaîne de connexion :
dbname=dvdrental host=localhost
j'utilise le driver postgresql qui existe dans base
j'indique l'utilisateur pour me connecter et mot de passe requis.
A chaque fois que j'utilise alors le fichier odb le mot de passe m'est demandé pour me connecter à la base.
PostgresqlLOBase.png
Il existe pour LibreOffice une documentation et des guides pour toutes les applications ici
Pour Base il y a LibreOffice Base Guide en particulier lire le fichier PDF du chapitre 2 Creating a Database
Ami calmant, J.P
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
bonsaiko
Membre OOrganisé
Membre OOrganisé
Messages : 61
Inscription : 12 oct. 2023 14:37

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par bonsaiko »

Merci de ta réponse Jurassic Pork.

En fait ma base est une base de données SQL située sur un serveur accessible via une connexion réseau.
Donc pour pouvoir accéder à cette base dans ma macro Calc, j'utilise le wizard et j'établis une connexion avec cette base de données, et ensuite à la fin ça me crée une base de données odb que je peux mettre où je veux.

Ma question est : est-il possible d'intéragir avec une base de données distante dans une macro Calc sans avoir utilisé le Wizard au préalable ?
Libre Office 7.6.2.1 Windows Server
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25964
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par Dude »

Contrairement à Microsoft, OpenOffice (ou ses dérivés) est une suite intégrée dont les modules sont interdépendants.
Et comme je te l'ai dit ici, Base (ou ses API) est le module qui sert à la manipulations des sources de données (native ou xDBC).
bonsaiko a écrit : 25 oct. 2023 09:06 établir une connexion directement dans la macro
Direction le suprême de code sur le sujet : viewtopic.php?f=15&t=6872
Pour plus d'info sur les méthodes et propriétés utilisées > XRay
bonsaiko a écrit : 25 oct. 2023 12:12 En fait ma base est une base de données SQL
Pléonasme, SQL est un langage propre à tous les SGBD. Ta base, c'est du propriétaire MS-SQL/Server.
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par Jurassic Pork »

Avec LibreOffice (> 7.2) et la bibliothèque ScriptForge intégrée, le code Basic pour se connecter à une base de données est simplifié.
Voici un exemple pour se connecter à ma base PostgresSql via mon fichier ODB et effectuer une requête SQL :

Code : Tout sélectionner

Sub ConnexionDb()
Dim myDatabase As Object
Dim queryResults as Variant
GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
Set myDatabase = CreateScriptService("SFDatabases.Database", "d:\temp\MaBasePostGresSql.odb ", "",False, "postgres" , "xxxxxx")
' Renvoie les 50 premiers enregistrements de la table actor triés par le champ last_name
queryResults = myDatabase.GetRows("SELECT * FROM actor ORDER BY [last_name]", MaxRows := 50)
myDatabase.CloseDatabase()
End Sub
Résultat ( macro exécutée dans un classeur ods) :
SFDatabaseLO.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1480
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par jeanmi2403 »

Jurassic Pork a écrit : 25 oct. 2023 11:14 Il existe pour LibreOffice une documentation et des guides pour toutes les applications ici
Pour Base il y a LibreOffice Base Guide en particulier lire le fichier PDF du chapitre 2 Creating a Database
Bonsoir,
Et en français ici
Bonne soirée,
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par Jurassic Pork »

Hello,
Jurassic Pork a écrit : 25 oct. 2023 13:29 Avec LibreOffice (> 7.2) et la bibliothèque ScriptForge intégrée, le code Basic pour se connecter à une base de données est simplifié.
Avec ScriptForge on peut aussi simplifier le code Basic pour manipuler les données dans les feuilles d'un classeur.
Voici par exemple un code pour écrire les données du résultat de la requête de mon code précédent dans une feuille de classeur (Feuille1) à partir d'une cellule de départ (D1).

Code : Tout sélectionner

Sub ConnexionDb()
Dim myDatabase As Object, oClasseur As Object
Dim queryResults as Variant
GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
Set oClasseur = CreateScriptService("Calc",ThisComponent)
Set myDatabase = CreateScriptService("SFDatabases.Database", "d:\temp\MaBasePostGresSql.odb ", "",False, "postgres" , "xxxxxxx")
' Renvoie les 50 premiers enregistrements de actor triés par le champ 'last_name'
queryResults = myDatabase.GetRows("SELECT * FROM actor ORDER BY [last_name]", MaxRows := 50)
oClasseur.SetArray("Feuille1.D1", queryResults)
myDatabase.CloseDatabase()
Set myDatabase = myDatabase.Dispose()
Set oClasseur = oClasseur.Dispose()
queryResults = Nothing
End Sub
Résultat :
SFCalcLibreOffice.gif
Ami calmant, J.P
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
bonsaiko
Membre OOrganisé
Membre OOrganisé
Messages : 61
Inscription : 12 oct. 2023 14:37

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par bonsaiko »

Merci pour vos réponses.
Il y a quand même un truc qui m'échappe.
J'ai suivi le suprême de code, c'est exactement ce que je voulais parce que cela me permet de pouvoir rattacher mon fichier ods à une base odb pendant l'exécution de la macro. Donc peut importe où se trouve le tableur contenant la macro et qui l'utilise, la macro effectue la connexion avec la base odb.
J'ai testé et cela a bien focntionné. Mais la base odb en question est vide. Elle n'est pas connectée à ma base de données MS-SQL/Server.

En fait si je reprends depuis le début :

J'ai réussi à faire l'appel DLL dont je parlais dans un précédent message, car la personne a créé une nouvelle DLL qui se charge de me retourner une chaine de caractères contenant les informations de connexion.
Donc l'appel à la dll me retourne le nom de la base de données, le username et le mot de passe.

Avec ces informations, je dois établir une connexion à cette base, mais sans passer par le wizard, juste via le code de la macro.
Est-ce que ça, c'est possible ?
Ou est-ce que je dois forcément créer une base ods que je relie à ma base de données distante ?

C'est ça que je n'arrive pas à comprendre.

Et j'ai consulté la doc mais pour tout ce qui est relativement aux bdd, c'est que via des wizards, donc pas du tout ce que je cherche.

Est-ce que vous pourriez m'aider sur ce point ?
Libre Office 7.6.2.1 Windows Server
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par Jurassic Pork »

Hello,
bonsaiko a écrit : 28 oct. 2023 10:44 Il y a quand même un truc qui m'échappe.
Ben moi aussi il y a un truc qui m'échappe :mrgreen:
Quand tu crées ton fichier odb, si tu fais une connexion avec ta base de données, tu devrais voir les tables dans la fenêtre tables de Base. Est-ce le cas ? Si tu les vois, il y a moyen de se connecter à une de ces tables et de manipuler les données, en utilisant une macro Basic (voir ce que j'ai fait avec PostgresSql dans mes messages précédents). Si tu ne veux pas que les identifiants (utilisateur, mot de passe) soient contenus dans ton fichier odb, avec ScriptForge, tu peux les passer dans ta macro dans la création du service Database.
CreateScriptService("SFDatabases.Database", [filename: str], [registrationname], [readonly], [user, [password]]): svc
Paramètres :
filename : le nom du fichier Base. Il doit être exprimé en utilisant la notation SF_FileSystem.FileNaming.
registrationname : le nom d'une base de données enregistrée. Si filename est fourni, cet argument ne doit pas être utilisé.
Inversement, si un registrationname est spécifié, le paramètre filename ne doit pas être défini.
readonly : détermine si la base de données sera ouverte en lecture seule (par défaut = True).
user, password : paramètres de connexion supplémentaires au serveur de base de données.
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
bonsaiko
Membre OOrganisé
Membre OOrganisé
Messages : 61
Inscription : 12 oct. 2023 14:37

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par bonsaiko »

Merci de ta réponse, je vais essayer de t'expliquer mon problème :

Actuellement je travaille sur une base de dev.
J'avais commencé en créant une connexion via la Wizard et j'avais donc bien mon fichier odb, tout ça.
Et j'ai réussi grâce au suprème de code à faire ce que je voulais.

Ensuite il y a un utilisateur qui a tenté de lancer la macro, et chez lui ça ne fonctionnait pas.
J'ai dû le guider pour qu'il refasse la connexion via le Wizard, et là ça a fonctionné.

Le souci c'est que normalement, l'utilisateur final ne devra pas faire cette connexion via le Wizard, tout simplement car il ne connait pas les informations de connexion. En fait, ces informations sont récupérées via l'appel à une dll, qui retourne une chaine de connexion.

Je voudrais donc modifier mon code pour ne plus faire appel à cette base odb et simplement établir ma connexion via la macro.

Du coup j'ai fait ceci :

Code : Tout sélectionner

Function RunQuery(strQuery)
	
	If strQuery = "" Then
		RunQuery = Null
		Exit Function
	End If
	
	Set oCurrentConnection = CreateObject("ADODB.Connection")
	oCurrentConnection.Open sConnectionString
	
	Dim rs As Object 
	Set rs = CreateObject("ADODB.Recordset")
	
	rs.Open strQuery, oCurrentConnection
	
	RunQuery = rs

End Function
Sachant que ma chaine de connexion est préalablement définie avant, comme ceci :

Code : Tout sélectionner

sConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" & sDbUser & ";Initial Catalog=" & sdatabase & ";Data Source=" & sServername & ";Password=" & sDbPassword
avec les valeurs sServername, sdatabase, sDbUser et sDbPassword récupérée depuis la chaine de connexion reçue via l'appel à la dll.

Est-ce que tu vois mieux maintenant ce que j'essaie de faire ?

En l'occurrence je ne comprends plus rien car le code ci-dessus fonctionnait parfaitement hier et là, je le lance, et il ne fonctionne plus.
J'avoue que je commence à désespérer...

Est-ce que vraiment je dois passer par le wizard ??? Ou est-ce que ce que j'ai fait peut fonctionner ?
Libre Office 7.6.2.1 Windows Server
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25964
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par Dude »

Code : Tout sélectionner

Set oCurrentConnection = CreateObject("ADODB.Connection")
Ce code montre que tu n'utilises pas l'ODB contenant les informations de connexion à ta source.
Donc, je ne vois pas comment cela pourrait fonctionner. :fou:
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par Jurassic Pork »

Hello,
bon j'ai essayé de récupérer des données de ma base de données postgresql sans passer par un fichier odb ( voir code dans un de mes messages précédents). C'est plus compliqué mais cela semble faisable en utilisant le DriverManager. J'obtiens les mêmes résultats qu'avec la version avec fichier odb.
Voici deux exemples :
1 - En utilisant le driver sdbc postgresql inclus dans AOO et LO :

Code : Tout sélectionner

Sub ConnPostGresSqlSdbc()
Dim sURL as String, oManager As Object, oCon as Object, oStatement as Object, oResult as Object
Dim size,res,i as Integer, oClasseur As Object
sURL = "sdbc:postgresql:dbname=dvdrental host=localhost user=postgres password=xxxxxxxx"
oManager = CreateUnoService("com.sun.star.sdbc.DriverManager")
oCon = oManager.getConnection(sURL)
oStatement = oCon.CreateStatement()
oResult = oStatement.executeQuery("SELECT * FROM actor  ORDER BY last_name LIMIT 50")
oResult.Last
size = oResult.getRow()
oResult.First
i = 0
Redim res(0 to size-1, 0 to 3)
    Do
          res(i,0) = oResult.getString(1)		
          res(i,1) = oResult.getString(2)		
          res(i,2) = oResult.getString(3)		
          res(i,3) = oResult.getString(4)	
          i = i +1	         
    Loop While oResult.Next
GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
Set oClasseur = CreateScriptService("Calc",ThisComponent)  
oClasseur.SetArray("Feuille1.K1", res)
End Sub
2 - En utilisant le driver jdbc de postgresql :

Code : Tout sélectionner

Sub ConnPostGresSqlJdbc()
Dim sURL as String, oManager As Object, oCon as Object, oStatement as Object, oResult as Object
Dim size,res,i as Integer, oClasseur As Object
Dim info(2) as new com.sun.star.beans.PropertyValue
	info(0).Name = "user"
	info(0).Value = "postgres"
	info(1).Name = "password"
	info(1).Value = "xxxxxxxx"
	info(2).Name = "JavaDriverClass"
	info(2).Value = "org.postgresql.Driver"
sURL = "jdbc:postgresql://localhost/dvdrental"
oManager = CreateUnoService("com.sun.star.sdbc.DriverManager")
oCon = oManager.getConnectionWithInfo(sURL,info)
oStatement = oCon.CreateStatement()
oStatement.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_INSENSITIVE
oResult = oStatement.executeQuery("SELECT * FROM actor  ORDER BY last_name LIMIT 50")
oResult.Last
size = oResult.getRow()
oResult.First
i = 0
Redim res(0 to size-1, 0 to 3)
    Do
          res(i,0) = oResult.getString(1)		
          res(i,1) = oResult.getString(2)		
          res(i,2) = oResult.getString(3)		
          res(i,3) = oResult.getString(4)	
          i = i +1	         
    Loop While oResult.Next
GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
Set oClasseur = CreateScriptService("Calc",ThisComponent)  
oClasseur.SetArray("Feuille1.R1", res)
End Sub
Il y a peut-être plus simple (je n'ai pas cherché dans les messages du forum).

On doit pouvoir faire la même chose avec ado pour ms SQL Server mais moi je n'ai pas de driver ado pour postgresql.
exemple de chaîne :
"sdbc:ado:Provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog=DobbitMulti;Data Source=000.000.000.000"
voici un exemple de code avec ado pour lire un fichier access :

Code : Tout sélectionner

Sub ConnMdbAdo()
Dim sURL as String, oManager As Object, oCon as Object, oStatement as Object, oResult as Object
Dim sizeRow as Integer, sizeCol as Integer,res,i as Integer, j as Integer, oClasseur As Object
sURL = "sdbc:ado:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\tmp\northwind.mdb"
oManager = CreateUnoService("com.sun.star.sdbc.DriverManager")
oCon = oManager.getConnection(sURL)
oStatement = oCon.CreateStatement()
oStatement.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_INSENSITIVE
oResult = oStatement.executeQuery("SELECT * FROM Employees")
oResult.Last
sizeRow = oResult.getRow()
sizeCol = oResult.getMetaData().getColumnCount()
oResult.First
i = 0
Redim res(0 to sizeRow - 1, 0 to sizeCol - 1)
    Do
          For j=0 to sizeCol -1
             res(i,j) = oResult.getString(j+1)		
          Next j      
           i = i +1	   
    Loop While oResult.Next
GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
Set oClasseur = CreateScriptService("Calc",ThisComponent)  
oClasseur.SetArray("Feuille1.AA1", res)
End Sub
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
bonsaiko
Membre OOrganisé
Membre OOrganisé
Messages : 61
Inscription : 12 oct. 2023 14:37

Re: [Calc] Fonctionnement de la connexion à une base de données

Message par bonsaiko »

Je te remercie pour ta réponse très complète.
Libre Office 7.6.2.1 Windows Server