[Résolu][Base] Implémentation SAVEPOINT COMMIT ROLLBACK

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 !
greg06
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 04 janv. 2015 17:54

[Résolu][Base] Implémentation SAVEPOINT COMMIT ROLLBACK

Message par greg06 »

Bonjour,
Je voudrais utiliser la fonction SAVEPOINT COMMIT ROLLBACK mais je ne trouve pas d'info dessus pour l'utiliser dans des macros sans formulaire reliés à la base
j'ai une base de données MySQL relié à une base de données BASE. Je fais des macros dans Calc en utilisant les Dialogues.

Code : Tout sélectionner

Connexion à la base (MySQL)
	' Feuille de connexion
	oFeuilleToto = ThisComponent.Sheets.getByName("Toto")

	' Connexion Base
	oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
	oDataSource = oDatabaseContext.getByName("BaseTest")
	 
	' Identifant et Mot de passe
	If Not oDataSource.IsPasswordRequired Then
		'Les paramètres de connexion
	login = ""
	password = ""
	maConnexion = maSource.getIsolatedConnection(login, password)
	  oConnection = oDataSource.GetConnection("","")
	Else
	  oInteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
	  oConnection = oDataSource.ConnectWithCompletion(oInteractionHandler)
	End If
	
	' objet de connexion à utiliser dans le projet 
	oStatement1 = oConnection.createStatement()

	' objet de connexion à utiliser dans le projet 
	oStatement2 = oConnection.createStatement()
Je fais des INSERT

Code : Tout sélectionner

strSQLInsertMod = "INSERT INTO  tblmodule" & _
					 "( mod_fpdID, mod_stgID, mod_JoursSemaine, mod_Date, mod_LastModif, mod_DateCreat ) " & _
					 " VALUES ( '" & addIDFpd & "' , '" & smodstgID & "' , '" & smodJoursSemaine & "' , '" & Format(dDateDebut,"YYYY/MM/DD") & "' , '" & _
					  strDateHH & "' , '" & strDate & "' ) "
							 	 
					'msgbox (strSQLInsertMod)
					lResultSetInsertMod = oStatement1.executeUpdate(strSQLInsertMod)
			
					' Recuperation de l'ID nouvellement créé
			  		strSQLLastInsertMod = "SELECT LAST_INSERT_ID()"
			
			   		oResultSetLastInsertMod = oStatement1.executeQuery( strSQLLastInsertMod )

et des UPDATE

Code : Tout sélectionner

strSQLUpdateModSecond = "UPDATE  tblmodule " & _
						 " SET mod_SecondID = '" & smodSecondID & "'" & _
					 	 " WHERE ( mod_ID = '" & addIDMod & "')"
				
						'msgbox( strSQLUpdateModSecond)
						lResultSetUpdateModSecond = oStatement1.executeUpdate(strSQLUpdateModSecond)		
Où dois je insert dans mon code le SAVEPOINT pour débuté la transaction, le COMMIT pour valider ou le ROLLBACK revenir en arriere

Merci d'avance
Dernière modification par micmac le 19 oct. 2017 17:58, modifié 1 fois.
Raison : Balisage et verrouillage
Windows 10
OpenOffice 4.1.3
WampServer 3.0.3 ; MySQL 5.6.25 ; PHP 5.6.25
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Base] Implémentation SAVEPOINT COMMIT ROLLBACK

Message par Churay »

Bonjour,
Je voudrais utiliser la fonction SAVEPOINT COMMIT ROLLBACK mais je ne trouve pas d'info dessus pour l'utiliser dans des macros sans formulaire reliés à la base
Où dois je insert dans mon code le SAVEPOINT pour débuté la transaction, le COMMIT pour valider ou le ROLLBACK revenir en arriere
Voilà ce que je trouve :
COMMIT / ROLLBACK

Sur le principe, et par définition :
  • - Le SAVEPOINT : là où tu considères que les transactions sont valides
    - Le COMMIT : là où tu considères que les transactions sont valides, donc validables.
    - Le ROLLBACK : entre les deux, si un pb est détecté.
Pour que cela soit efficace, penser à SET AUTOCOMMIT FALSE
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Base] Implémentation SAVEPOINT COMMIT ROLLBACK

Message par Piaf »

Bonsoir
greg06 a écrit :j'ai une base de données MySQL
Je n'utilise pas MySQL.
Pour une base de données intégrée (HSQLDB 1.8.0) le code suivant :

Code : Tout sélectionner

Sub Transaction

	oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
	oDataSource = oDatabaseContext.getByName("Adherents")
	If Not oDataSource.IsPasswordRequired Then
		maConnexion = oDataSource.getIsolatedConnection("", "")
	Else
		oInteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
		maConnexion = oDataSource.ConnectWithCompletion(oInteractionHandler)
	End If
	maConnexion.AutoCommit = False
    maConnexion.setTransactionIsolation(4)
    maRequete = maConnexion.createStatement()
    strSQL = "UPDATE ""tadherents"" SET ""Prenom"" = 'Antoine' WHERE ""Nom"" = 'Macheprot'"
    maRequete.executeUpdate(strSQL)
	strSQL = "SAVEPOINT ""SP1"""
	maRequete.executeUpdate(strSQL)    
    strSQL = "INSERT INTO ""tadherents"" (""Nom"", ""Prenom"") VALUES ('Duguidon','Maxime')"
    maRequete.executeUpdate(strSQL)
	Dim reponse As Long
    reponse = MsgBox("Valider changement ?", 3+32+256, "Modifier données")
	Select Case reponse
		Case 6
			maConnexion.commit
		Case 7
			strSQL = "ROLLBACK TO SAVEPOINT ""SP1"""
			maRequete.executeUpdate(strSQL)
		Case 2
			maConnexion.ROLLBACK
	End Select
	maConnexion.AutoCommit = True
	maConnexion.close
	maConnexion.dispose
End Sub 
lancé à partir de Calc,
Pour la réponse Annuler(2), aucun changement n'est effectué dans la table.
Pour la réponse Oui(6), la table est mise à jour et l'enregistrement est ajouté.
Pour la réponse Non((7), la table est mise à jour et l'enregistrement n'est pas ajouté.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9254
Inscription : 28 août 2010 08:45

Re: [Base] Implémentation SAVEPOINT COMMIT ROLLBACK

Message par micmac »

Dernière visite de l'intéressé le : 14 Sep 2017 11:40
Les réponses qui ont été faites ont été lues sans y donner de suite.
N'ayant plus de nouvelles, on peut en déduire que le problème est résolu ou ne se reproduit plus.

Merci de baliser par vous-même la prochaine fois.
Un remerciement fait aussi plaisir aux bénévoles qui vous ont consacré de leur temps.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac