Je m'explique; mon .exe créé avec Autoit permet de mettre à jour des données dans une base Acces via des requêtes SQL, en fonction des entrées définies par l'utilisateur.
L'une de mes requêtes ne passe pas, je bloque dessus depuis un petit bout de temps, ce pourquoi je viens vers vous.
Voici une partie du code en question, la partie qui nous intéresse se trouve dans les 5 premières lignes : définition et exécution de la requête "$query_pad" sur la table "pad" ou ma connexion est déjà établie, censée remplacer les valeurs du champs "noeud" correspondant à une certaine condition.
J'ai également insérée la requête qui se déroule juste après, qui est parfaitement fonctionnelle.
Code : Tout sélectionner
;MAJ table pad
$query_pad = "UPDATE pad SET noeud = '" & $NouveauNode & "' WHERE noeud = '" & $AncienNode & "'"
$AdoRs333 = ObjCreate("ADODB.Recordset")
$AdoRs333.ActiveConnection = $AdoCon
$AdoRs333.Open($query_pad)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(36, "MAJ table dessin en cours")
;MAJ table dessin
$query_dessin = "UPDATE dessin SET noeud = '" & $NouveauNode & "' WHERE noeud = '" & $AncienNode & "'"
$AdoRs4 = ObjCreate("ADODB.Recordset")
$AdoRs4.ActiveConnection = $AdoCon
$AdoRs4.Open($query_dessin)Il se trouve que $AncienNode et $NouveauNode sont des variables entrées par l'utilisateur. Celles-ci sont strictement d'une longueur de 3 caractères numériques ou vides.
Pour les personnes désireuses de faire un test de mon application, voici les données :
Voici ma base acces : http://sendbox.fr/pro/wwu2bkf9xg86/Secteur.mdb.html
Mon code complet :
[spoiler]
Code : Tout sélectionner
[spoiler=]; ----------------------------------------------------
; -------------------- Section I --------------------
; ----------------------------------------------------
; Version AutoIt :
; Langue : Francais
; Plateforme : Seven
; Auteur : Bastien M********I
;
; Fonction du script:
;
;
;
; Version 1.0 : 24/06/2015
; - Première Version.
;
; Déclarations
; ----------------------------------------------------
; -------------------- Section III --------------------
; ----------------------------------------------------
#include <GuiConstants.au3>
#NoTrayIcon
Global $Largeur = 400, $Hauteur = 600, $Titre = "Changement d'un numéro de node Corolle", $titre1 = "aa"
Local $Ver = "V1.0"
; Définition de la fenètre principale
; ----------------------------------------------------
; -------------------- Section IV --------------------
; ----------------------------------------------------
#Region ### START Koda GUI section ###
; Fenetre principale.
$Form1 = GUICreate($Titre & $Ver, $Largeur, $Hauteur, -1, -1)
; Bouton OK.
$Button1a = GUICtrlCreateButton("1a) Choix base Secteur", 0, 0, 120, 50)
$Button1b = GUICtrlCreateButton("1b) Copie de la base", 120, 0, 120, 50)
GUICtrlSetState($Button1b, $GUI_DISABLE)
$Button2 = GUICtrlCreateButton("2) Connection", 0, 100, 100, 50)
GUICtrlSetState($Button2, $GUI_DISABLE)
$Label1 = GUICtrlCreateLabel("Le chemin de votre base est :", 5, 60)
$Label3 = GUICtrlCreateLabel("Etat connection", 5, 160)
;$Input1a = guictrlcreateinput(" ", 5, 270, 20, 20)
;GUICtrlSetLimit ($input1a, 1, 1)
$Input1b = guictrlcreateinput(" ", 25, 270, 20, 20)
GUICtrlSetLimit ($input1b, 1, 1)
GUICtrlSetState($Input1b, $GUI_DISABLE)
$Input1c = guictrlcreateinput(" ", 45, 270, 20, 20)
GUICtrlSetLimit ($input1c, 1, 1)
GUICtrlSetState($Input1c, $GUI_DISABLE)
$Input1d = guictrlcreateinput(" ", 65, 270, 20, 20)
GUICtrlSetLimit ($input1d, 1, 1)
GUICtrlSetState($Input1d, $GUI_DISABLE)
$LabelOldNode = GUICtrlCreateLabel("Ancien node", 90, 273)
;$Input2a = guictrlcreateinput(" ", 5, 320, 20, 20)
;GUICtrlSetLimit ($input1a, 1, 1)
$Input2b = guictrlcreateinput(" ", 25, 320, 20, 20)
GUICtrlSetLimit ($input2b, 1, 1)
GUICtrlSetState($Input2b, $GUI_DISABLE)
$Input2c = guictrlcreateinput(" ", 45, 320, 20, 20)
GUICtrlSetLimit ($input2c, 1, 1)
GUICtrlSetState($Input2c, $GUI_DISABLE)
$Input2d = guictrlcreateinput(" ", 65, 320, 20, 20)
GUICtrlSetLimit ($input2d, 1, 1)
GUICtrlSetState($Input2d, $GUI_DISABLE)
$LabelNewNode = GUICtrlCreateLabel("Nouveau node", 90, 323)
$Button3 = GUICtrlCreateButton("3) Num nodes", 0, 200, 100, 50)
GUICtrlSetState($Button3, $GUI_DISABLE)
$Button4 = GUICtrlCreateButton("4) Verif Num", 0, 360, 100, 50)
GUICtrlSetState($Button4, $GUI_DISABLE)
$Button5 = GUICtrlCreateButton("5) Remplacement Num", 0, 450, 150, 50)
GUICtrlSetState($Button5, $GUI_DISABLE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
; Action des bouttons
; ----------------------------------------------------
; -------------------- Section V --------------------
; ----------------------------------------------------
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Fin()
Case $Button1a ;choix de la base
MsgBox(64, "Info", "Veuillez choisir la base secteur.mdb, celle dont vous voulez modifier un numéro de node !")
$Dbname = FileOpenDialog("", @DocumentsCommonDir & "\", "Secteur Corolle coax (*.mdb)", 1 + 4 )
$Label2 = GUICtrlCreateLabel($Dbname, 5, 80)
if $Dbname <> "" Then
GUICtrlSetState($Button1a, $GUI_DISABLE)
endif
if $Dbname <> "" Then
GUICtrlSetState($Button1b, $GUI_ENABLE)
endif
Case $Button1b ;copie de la base pour securiser
MsgBox(64, "Info", "Sauvegarde votre base de donnée datée sous C:\@-@Savebase\")
$TIME = @MDAY &"-"& @MON &"-"& @YEAR &" - "& @HOUR &"H"& @MIN &" "& @SEC &" sec"
$dest = "C:\@-@Savebase\" & $TIME & "\"
FileCopy($dbname, $dest, 8)
GUICtrlSetState($Button1b, $GUI_DISABLE)
GUICtrlSetState($Button2, $GUI_ENABLE)
Case $Button2 ;connection au secteur défini
$AdoCon = ObjCreate("ADODB.Connection")
$AdoCon.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $Dbname)
if @error Then
MsgBox(0, "NumNO", "Erreur lors de la connexion")
Exit
Else
MsgBox(0, "NumNO", "Connecté avec succès.")
GUICtrlSetState($Button2, $GUI_DISABLE)
GUICtrlSetState($Button3, $GUI_ENABLE)
Endif
Case $Button3 ;averti l'utilisateur pour les numeros de node
MsgBox(0, "NumNO", "Veuillez remplir les deux champs suivants, par exemple pour le node 67, laissez les deux premières cases vides, mettez 6 dans la 3eme case puis 7 dans la 4eme case. Il est nécessaire de conserver l'espace dans les cases dites vides.")
GUICtrlSetState($Button3, $GUI_DISABLE)
GUICtrlSetState($Input1b, $GUI_ENABLE)
GUICtrlSetState($Input1c, $GUI_ENABLE)
GUICtrlSetState($Input1d, $GUI_ENABLE)
GUICtrlSetState($Input2b, $GUI_ENABLE)
GUICtrlSetState($Input2c, $GUI_ENABLE)
GUICtrlSetState($Input2d, $GUI_ENABLE)
GUICtrlSetState($Button4, $GUI_ENABLE)
Case $Button4 ;Teste les numéros que l'utilisateur a donné
GUICtrlSetState($Input1b, $GUI_DISABLE)
GUICtrlSetState($Input1c, $GUI_DISABLE)
GUICtrlSetState($Input1d, $GUI_DISABLE)
GUICtrlSetState($Input2b, $GUI_DISABLE)
GUICtrlSetState($Input2c, $GUI_DISABLE)
GUICtrlSetState($Input2d, $GUI_DISABLE)
$AncienNode = GUICtrlRead($Input1b) & GUICtrlRead($Input1c) & GUICtrlRead($Input1d)
$NouveauNode = GUICtrlRead($Input2b) & GUICtrlRead($Input2c) & GUICtrlRead($Input2d)
msgbox(64, "NumNO", "Teste si le numéro |" & $AncienNode & "| est présent dans la base selectionnée.")
$query_AncienNode= "SELECT noeud FROM noeuds WHERE noeud = '" & $AncienNode & "' AND REF_MAT = '1918'"
$query_NouveauNode= "SELECT noeud FROM noeuds WHERE noeud = '" & $NouveauNode & "'"
;msgbox(64, "a", $query_AncienNode)
$AdoRs0 = ObjCreate("ADODB.Recordset")
$AdoRs0.ActiveConnection = $AdoCon
$AdoRs0.Open($query_AncienNode)
$AdoRs1 = ObjCreate("ADODB.Recordset")
$AdoRs1.ActiveConnection = $AdoCon
$AdoRs1.Open($query_NouveauNode)
$RS0 = $AdoRs0.getstring()
$RS1 = $AdoRs1.getstring()
;teste si l'ancien numéro de node est bien dans la base
if $RS0 <> "" then
msgbox(64, "NumNO", "Le noeud est bien existant dans la base.")
Else
GUICtrlSetState($Input1b, $GUI_ENABLE)
GUICtrlSetState($Input1c, $GUI_ENABLE)
GUICtrlSetState($Input1d, $GUI_ENABLE)
msgbox(64, "NumNO", "Il est impossible de retrouver le node dans la base. Erreur de numéro saisi?")
Endif
;teste si le nouveau numéro de node est disponible
if $RS0 <> "" then
msgbox(64, "NumNO", "Teste si le numéro |" & $NouveauNode & "| est libre dans la base selectionnée.")
Endif
if $RS1 = "" Then
msgbox(64, "NumNO", "Le numéro de noeud est bien disponible.")
Else
GUICtrlSetState($Input2b, $GUI_ENABLE)
GUICtrlSetState($Input2c, $GUI_ENABLE)
GUICtrlSetState($Input2d, $GUI_ENABLE)
msgbox(64, "NumNO", "Le numéro de noeud est déjà utilisé, action veuillez choisir un autre ou bien le rendre disponible.")
EndIf
if $RS0 <> "" And $RS1 = "" Then
GUICtrlSetState($Button4, $GUI_DISABLE)
GUICtrlSetState($Button5, $GUI_ENABLE)
;$Label5a = GUICtrlCreateLabel("Tables impactées :", 200, 450)
;$Label5b = GUICtrlCreateLabel("- noeuds", 200, 465)
;$Label5c = GUICtrlCreateLabel("- pad", 200, 480)
;$Label5d = GUICtrlCreateLabel("- dessin", 200, 495)
;$Label5e = GUICtrlCreateLabel("- ampli", 200, 510)
;$Label5f = GUICtrlCreateLabel("- c_n", 200, 525)
;$Label5g = GUICtrlCreateLabel("- calcniv", 200, 540)
;$Label5h = GUICtrlCreateLabel("- im2", 200, 555)
;$Label5i = GUICtrlCreateLabel("- im3", 200, 570)
;$Label5j = GUICtrlCreateLabel("- infra", 200, 585)
EndIf
Case $Button5 ;requetes, MAJ du numéro de noeud dans les différentes tables
GUICtrlSetState($Button5, $GUI_DISABLE)
ProgressOn("Patientez", "Merci de patienter, mise à jour.", "MAJ SQL en cours...")
;MAJ table noeuds noeud
$query_noeuds = "UPDATE noeuds SET noeud = '" & $NouveauNode & "' WHERE noeud = '" & $AncienNode & "'"
$AdoRs2 = ObjCreate("ADODB.Recordset")
$AdoRs2.ActiveConnection = $AdoCon
$AdoRs2.Open($query_noeuds)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(8, "MAJ table noeuds 1/3 en cours")
;maj noeud amont
$query_noeudsAmont = "UPDATE noeuds SET n_amont = '" & $NouveauNode & "' WHERE n_amont = '" & $AncienNode & "'"
$AdoRs20 = ObjCreate("ADODB.Recordset")
$AdoRs20.ActiveConnection = $AdoCon
$AdoRs20.Open($query_noeudsAmont)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(15, "MAJ table noeuds 2/3 en cours")
;lecture etiquette longue
$query_noeudsL = "SELECT noeud_bis from noeuds WHERE noeud = '" & $NouveauNode & "'"
$AdoRs21 = ObjCreate("ADODB.Recordset")
$AdoRs21.ActiveConnection = $AdoCon
$AdoRs21.Open($query_noeudsL)
$noeudsL = $AdoRs21.getstring()
;msgbox(64, "a", $noeudsL)
Local $noeudsL2 = StringReplace($noeudsL, $AncienNode, $Nouveaunode)
Local $noeudsL22 = StringReplace($noeudsL2, " ", "")
;msgbox(64, "a", $noeudsL22)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(22, "MAJ table noeuds 3/3 en cours")
;MAJ etiquette longue (opt)
$query_no2 = "UPDATE noeuds SET noeuds.NOEUD_BIS = '"& $noeudsL22 &"' WHERE noeud = '" & $NouveauNode & "'"
;msgbox(64, "a", $query_no2)
$AdoRs11 = ObjCreate("ADODB.Recordset")
$AdoRs11.ActiveConnection = $AdoCon
$AdoRs11.Open($query_no2)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(30, "MAJ table pad en cours")
;MAJ table pad
$query_pad = "UPDATE pad SET noeud = '" & $NouveauNode & "' WHERE noeud = '" & $AncienNode & "'"
$AdoRs333 = ObjCreate("ADODB.Recordset")
$AdoRs333.ActiveConnection = $AdoCon
$AdoRs333.Open($query_pad)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(36, "MAJ table dessin en cours")
;MAJ table dessin
$query_dessin = "UPDATE dessin SET noeud = '" & $NouveauNode & "' WHERE noeud = '" & $AncienNode & "'"
$AdoRs4 = ObjCreate("ADODB.Recordset")
$AdoRs4.ActiveConnection = $AdoCon
$AdoRs4.Open($query_dessin)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(42, "MAJ table ampli 1/2 en cours")
;MAJ table ampli
$query_ampli = "UPDATE ampli SET noeud = '" & $NouveauNode & "' WHERE noeud = '" & $AncienNode & "'"
$AdoRs5 = ObjCreate("ADODB.Recordset")
$AdoRs5.ActiveConnection = $AdoCon
$AdoRs5.Open($query_ampli)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(50, "MAJ table ampli 2/2 en cours")
;MAJ table ampli
$query_ampliINJ = "UPDATE ampli SET INJECT_A = '" & $NouveauNode & "' WHERE INJECT_A = '" & $AncienNode & "'"
$AdoRs50 = ObjCreate("ADODB.Recordset")
$AdoRs50.ActiveConnection = $AdoCon
$AdoRs50.Open($query_ampliINJ)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(59, "MAJ table c_n en cours")
;MAJ table c_n
$query_c_n = "UPDATE c_n SET noeud = '" & $NouveauNode & "' WHERE noeud = '" & $AncienNode & "'"
$AdoRs6 = ObjCreate("ADODB.Recordset")
$AdoRs6.ActiveConnection = $AdoCon
$AdoRs6.Open($query_c_n)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(67, "MAJ table calcniv en cours")
;MAJ table calcniv
$query_calcniv = "UPDATE calcniv SET noeud = '" & $NouveauNode & "' WHERE noeud = '" & $AncienNode & "'"
$AdoRs7 = ObjCreate("ADODB.Recordset")
$AdoRs7.ActiveConnection = $AdoCon
$AdoRs7.Open($query_calcniv)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(75, "MAJ table im2 en cours")
;MAJ table im2
$query_im2 = "UPDATE im2 SET noeud = '" & $NouveauNode & "' WHERE noeud = '" & $AncienNode & "'"
$AdoRs8 = ObjCreate("ADODB.Recordset")
$AdoRs8.ActiveConnection = $AdoCon
$AdoRs8.Open($query_im2)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(86, "MAJ table im3 en cours")
;MAJ table im3
$query_im3 = "UPDATE im3 SET noeud = '" & $NouveauNode & "' WHERE noeud = '" & $AncienNode & "'"
$AdoRs9 = ObjCreate("ADODB.Recordset")
$AdoRs9.ActiveConnection = $AdoCon
$AdoRs9.Open($query_im3)
; Pause de 1 seconde.
Sleep(1000)
ProgressSet(95, "MAJ table dessin en cours")
;MAJ table infra
$query_infra = "UPDATE infra SET noeud = '" & $NouveauNode & "' WHERE noeud = '" & $AncienNode & "'"
$AdoRs10 = ObjCreate("ADODB.Recordset")
$AdoRs10.ActiveConnection = $AdoCon
$AdoRs10.Open($query_infra)
ProgressSet(100, "Mise à jour terminée!")
Sleep(1000)
ProgressOff()
EndSwitch
WEnd
; Fermeture du programme avec un spalsh
; ----------------------------------------------------
; -------------------- Section VI --------------------
; ----------------------------------------------------
#Region ################### Fonctions ###################
Func Fin()
; Lancement du splash screen.
SplashTextOn("", "Fermeture du programme en cours, Veuillez patienter ...", 450, 70, -1, -1, 0 + 1 + 16 + 32, "Times New Roman", 12, 800)
; Pause de 1.5 secondes.
Sleep(1500)
; Fermeture du splash.
SplashOff()
Exit
EndFunc ;==>Fin
#EndRegion ################### Fonctions ###################[/spoiler]
:Ouvrez la base jointe avec ce code, essayez de rentre "277" en ancien node, et "808" en nouveau node.
Ensuite, regardez comment les tables "pad" et "dessin " se sont comportées.
PS : j'ai retiré les tables inutiles pour que vous testiez.
Merci par avance.


