afficher le resultat d'une requete SQL autrement que dans la console

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
ptiseb60
Niveau 2
Niveau 2
Messages : 23
Enregistré le : ven. 19 mai 2017 14:59
Status : Hors ligne

afficher le resultat d'une requete SQL autrement que dans la console

#1

Message par ptiseb60 »

Bonjour a tous,

Je souhaiterais savoir, selon vous, quel serait le meilleurs moyen pour récupérer dans une GUI le résultat d'une requête SQL.
L'idée au bout du bout c'est que mes utilisateurs saisissent un nom et un prénom dans une GUI puis après clic sur un bouton que la GUI leur affiche toutes correspondances possible trouvé en base (affichage de 5 champs).
Ils sélectionnent un des résultat puis clique sur un autre bouton pour lancer une action.

Pour le moment je n'en suis qu'au début, j'ai trouvé comment communiquer avec ma base (oracle) et afficher le résultat de requête simple dans la console.

La finalité de l'outil est de faciliter l'intégration de document dans notre GED Métier propre a notre ERP sous Oracle.

Je suis ce que l'on peu qualifier de novice donc n'hésitez pas a bien détailler vos explications.
Je vous remercie par avance pour votre aide qui me sera précieuse.

Voici mon code actuel :
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstants.au3>
#include <MsgBoxConstants.au3>


Dim $oMyError

; Initializes COM handler
$oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")

$ado = ObjCreate("ADODB.Connection") ; Create a COM ADODB Object  with the Beta version

With $ado
   .ConnectionString = ("Driver={Oracle in Orant12};DBQ=BDD_TCP.world;Uid=user;Pwd=password;")
   .Open
EndWith

$adors = ObjCreate("ADODB.RecordSet") ; Create a Record Set to handles SQL Records

With $adors
   .ActiveConnection = $ado
   ;.CursorLocation = "adUseClient"
   ;.LockType = "adLockReadOnly" ; Set ODBC connection read only
   .Source = "select * from table'"
   .Open
EndWith

While Not $adors.EOF
   For $i = 0 To $adors.Fields.Count - 1
      ConsoleWrite($adors.Fields($i).Value & @TAB) ; Columns in the AutoIt console use Column Name or Index

   Next
   ConsoleWrite(@CR)
   $adors.MoveNext ; Go to the next record
WEnd


; This COM error Handler
Func MyErrFunc()
   $HexNumber = Hex($oMyError.number, 8)
   MsgBox(0, "AutoItCOM Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _
         "err.description is: " & @TAB & $oMyError.description & @CRLF & _
         "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
         "err.number is: " & @TAB & $HexNumber & @CRLF & _
         "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
         "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
         "err.source is: " & @TAB & $oMyError.source & @CRLF & _
         "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
         "err.helpcontext is: " & @TAB & $oMyError.helpcontext _
         )
   SetError(1) ; to check for after this function returns
EndFunc   ;==>MyErrFunc
ptiseb60
Niveau 2
Niveau 2
Messages : 23
Enregistré le : ven. 19 mai 2017 14:59
Status : Hors ligne

Re: afficher le resultat d'une requete SQL autrement que dans la console

#2

Message par ptiseb60 »

J'avais pensé récupérer le résultat de ma requête dans un array puis afficher cet array dans une gui mais ne vois pas trop comment m'y prendre a vrai dire...
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: afficher le resultat d'une requete SQL autrement que dans la console

#3

Message par walkson »

Bonjour,
Je vous répond à l'aveugle car je ne peux pas tester votre code
Valable pour un array de 5 colonnes et avec #include <Array.au3>
Local $Array[0][5]
Local $donne
While Not $adors.EOF
   For $i = 0 To $adors.Fields.Count - 1
      $barre = ($i = $adors.Fields.Count - 1) ? "":"|" ; si $i est à son maxi $barre = "" sinon $barre = | pour éviter le | en fin de ligne
      $donne &= $adors.Fields($i).Value & $barre ; on cumule les données ex: AAA|BBB|CCC|DDD|EEE
   Next
   _ArrayAdd($Array, $donne);on ajoute une ligne à l'array
   $donne = ""
   $adors.MoveNext ; Go to the next record
WEnd
J'ai reproduit la boucle dans le code ci-dessous à titre d'exemple
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <GuiListView.au3>

Local $Array[0][5]
Local $donne
For $i = 0 To 10; pour simuler la boucle While de votre code
   For $y = 0 To 4
      $barre = ($y = 4) ? "":"|"
      $donne &= Random(5,100,1) & $barre
   Next
   _ArrayAdd($Array, $donne)
   $donne = ""
Next

Global $Form1 = GUICreate("Form1", 465, 438, 192, 124)
Global $ListView1 = GUICtrlCreateListView("1|2|3|4|5|", 64, 32, 305, 305)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 4, 80)

