jeudi 29 novembre 2012

AutoIt - Connectez-vous à bases de données Access - mdb et Accdb Fichiers


Vous vous demandez comment se connecter à partir de l'AutoIt à une base de données MS Access? AutoIt, pour ceux qui ne connaissent pas, est un programme pour automatiser les frappes et les mouvements de la souris. C'est en référence à un article de blog au sujet d'un problème que j'ai eu pour la connexion d'accès à partir de AutoIt. Il existe deux types de fichiers différents dans MS Access 2007. Access 2003, 2000 et version plus ancienne plupart utilisent un type de fichier mdb,. Alors, Access 2007 peut utiliser l'extension de fichier accdb / type.. Je vais vous montrer un peu de code de base qui va travailler avec les deux versions. Pour cet exemple, je vais seulement récupérer un enregistrement et un champ.

D'abord nous allons d'abord créer quelques variables qui contiendront le nom du fichier de base de données (si MDB ou ACCDB..), Le nom de la table et la requête à exécuter:

$ Dbname = "C: \ Users \ vk \ Documents \ db \ Marketing \ articleSubmissionsTutorialRef.mdb"
$ Tblname = "articles"
$ Query = "SELECT * FROM" & $ & tblname "WHERE articleID = 4"

Le & est tout simplement une concaténation des chaînes de caractères.

Nous allons définir la variable pour le seul domaine que nous voulons récupérer à partir de la base de données.

Local $ title

Assez simple à ce jour, n'est-ce pas?

Ensuite, créez la connexion au ADODB:

$ AdoCon = ObjCreate ("ADODB.Connection")

Ensuite, réglez le fournisseur. Il est un fournisseur différent pour chaque extension de fichier. Un fichier. Mdb aura son propre fournisseur et un fichier. Accdb aura une autre.

Voici le fournisseur d'un fichier mdb.:

$ AdoCon.Open ("Driver = {Microsoft Access Driver (* mdb).}; DBQ =" & $ dbname)

Voici le fournisseur pour accdb.:

$ AdoCon.Open ("Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" & $ dbname)

Maintenant, nous allons créer l'objet Recordset, définir quelques options requises, puis exécuter la requête:

$ AdoRs = ObjCreate ("ADODB.Recordset")
$ AdoRs.CursorType = 1
$ AdoRs.LockType = 3
$ AdoRs.Open ($ query, $ adoCon)

Quelques notes sur les propriétés CursorType et LockType. J'avais besoin de mettre celles-ci afin de récupérer la valeur du champ spécifié.

Réglage de la CursorType à une valeur de '1 'signifie' adOpenKeyset '. CursorType est défini sur la MSDN comme: "Définit ou retourne une valeur CursorTypeEnum La valeur par défaut est 'adOpenForwardOnly» Utilisez la propriété CursorType de spécifier le type de curseur qui doit être utilisé lors de l'ouverture de l'objet Recordset... " Le adOpenKeyset est défini sur le site MSDN de Microsoft en tant que: "Utilise un curseur keyset Comme un curseur dynamique, sauf que vous ne pouvez pas voir les dossiers que les autres utilisateurs ajoutent, bien que des changements de données des dossiers que les autres utilisateurs de suppression ne sont pas accessibles à partir de votre Recordset.. d'autres utilisateurs sont encore visibles ".

Curieusement, quand j'ai essayé de régler le CursorType à une valeur de '2 'qui signifie' adOpenDynamic 'AutoIt n'a pas pu récupérer la valeur du champ. Il était juste vide, mais aucune erreur n'est survenue. «AdOpenDynamic» est défini comme suit: "Utilise un curseur dynamique ajouts, modifications et suppressions par d'autres utilisateurs sont visibles, et tous les types de déplacement à travers le jeu d'enregistrements sont autorisés, à l'exception des signets, si le fournisseur ne les supportent pas.".

LockType est défini comme "Indique le type de verrous placés sur les dossiers pendant le montage. Définit ou retourne une valeur LockTypeEnum. La valeur par défaut est adLockReadOnly." Avec sa valeur fixé à '3 'qui indique «adLockOptimistic». «AdLockOptimistic 'est" Indique le verrouillage optimiste, enregistrement par enregistrement. Le fournisseur utilise le verrouillage optimiste, le verrouillage des enregistrements uniquement lorsque vous appelez la méthode Update "ce qui est bon si nous laissons à cette valeur.

Puis nous suffit de placer le résultat dans la variable $ title, nous avons déclaré plus tôt. Vous pouvez utiliser l'une des deux lignes suivantes. La première est la récupération de la valeur par le nom du champ, ce dernier étant le récupérer par ordre numérique du champ. Essentiellement, c'est le numéro de la colonne. Les numéros de colonnes commence à '0 '(zéro) et non '1' (un). Donc, si vous voulez récupérer la valeur de la troisième colonne, alors vous utilisez la valeur '2 '.:

$ Title = $ adoRs.Fields ("title"). Valeur

$ Title = $ adoRs.Fields (2). Valeur

Fermeture de la connexion à moins que vous n'ayez une bonne raison pour quitter votre connexion ouverte:

$ AdoCon.Close

Ensuite, tester les résultats avec la fonction MsgBox ():

MsgBox (0, "test", $ titre)

Donc, voici le code complet:

Local $ title
$ AdoCon = ObjCreate ("ADODB.Connection")
; $ AdoCon.Open ("Driver = {Microsoft Access Driver (* mdb).}; DBQ =" & $ dbname); Utilisez cette ligne si vous utilisez MS Access 2003 et inférieur
$ AdoCon.Open ("Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" & $ dbname); Utilisez cette ligne si vous utilisez MS Access 2007 et en utilisant l'extension de fichier accdb.
$ AdoRs = ObjCreate ("ADODB.Recordset")
$ AdoRs.CursorType = 1
$ AdoRs.LockType = 3
$ AdoRs.Open ($ query, $ adoCon)
$ Title = $ adoRs.Fields ("title") valeur;. Récupérer valeur par le nom du champ
; $ Title = $ adoRs.Fields (2) Valeur;. Récupérer valeur par numéro de colonne
$ AdoCon.Close
MsgBox (0, "test", $ titre)

Dans cet article, nous avons montré comment se connecter à un accès de base de données 2007 ou 2003 à l'aide AutoIt. Cet article explique comment récupérer un enregistrement ou une ligne et un seul champ. Dans un prochain article, nous allons décrire comment récupérer plusieurs enregistrements dans un tableau....

Aucun commentaire:

Enregistrer un commentaire