Requête Update, Insert, Delete dans une macro

Bonjour

J’aurai besoin d’aide concernant les macros VB.

Je souhaite dans une macro pouvoir exécuter des requêtes Update, Insert, Delete que j’ai créé dans Base.

Dans les macros Access, il existe DoCmd.OpenQuery(‘ma requête’)

J’aurai besoin d’avoir un code similaire et qui affiche aucun message d’alerte

Je voudrais pouvoir executer une série de requête dans une macro et affecter cette macro à un bouton

Ex : créer un bouton qui appelle une macro
Cette macro ferme le formulaire en cours
Exécute requête A, requête B…
Ouvre formulaire « Index »

Merci pour votre aide

Pour insérer des données dans une table, qui sont stockées dans une autre table, une macro de ce genre fait le travail :

Sub Insertion

	Dim objContext As Object
	Dim objDatabase As Object
	Dim objConnection As Object
	Dim objStatement As Object
	Dim strSQL As String
	Dim objForm As Object
	
	objContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
	objDatabase = objContext.GetByName("nom_base_de_données")
	objConnection = objDatabase.GetConnection("","")
	objStatement = objConnection.CreateStatement()

	' Insertion des valeurs
	strSQL = "INSERT INTO NOM_TABLE_DESTINATION (COLONNE_1, COLONNE_2) SELECT COLONNE_1, COLONNE_2 FROM TABLE_SOURCE"
	objStatement.ExecuteUpdate(strSQL)

	objConnection.Close()
	
	objForm = ThisComponent.DrawPage.Forms.GetByName("nom_formulaire_interne")
	objForm.Reload()
	objForm.Last()

End Sub

Tu peux ajouter autant de lignes d’insertion (strSQL) que tu veux.

Pour le reste, il faudrait détailler un peu plus ton mode opératoire…

Merci d’avoir répondu

En fait j’ai des créer des requêtes qui font des insertions et des mises à jour.

J’aurai aimé pouvoir appeler des requetes sans passer par du code sql.

Il y a aucun moyen de faire comme dans Access en passant par un fonction similaire docmd.openquery(‘ma requete’) ?

Comme ceci :

Sub OuvrirRequete

	Dim objRequete As String
	Dim objType

	objRequete = "nom_de_la_requête"
	objType = com.sun.star.sdb.application.DatabaseObject.QUERY

	ThisDataBaseDocument.CurrentController.Connect()
	ThisDatabaseDocument.CurrentController.LoadComponent(objType, objRequete, False)

End Sub
1 Like

Merci

En revanche, c’est moi ou bien LibreOffice ne permet pas de faire des requêtes Insert, Delete ou Update ?
J’ai bon cherché, je peux faire que des requêtes de sélection

Il faut obligatoirement passé par les Macro pour faire des requêtes d’ajout, de suppression ou de mise à jour ?

De ce coté là, Access de Microsoft est largement plus simple à utiliser :woozy_face:

Il faut obligatoirement passé par les Macro pour faire des requêtes d’ajout, de suppression ou de mise à jour ?

Oui

De ce coté là, Access de Microsoft est largement plus simple à utiliser

Il faut rester dans le monde propriétaire dans ce cas.
Ou faire une demande d’amélioration auprès des développeurs.

Pour faire de telles requêtes, il suffit d’aller dans le menu Outils/SQL et tu les colles dans la fenêtre avant de les exécuter.

D’ailleurs, puisque tu fais des comparatifs avec Access (moi-même je l’ai utilisé durant des années et des années), il ne permettait pas (peut-être que les dernières versions le permettent, je ne sais pas) de créer une base entière (et de remplir les tables) en un clic, contrairement à LO Base, en passant par cet outil. Pour ce faire avec Access, il fallait créer une procédure VBA et inclure le script à l’intérieur, ce qui nécessitait des modifications dans les lignes.