Bonjour,
Je tourne en rond depuis plusieurs jours sur une requête qui me semble pourtant simple et que j'effectue sans problème depuis bien longtemps, à la seule différence que j'effectue cette requête sur une vue et pas sur des tables...
Voici mon code :
► Afficher le texte
Code : Tout sélectionner
Global $objRecordSet
Global $objConnection_sys
Global $ChaineConnexion = ""
Global $CommandeSQL = ""
Global Const $adOpenStatic = 3
Global Const $adLockOptimistic = 3
; Connexion à la BDD
Global $SqlServer = _connect_system()
$requete = "SELECT EXPERT," &@CRLF& _
"ASSISTANTE," &@CRLF& _
"RAISONSOCIALE," &@CRLF& _
"DPT," &@CRLF& _
"MISSION," &@CRLF& _
"AFFECTATION," &@CRLF& _
"ETAT," &@CRLF& _
"PISTE," &@CRLF& _
"ETATPISTE," &@CRLF& _
"COLLECTE," &@CRLF& _
"SEMAINEPROD," &@CRLF& _
"ENVOIPRODDIAG," &@CRLF& _
"RETOURPRODDIAG," &@CRLF& _
"VALIDDIAG," &@CRLF& _
"REMISE" &@CRLF& _
" FROM vPlanDeCharge"
$resultat = _requete($requete,$SqlServer)
;~ Contrôles
ConsoleWrite("Etat : " & $resultat.State & @LF) ; => 1
ConsoleWrite("Nb Champs : " & $resultat.Fields.Count & @LF) ; => 15
ConsoleWrite("Nb resultats : " & $resultat.recordcount & @LF) ; => 94
ConsoleWrite("Debut : " & $resultat.BOF & @LF) ; => True
ConsoleWrite("Fin : " & $resultat.EOF & @LF) ; => True
ConsoleWrite("Nom Client : " & $resultat.Fields.Item(1).Value & @LF) ; => Vide
ConsoleWrite("Nom Client : " & $resultat.Fields("RAISONSOCIALE").Value & @LF) ; => Vide
;~ ##########################################TODO
; Ecriture des lignes de données
If $resultat.recordcount > 0 Then
While NOT $resultat.EOF
ConsoleWrite($i & @LF)
ConsoleWrite($resultat.fields("EXPERT").value & @LF)
ConsoleWrite($resultat.fields("ASSISTANTE").value & @LF)
ConsoleWrite($resultat.fields("RAISONSOCIALE").value & @LF)
ConsoleWrite($resultat.fields("DPT").value & @LF)
ConsoleWrite($resultat.fields("MISSION").value & @LF)
ConsoleWrite($resultat.fields("AFFECTATION").value & @LF)
ConsoleWrite($resultat.fields("ETAT").value & @LF)
ConsoleWrite($resultat.fields("PISTE").value & @LF)
ConsoleWrite($resultat.fields("ETATPISTE").value & @LF)
ConsoleWrite($resultat.fields("COLLECTE").value & @LF)
ConsoleWrite($resultat.fields("SEMAINEPROD").value & @LF)
ConsoleWrite($resultat.fields("ENVOIPRODDIAG").value & @LF)
ConsoleWrite($resultat.fields("RETOURPRODDIAG").value & @LF)
ConsoleWrite($resultat.fields("VALIDDIAG").value & @LF)
ConsoleWrite($resultat.fields("REMISE").value & @LF)
$resultat.MoveNext
WEnd
EndIf
Func _connect_system()
$objConnection_sys = ObjCreate("ADODB.Connection")
$ChaineConnexion = "Driver={SQL SERVER};Server=MONSERVEUR\SQLEXPRESS;Database=MABASE;UID=Identifiant;PWD=MotDePasse;"
$objConnection_sys.Open( $ChaineConnexion )
Return $objConnection_sys
EndFunc
Func _requete($CommandeSQL,$connexion)
If IsObj($objRecordSet) Then $objRecordSet=""
$objRecordSet = ObjCreate("ADODB.Recordset")
$objRecordSet.Open( $CommandeSQL, $connexion, $adOpenStatic, $adLockOptimistic )
If $objRecordSet.RecordCount > 0 Then $objRecordSet.MoveFirst
Return $objRecordSet
EndFunc
La requête d'origine (appel de 9 tables avec jointures) ne me remontait aucun enregistrement dans autoit, alors qu'elle fonctionnait correctement sur SQL Manager.
Dans un premier temps j'ai découpé cette requête en 4 parties, qui me remontaient chacune des enregistrements... Mais cela m'obligeait à créer les jointures avec Autoit, là ou la requête d'origine se générait en une dizaine de secondes.
J'ai donc utilisé une vue qui se génère également correctement dans SQL server.
Mon problème est que les fonctions RecordCount et Fields.Count remontent le nombre de résultats corrects (respectivement 94 et 15), mais EOF et BOF sont tous deux à True, ce qui signifie que la requête n'a remonté aucun résultat (et c'est à ce moment là que je crie à mon ordi : Mais bien sur que si ! Tu viens de me dire qu'il y a 94 résultats !!!

).
J'ai tenté de restructurer la manière de faire mes requêtes en utilisant les objets Command et en utilisant la fonction Execute directement sur l'objet Connection, pensant que le problème venait peut-être des objets RecordSet qui ne supportaient pas de requêter des vues, mais sans plus de succès... Je me suis renseigné sur les objets ADO depuis 2 jours, sans trouver de solution... Ni comprendre pourquoi mon code réagit ainsi...
Merci d'avance pour vos réponses ou pistes de recherche...