Page 1 sur 1
[R]autoit et interrogation base de donnée access 2003
Posté : jeu. 09 avr. 2009 15:02
par wasabi
Bonjour. je vous explique:
Je souhaité créer un logiciel qui me permette de me connecter automatique a une applis du travail.
Utilisateur de plusieur profil oblige j'ai donc créer una base de donnée sur Access 2003 avec tout mes panneau de configue et tout. Maintenant je souhaite automatiser cette tache par le biais d'autoit, mais le souci c que je n'arrive pas a récupérer les info stocker dans ma base de donnée.
Comment faire s'il vous plait.
Voila se que j'ai actuellement:
► Afficher le texte
Code : Tout sélectionner
Global Const $ProviderJET = 'Microsoft.Jet.OLEDB.4.0; '
Global $oAccessADO, $rsAccess, $AccessDB
Dim $SQL
$AccessDB = "C:\connexion.mdb"
$oAccessADO = _adoAccessOpen($AccessDB)
MsgBox(0,"connexion",$oAccessADO.State)
$rsAccess = ObjCreate("ADODB.Recordset")
;$SQL = "Select username, password from utilisateur"
;==>error on open recordset!
;==>Error: The requested action with this object has failed.
;$oAccessADO.execute($SQL)
;$rsAccess.open($SQL, $oAccessADO, 1, 3)
;
;While Not $rsAccess.EOF
;$NameList &= $rsAccess.Fields ("username").value & " " & $rsAccess.Fields ("password").value & @CRLF
;$rsAccess.MoveNext
;WEnd
;$rsAccess.close
;MsgBox(0,"liste des users",$NameList)
Func _adoAccessOpen($AccessDB)
$oAccessADO = ObjCreate("ADODB.Connection")
$oAccessADO.Provider = $ProviderJET
$oAccessADO.Open($AccessDB)
If @error Then
MsgBox(0, "ERROR", "Cant open Access Database , handle = " & $oAccessADO)
EndIf
Return $oAccessADO
EndFunc ;==>_adoAccessOpen
Re: autoit et BDD
Posté : jeu. 09 avr. 2009 17:03
par GaRydelaMer
Bonjour
J'ai déjà répondu ici même et donnés quelques fonctions que j'utilise tout le temps pour accéder à mes bases de données, Access 2000 pour moi, pas de différence avec 2003 pour l'accès au mdb.
Pour créer un Recordset et y accéder
Local $oConn = _ADO_Open("c:\xxx.mdb")
Local $_oRS = ObjCreate("ADODB.Recordset")
$_oRS.Open($SQL, $oConn, $adOpenStatic, $adLockOptimistic)
j'imagine que tu connais quand même bien les objets ADO.
► Afficher le texteExemples de fonction
Code : Tout sélectionner
Func _ADO_Open($base, $driver = "", $serveur = "" , $user = "", $pwd = "")
Local $oConn = ObjCreate("ADODB.Connection")
With $oConn
Switch StringLower($driver)
Case "excel"
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};Dbq=" & $base
.Open
Case "text"
.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" & $base & ";Extensions=tab;Extended Properties=TEXT"
.Open
Case "mssql"
.ConnectionString = "driver={SQL Server};server=" & $serveur & ";db=" & $base & ";user id=" & $user & ";pwd=" & $pwd & ";option=16386"
.Open
Case Else
.Provider = $adoProvider
.Open($base)
EndSwitch
EndWith
Return $oConn
EndFunc ;==>_ADO_Open
Func Files_toADORS(ByRef $a)
Local $_oRS = ObjCreate("ADODB.Recordset")
$_oRS.Open("SELECT * FROM FICHIERS", $oConn, $adOpenStatic, $adLockOptimistic)
With $_oRS
For $i = 1 To $a[0]
If $a[$i] = "" Then ContinueLoop
Local $filter = "Full_Path='" & StringReplace($a[$i], "'", "''") & "'"
.Filter = $filter
If .RecordCount = 0 Then
.AddNew
.Fields("Full_Path" ).Value = $a[$i]
EndIf
Local $szDrive, $szDir, $szFName, $szExt
_PathSplit($a[$i], $szDrive, $szDir, $szFName, $szExt)
.Fields("File" ).Value = $szFName
.Fields("Taille" ).Value = FileGetSize($a[$i])
Next
.Update
.Close
EndWith
EndFunc ;==>Files_toADORS
► Afficher le texteConstantes ADO
Code : Tout sélectionner
#Region Constantes
Global Const $adoProvider = 'Microsoft.Jet.OLEDB.4.0'
Global Const $adPersistXML = 1
Global Const $adUseClient = 3
Global Const $adSchemaTables = 20
Global Const $adVarChar = 200
Global Const $adClipString = 2
Global Const $MaxCharacters = 255
;CursorTypeEnum Constants
Global Const $adOpenUnspecified = -1
Global Const $adOpenForwardOnly = 0
Global Const $adOpenKeyset = 1
Global Const $adOpenDynamic = 2
Global Const $adOpenStatic = 3
;LockTypeEnum Constants
Global Const $adLockUnspecified = -1
Global Const $adLockReadOnly = 1
Global Const $adLockPessimistic = 2
Global Const $adLockOptimistic = 3
Global Const $adLockBatchOptimistic = 4
;CommandTypeEnum Constants
Global Const $adCmdFile = 256
Global Const $adCmdStoredProc = 4
Global Const $adCmdTable = 2
Global Const $adCmdTableDirect = 512
Global Const $adCmdText = 1
Global Const $adCmdUnknown = 8
Global Const $adCmdUnspecified = -1
;EditModeEnum
Global Const $adEditNone = 0
Global Const $adEditInProgress = 1
Global Const $adEditAdd = 2
Global Const $adEditDelete = 4
;ExecuteOptionEnum Constants
Global Const $adAsyncFetch = 32
Global Const $adAsyncFetchNonBlocking = 64
;BookmarkEnum
Global Const $adBookmarkCurrent = 0
Global Const $adBookmarkFirst = 1
Global Const $adBookmarkLast = 2
;GetRowsOptionEnum
Global Const $adGetRowsRest = -1
;ObjectStateEnum
Global Const $adStateClosed = 0
Global Const $adStateOpen = 1
Global Const $adStateConnecting = 2
Global Const $adStateExecuting = 4
Global Const $adStateFetching = 8
#EndRegion Constantes
Re: autoit et BDD
Posté : jeu. 09 avr. 2009 17:40
par Yogui
sinon petit lien vers un UDF access :
http://dundats.mvps.org/AutoIt/udf_code.aspx?udf=access$
liste des fonctions
; _accessCompactDB() *
; _accessCreateDB()
; _accessCreateTable()
; _accessDeleteTable()
; _accessListTables()
; _accessCountTables()
; _accessAddRecord()
; _accessUpdateRecord()
; _accessDeleteRecord()
; _accessClearTable()
; _accessCountRecords()
; _accessCountFields()
; _accessListFields()
; _accessQueryLike()
; _accessQueryStr()
; _accessSaveXML()
Re: autoit et BDD
Posté : jeu. 09 avr. 2009 20:36
par Tlem
@wasabi
Merci de ré-éditer votre message afin de le rendre conforme aux
règles de présentation d'un message.
Re: [...]autoit et interrogation base de donnée access 2003
Posté : ven. 10 avr. 2009 09:41
par wasabi
GaRydelaMer :
Merci pour ton aide mais je ne capte pas tout il y as encore une erreur.
J'ai ajouter a tout sa une requete sql mais il m'envoie promener ( encore ^^).
Re: [...]autoit et interrogation base de donnée access 2003
Posté : ven. 10 avr. 2009 11:04
par GaRydelaMer
Bonjour
c'est quoi l'erreur ?
Le principe, créer un objet "ADODB.Connection"
Puis un RecordSet comme tu le ferais dans un module dans access.
Sinon Ajoute ca dans ton script:
Au début
Code : Tout sélectionner
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc"), $EventError = 0
Func MyErrFunc()
Local $msg, $HexNumber = Hex($oMyError.number, 8)
Switch $HexNumber
Case "_80020009"
$msg = MsgBox(4 + 16, $FenetreFilms & " Erreur " & $oMyError.scriptline, _
"err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
"Risque de doublons" & @LF & @LF & "continuer ?")
SetError(1, 1)
Case Else
$msg = MsgBox(4 + 16, "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.source is: " & @TAB & $oMyError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oMyError.helpcontext & @CRLF & @CRLF & _
"Continuer ???")
SetError(1, 9)
EndSwitch
If $msg <> 6 Then Exit
EndFunc ;==>MyErrFunc
Avec ca tu auras les erreurs renvoyer par les objets ADO.
Re: [...]autoit et interrogation base de donnée access 2003
Posté : ven. 10 avr. 2009 11:19
par wasabi
Pour faire simple j'ai une requete sql qui me permet de selectionner dans ma table sous access un login et un utilisateur, mais le souci c'est qu'il refuse completement de tout me renvoyé.
► Afficher le texte
Code : Tout sélectionner
Global Const $ProviderJET = 'Microsoft.Jet.OLEDB.4.0; '
Global $oAccessADO, $rsAccess, $AccessDB
Global $SQL
$AccessDB = "C:\connexion.mdb"
$oAccessADO = _adoaccessOpen($AccessDB)
MsgBox(0,"connexion",$oAccessADO.State)
$rsAccess = ObjCreate("ADODB.Recordset")
$SQL = "SELECT [utilisateur].username, [utilisateur].password FROM utilisateur" ;==>> selectionner ma table.
[color=#FF0000];==>error on open recordset!
;==>Error: The requested action with this object has failed.[/color]
[color=#FF0000]ET LA SA m....!!!!!!!!!!!!!!!!!!!!!!!![/color]
$oAccessADO.execute ($SQL)
$rsAccess.open($SQL, $oAccessADO, 1, 3)
While Not $rsAccess.EOF
$NameList &= $rsAccess.Fields ("username").value & " " & $rsAccess.Fields ("password").value & @CRLF
$rsAccess.MoveNext
WEnd
$rsAccess.close
MsgBox(0,"liste des users",$NameList)
Func _adoAccessOpen($AccessDB)
$oAccessADO = ObjCreate("ADODB.Connection")
$oAccessADO.Provider = $ProviderJET
$oAccessADO.Open($AccessDB)
If @error Then
MsgBox(0, "ERROR", "Cant open Access Database , handle = " & $oAccessADO)
EndIf
Return $oAccessADO
EndFunc ;==>_adoAccessOpen
Ou avec ton script:
► Afficher le texte
Code : Tout sélectionner
Global Const $ProviderJET = 'Microsoft.Jet.OLEDB.4.0; '
Global $oAccessADO, $rsAccess, $AccessDB
Global $SQL
$AccessDB = "C:\connexion.mdb"
$oAccessADO = _adoaccessOpen($AccessDB)
MsgBox(0,"connexion",$oAccessADO.State)
$rsAccess = ObjCreate("ADODB.Recordset")
$SQL = "SELECT [utilisateur].username, [utilisateur].password FROM utilisateur"
;==>error on open recordset!
;==>Error: The requested action with this object has failed.
;$oAccessADO.execute ($SQL)
;$rsAccess.open($SQL, $oAccessADO, 1, 3)
;While Not $rsAccess.EOF
$NameList &= $rsAccess.Fields ("username").value & " " & $rsAccess.Fields ("password").value & @CRLF
$rsAccess.MoveNext
;WEnd
$rsAccess.close
MsgBox(0,"liste des users",$NameList)
Func _adoAccessOpen($AccessDB)
$oAccessADO = ObjCreate("ADODB.Connection")
$oAccessADO.Provider = $ProviderJET
$oAccessADO.Open($AccessDB)
If @error Then
MsgBox(0, "ERROR", "Cant open Access Database , handle = " & $oAccessADO)
EndIf
Return $oAccessADO
EndFunc ;==>_adoAccessOpen
Re: [...]autoit et interrogation base de donnée access 2003
Posté : ven. 10 avr. 2009 11:29
par GaRydelaMer
Essaye ca:
Code : Tout sélectionner
Global Const $ProviderJET = 'Microsoft.Jet.OLEDB.4.0'
Global Const $adOpenStatic = 3
Global Const $adLockOptimistic = 3
Global $AccessDB = "C:\connexion.mdb"
Global $oAccessADO = _adoaccessOpen($AccessDB)
Global $rsAccess = ObjCreate("ADODB.Recordset")
Global $SQL = "SELECT username, password FROM utilisateur" ;==>> selectionner ma table.
$rsAccess.open($SQL, $oAccessADO, $adOpenStatic, $adLockOptimistic)
Global $NameList = ""
While Not $rsAccess.EOF
$NameList &= $rsAccess.Fields("username" ).value & " " & $rsAccess.Fields("password" ).value & @CRLF
$rsAccess.MoveNext
WEnd
$rsAccess.close
MsgBox(0, "liste des users", $NameList)
Func _adoAccessOpen($AccessDB)
$oAccessADO = ObjCreate("ADODB.Connection")
$oAccessADO.Provider = $ProviderJET
$oAccessADO.Open($AccessDB)
If @error Then
MsgBox(0, "ERROR", "Cant open Access Database , handle = " & $oAccessADO)
Else
MsgBox(0, "connexion", $oAccessADO.State)
EndIf
Return $oAccessADO
EndFunc ;==>_adoAccessOpen
Re: [...]autoit et interrogation base de donnée access 2003
Posté : ven. 10 avr. 2009 11:32
par wasabi
erreur identique.
par contre si je met en commentaire ceci
Code : Tout sélectionner
$rsAccess.open($SQL, $oAccessADO, $adOpenStatic, $adLockOptimistic)
Global $NameList = ""
While Not $rsAccess.EOF
$NameList &= $rsAccess.Fields("username" ).value & " " & $rsAccess.Fields("password" ).value & @CRLF
$rsAccess.MoveNext
WEnd
$rsAccess.close
MsgBox(0, "liste des users", $NameList)
j'ai pas d'erreur.
Re: [...]autoit et interrogation base de donnée access 2003
Posté : ven. 10 avr. 2009 11:46
par GaRydelaMer
Tu es sur de ton SQL ?
Ajoute la gestion des erreurs tu auras un message un peu plus clair sur l'erreur de ADO.
Re: [...]autoit et interrogation base de donnée access 2003
Posté : ven. 10 avr. 2009 11:53
par wasabi
http://img14.imageshack.us/my.php?image ... treoiw.jpg
arf résolu.^^
Aprés vérification j'ai ma table qui s'appelai utiliateur, il manquait le S désolé.
Re: [...]autoit et interrogation base de donnée access 2003
Posté : ven. 10 avr. 2009 11:58
par GaRydelaMer
L'erreur est claire, il trouve pas la Table "utilisateur" vérifie le nom de la table avec access. Ton SQL est pas bon.
edit:
Alors ca marche !!! (avec le "s"), n'hésite pas à revenir si tu bloque ailleurs dans ton développement.
Re: [R]autoit et interrogation base de donnée access 2003
Posté : ven. 10 avr. 2009 12:02
par wasabi
Merci beaucoup de ton aide .
je reviendrai vers toi si je blok encore. merci.
Re: [...]autoit et interrogation base de donnée access 2003
Posté : ven. 10 avr. 2009 12:05
par GaRydelaMer
modifie le titre du sujet pour mettre Résolu.
[R]autoit et interrogation base de donnée access 2003
N'hésite pas, je manipule pas mal de base de données avec AutoIt.