[Base]Insertion code SQL

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 !
CALIMEO972
Fraîchement OOthentifié
Messages : 3
Inscription : 25 juin 2025 23:11

[Base]Insertion code SQL

Message par CALIMEO972 »

[Base]Insertion code SQL dans une macro

Bonjour à toutes et à tous
Dans une base de données que je suis en train de réaliser, je veux calculer la somme de plusieurs colonnes et la mettre dans une colonne; et ceci ligne par ligne. lorsque j'effectue la requête SQL cela fonctionne parfaitement. En revanche lorsque je l'insère dans une macro j'obtiens des 0 sur la dernière ligne.
Requête SQL:

Code : Tout sélectionner

-- Mise à jour de colonnes dans une table

UPDATE T_PLAN
SET "nbCroquisFisc"="nbCroquisFisc_T"+"nbCroquisFisc_O"+"nbCroquisFisc_DA"

UPDATE T_PLAN
SET "joursCroquisFisc"="joursCroquisFisc_T"+"joursCroquisFisc_O"+"joursCroquisFisc_DA"
Code source de la macro (Module_somme_sql):

Dans la macro j'ai 3 fonctions aux noms explicites: ConnecterSources(), DeconnecterSource() et miseAJour() ainsi qu'une fonction principale 'main' qui fait appel à ces 3 fonctions

Code : Tout sélectionner

REM  *****  CALCUL DE SOMMES  *****

'Option Explicit
'-----------------------------------Sub Calcul_Totaux_PLAN--------------------------------
'Lancé par l'évènement :
'Calcul le nombre total de croquis et le nombre total de jours de croquis
'Champs pour le calcul : nbCroquisFisc_T,nbCroquisFisc_O,nbCroquisFisc_DA
'						 joursCroquisFisc_T,joursCroquisFisc_O,joursCroquisFisc_DA
'Champs modifiés : nbCroquisFisc & joursCroquisFisc
'Lance ensuite le Calcul des totaux
'-----------------------------------------------------------------------------------------
 
 dim maConnexion as Object
 
  
 ' **** Fonction de connexion de la BDD ****
function ConnecterSource()									
	 dim nomSource As String
	 dim login as variant
	 dim password as variant
	 dim maSource as Object
	 dim maDataBaseContext as Object
 
	 ' Création du contexte
	 nomSource="TAG"
	 maDataBaseContext=CreateUnoService("com.sun.star.sdb.DatabaseContext")
	 maSource=maDataBaseContext.getByName(nomSource)
	 ' Les paramètres de connexion éventuels
	login = ""
	password = ""
	maConnexion = maSource.getConnection(login, password)
	if IsNull(maConnexion) then
	 MsgBox("Connexion impossible", 16)
 	 Stop
	end if '/
end function

 
' **** fonction de mise à jour de l'enregistrement ****
function miseAJour()									
	 dim maRequete as object
	 dim resultat as object
	 dim miseAJourSQL as string
 
	miseAJourSQL = " UPDATE T_PLAN SET ""nbCroquisFisc""=""nbCroquisFisc_T""+""nbCroquisFisc_O""+""nbCroquisFisc_DA"" "

	maRequete=maConnexion.createStatement()

	resultat=maRequete.executeQuery(miseAJourSQL)

'	MsgBox(resultat,0)
	MsgBox "Ok insertion effectuée !"
	
end function

' **** Fonction de déconnexion de la BDD ****
function DeconnecterSource()
	maConnexion.close
'	maConnexion.dispose
	MsgBox "Ok déconnexionn effectuée !"
end function
 
 ' **** Fonction principale ****
 
 sub main
	 ConnecterSource
	 miseAJour
	 'DeconnecterSource
 end sub
La table s'appelle T_PLAN
Le contrôle qui active la macro est le remplissage des champs dans le formulaire
Je ne peux pas joindre La base de données (825 ko compressé)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Oukcha le 26 juin 2025 04:12, modifié 1 fois.
Raison : TO:"code SQL dans une macro" / Terme implicite ("macro" en section éponyme) supprimé + agencement balise de citation
LibreOffice 24.2.7.2 sous Windows 11 24H2
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 4271
Inscription : 06 oct. 2008 08:03

Re: [Base]Insertion code SQL

Message par Oukcha »

Bonjour et bienvenue sur notre forum,

La réponse que vous attendez pour votre question dépend d'une information essentielle : la version d' OpenOffice et le système sur lequel il tourne. Pour votre système, vous devez préciser également la version et/ou la distribution (quelques exemples : AOO 4.1.14 sous Windows 7 SP2, AOO 4.1.15 sous MacOS X 10.13.2, LibO 5.3.7 sous Linux Ubuntu 16.04.3 ou AOO 4.1.3 sous Linux OpenSuse Leap 42.3 etc).

Nous vous remercions d'ajouter ces renseignements dans votre profil. Lisez le lien mentionné ci-dessous pour savoir comment procéder :
ftopic18.html

Très cordialement, l'équipe de modération.
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image
Jeff
GourOOu
GourOOu
Messages : 9942
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: [Base]Insertion code SQL

Message par Jeff »

Bonjour et bienvenue,

Je ne suis pas un spécialiste, ni de Base, ni de macro, je vais donc me contenter d'une suggestion :
Y'a un tuto ici qui explique comment passer des requêtes SQL par macro : [API] Exécution de requête SQL sous Base

A +
À lire avant tout !

Pour télécharger Apache OpenOffice

AOO 4.1.15 / Debian 12.10 "bookworm" / Xfce
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base]Insertion code SQL

Message par Dude »

Salut,
Dernière visite : 27/06/2025 22:55
C'est bien de lire et revenir donner suite. :roll:

Jeff a écrit : 26 juin 2025 11:35 Y'a un tuto ici qui explique comment passer des requêtes SQL par macro : [API] Exécution de requête SQL sous Base
+1
Ainsi que le suprême pour cette question "serpent de mer" : http://forum.openoffice.org/fr/forum/vi ... =15&t=1454

Code : Tout sélectionner

UPDATE T_PLAN
Incompatible avec :

Code : Tout sélectionner

resultat=maRequete.executeQuery(miseAJourSQL)


Dernier point :
CALIMEO972 a écrit : 26 juin 2025 00:43 je veux calculer la somme de plusieurs colonnes et la mettre dans une colonne
On ne stocke pas de calcul dans une table, c'est contre-productif.
CALIMEO972
Fraîchement OOthentifié
Messages : 3
Inscription : 25 juin 2025 23:11

Re: [Base]Insertion code SQL

Message par CALIMEO972 »

ok merci
LibreOffice 24.2.7.2 sous Windows 11 24H2
Avatar de l’utilisateur
tintin
GourOOu
GourOOu
Messages : 9939
Inscription : 18 juil. 2008 15:29
Localisation : F-Oise + F-Savoie

Re: [Base]Insertion code SQL

Message par tintin »

Bonjour,
CALIMEO972 a écrit : 02 juil. 2025 11:14ok merci
Doit-on en déduire que le sujet est résolu ?
Si oui, voir Comment clore un sujet lorsqu'il est résolu
AOO 4.1.15 et LibO 24.8.7.2 / macOS Intel 13.7.6 Ventura
Adoptium-temurinJDK-jre_1.8.0_452 / Firefox/Safari/Thunderbird /Time Machine+cloneCCC
Tutoriels du forum pour macOS
Pour sauvegarder vos documents c'est ceinture ET bretelles
CALIMEO972
Fraîchement OOthentifié
Messages : 3
Inscription : 25 juin 2025 23:11

Re: [Base]Insertion code SQL

Message par CALIMEO972 »

Excusez moi pour les réponses tardives mais j'essayais de comprendre !
En appliquant tous les tutos, ca ne marche toujours pas !
Je vois pas comment calculer ligne par ligne une somme de colonnes et mettre la somme dans une autre.
j'ai réécris le code et testé :
- dans la 1ere ligne , la 3ème colonne est la somme de trois colonnes selon la formule donnée dans le programme. Elle a été exécutée avec une requête SQL (donnée dans les précédents posts).
- Les 2 autres lignes ont été exécutées avec la macro

Code : Tout sélectionner

REM  *****  CALCUL DE SOMMES  *****


'-----------------------------------Sub CalculTotauxT_PLAN--------------------------------
Sub Calcul_TotauxT_PLAN

dim nomSource as string
dim oDC as object
dim oSrc as object
dim oDB as object
dim oCnx as object
dim oReq as object
dim sReq as object
dim strSQL as string

rem ---- Connexion à la base ----

 nomSource=convertToURL("D:\SGBD\TAG.odb")									' on récupère d'abord le chemin complet (URL) de notre ODB
 oDC=CreateUnoService("com.sun.star.sdb.DatabaseContext")		' on appelle le service pour se connecter à la base de données
 oSrc=oDC.getByName(nomSource)										' on lui passe le nom de la base
 oDB=oSrc.getConnection("","")									' on donne les identifiant ou mot de passe qui sont par défaut vides
 oCnx=oDB.createStatement()										' on récupère un objet pour la connexion obtenue

rem ---- Traitement de la requête de mise à jour de la table T_PLAN ----
strSQL="UPDATE ""T_PLAN"" SET ""nbCroquisFisc""=""nbCroquisFisc_T""+""nbCroquisFisc_O""+""nbCroquisFisc_DA"""

 oReq = oCnx.executeQuery(strSQL)
 '-----------------------------------------
oReq.close
oCnx.close
oDB.close
oDB.dispose

End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 24.2.7.2 sous Windows 11 24H2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25994
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base]Insertion code SQL

Message par Dude »

CALIMEO972 a écrit : 03 juil. 2025 02:01 En appliquant tous les tutos, ca ne marche toujours pas !
Normal puisque tu fais toujours la même erreur :

Code : Tout sélectionner

oReq = oCnx.executeQuery(strSQL)
:roll: Ca c'est uniquement pour un SELECT
Relis mieux les tutos sur l'instruction qui permet d'exécuter une requête UPDATE