GUISetState(@SW_SHOW)
_GUICtrlListView_AddArray($ListView1,$Array)

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit

 EndSwitch
WEnd
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: afficher le resultat d'une requete SQL autrement que dans la console

#4

Message par jchd »

_ArrayDisplay ou _DebugArrayDisplay ou une GUI maison sur le même modèle.

Par contre attention aux "SELECT * from ..." car si l'ordre des colonnes change un jour ou si des colonnes apparaissent ou disparaissent la GUI maison ne correspondra plus à rien. Il est toujours préférable de lister explicitement les colonnes voulues et dans l'ordre souhaité.

Autre chose, l'ordre dans lequel les rangées sont restituées par un SELECT SQL est susceptible d'être aléatoire si aucune clause ORDER BY n'est utilisée au niveau supérieur.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
ptiseb60
Niveau 2
Niveau 2
Messages : 23
Enregistré le : ven. 19 mai 2017 14:59
Status : Hors ligne

Re: afficher le resultat d'une requete SQL autrement que dans la console

#5

Message par ptiseb60 »

Au top!
un grand merci pour l'efficacité et la rapidité!
ptiseb60
Niveau 2
Niveau 2
Messages : 23
Enregistré le : ven. 19 mai 2017 14:59
Status : Hors ligne

Re: afficher le resultat d'une requete SQL autrement que dans la console

#6

Message par ptiseb60 »

ça dérange pas si je ferme pas le sujet au cas où j'aurais d'autre demande sur ce même projet?
ptiseb60
Niveau 2
Niveau 2
Messages : 23
Enregistré le : ven. 19 mai 2017 14:59
Status : Hors ligne

Re: afficher le resultat d'une requete SQL autrement que dans la console

#7

Message par ptiseb60 »

walkson a écrit : mer. 10 juin 2020 16:24 Bonjour,
Je vous répond à l'aveugle car je ne peux pas tester votre code
Valable pour un array de 5 colonnes et avec #include <Array.au3>
Local $Array[0][5]
Local $donne
While Not $adors.EOF
   For $i = 0 To $adors.Fields.Count - 1
      $barre = ($i = $adors.Fields.Count - 1) ? "":"|" ; si $i est à son maxi $barre = "" sinon $barre = | pour éviter le | en fin de ligne
      $donne &= $adors.Fields($i).Value & $barre ; on cumule les données ex: AAA|BBB|CCC|DDD|EEE
   Next
   _ArrayAdd($Array, $donne);on ajoute une ligne à l'array
   $donne = ""
   $adors.MoveNext ; Go to the next record
WEnd
J'ai reproduit la boucle dans le code ci-dessous à titre d'exemple
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <GuiListView.au3>

Local $Array[0][5]
Local $donne
For $i = 0 To 10; pour simuler la boucle While de votre code
   For $y = 0 To 4
      $barre = ($y = 4) ? "":"|"
      $donne &= Random(5,100,1) & $barre
   Next
   _ArrayAdd($Array, $donne)
   $donne = ""
Next

Global $Form1 = GUICreate("Form1", 465, 438, 192, 124)
Global $ListView1 = GUICtrlCreateListView("1|2|3|4|5|", 64, 32, 305, 305)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 4, 80)

GUISetState(@SW_SHOW)
_GUICtrlListView_AddArray($ListView1,$Array)

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit

 EndSwitch
WEnd
Salut c'est a nouveau moi,

Toujours sur le même dev mais j'ai pu avancer un peu mais je but sur un problème.
@walkson, y aurait il moyen d'appliquer le traitement que tu m'a proposé pour retirer le | de fin de ligne a un guictrlread d'un listeviewitem?

L'idée étant de permettre de visualiser un fichier pdf pour récupérer les information nécessaire au lancement de la recherche pour la requête SQL...

Merci d'avance.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: afficher le resultat d'une requete SQL autrement que dans la console

#8

Message par walkson »

Bonjour,
Je n'ai pas compris votre question.
y aurait il moyen d'appliquer le traitement que tu m'a proposé pour retirer le | de fin de ligne
Empêcher le "|" en fin de ligne, c'est empêcher une nouvelle colonne qui entraine une erreur.
Si c'est pour la lecture d'une ligne sélectionnée, vous pouvez utiliser StringSplit ( "string", "delimiters" [, flag = 0] ) ou plus simplement _GUICtrlListView_GetItemTextArray($ListView1) Dans les deux cas, vous avez un array et vous pouvez retrouver les données en faisant une boucle sur cet array
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
ptiseb60
Niveau 2
Niveau 2
Messages : 23
Enregistré le : ven. 19 mai 2017 14:59
Status : Hors ligne

Re: afficher le resultat d'une requete SQL autrement que dans la console

#9

Message par ptiseb60 »

merci encore pour le coup de pouce, je m'en suis finalement sortis avec un stringreplace du "|" en "".
Répondre