[Tuto] Base de données avec ADO, ADOX, DataLinks.

Espace contenant des tutoriels divers concernant AutoIt.
Règles du forum
.

Tutoriel "La programmation avec Autoit" : https://openclassrooms.com/fr/courses/1 ... vec-autoit
Répondre
GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

[Tuto] Base de données avec ADO, ADOX, DataLinks.

#1

Message par GaRydelaMer » mar. 28 avr. 2009 12:29

Présentation.

L'utilisation de bases de données relationnelles est de plus en plus courantes de nos jours dans divers domaines tels que:
Les projets et programmes d'entreprise souvent client-serveur, des sites web dynamiques (le plus courant Apache, PHP et MySQL), etc....

Mais revenons au sujet qui nous intéresse ici. L'utilisation de bases de données avec AutoIt.
Cependant avant de rentrer dans le vif du sujet il conviendra pour le néophyte de se familiariser un minimum avec un autre langage le SQL qui est le moyen d'interroger tout type de bases de données, puisqu'il est normalisé (plus ou moins suivant le moteur de la base utilisé).
Pour cela je vous recommande de faire de ces pages votre nouveau livre de chevet !!! à consulter bien sûr en ligne a cette adresse:
http://sqlpro.developpez.com/
Le langage SQL (Structured Query Language) de A à Z pour le débutant comme pour le pro... avec ses forums associés, de nombreux exemples et des exercices.
SQLpro est le site web n°1 en langue française pour apprendre le langage SQL et les SGBD relationnels.
Ce site constitue un véritable tutoriel sur la norme SQL et les différents dialectes SQL pour MySQL, Microsoft SQL Server (Transact SQL), Oracle(PL/SQL), BM DB2 (SQL PL), PostGreSQL (PG PL/SQL), InterBase/FireBird, Access, Sybase...
Des articles et des cours spécialisés (l'indexation, l'optimisation des requêtes, l'indexation textuelle, SQL récursif et la gestion d'arbres, la division relationnelle, les techniques des SGBD relationnels...)
SQLpro, c'est un véritable guide d'apprentissage et d'auto-formation au langage SQL et aux SGBDR
Avant de commencer tout projet, il faut déjà bien réfléchir à la structure de la base de données. En d'autres termes comment organiser nos données dans divers tables, quelles relations sont à mettre en place entre les tables (la meilleure façon pour limiter au maximum la redondance des données). Une fois cette première analyse effectuée on pourra aussi réfléchir à la façon d'optimiser la base de données pour les recherches et requêtes les plus utilisées, en un mot la création de nos index.

Pour la suite de cet exposé, je vais vous montrer ma façon d'utiliser les bases de données au travers de l'objet COM ADODB de Microsoft disponible sur tout les systèmes Windows, lieu (et le seul) de prédilection de notre grand ami qui nous réunis ici AUTOIT.

Donc la bibliothèque ADO, nous fournis l'ensemble des moyens uniformisé pour interagir avec un grand nombre de bases de données qui dispose d'un drivers ODBC. Vous pouvez vérifier par vous même l'ensemble des drivers disponible sur votre machine dans le panneau de configuration avec l'outil sources de données ODBC. D'autres bases dispose également en téléchargement de pilotes ODBC, je veux penser à MySQL par exemple.
Modèle de base de programmation ADO
ADO vous permet d'effectuer la séquence d'actions suivante :
  • - Vous connecter à une source de données. Vous pouvez, si vous le souhaitez, vous assurer que toutes les modifications apportées à la source de données sont prises en compte ou non.
  • - Spécifier une commande vous donnant accès à la source de données, en ajoutant des paramètres variables ou en optimisant l'efficacité de la commande, si vous le souhaitez.
  • - Exécuter la commande.
  • - Si la commande renvoie des données sous la forme de lignes dans une table, vous pouvez stocker ces dernières en mémoire cache afin de les examiner, de les manipuler ou de les modifier.
  • - En fonction de vos besoins, mettre à jour la source de données en y intégrant les lignes modifiées stockées en mémoire cache.
  • - Détecter des erreurs (résultant généralement de l'établissement d'une connexion ou de l'exécution d'une commande).
Généralement, toutes ces étapes seront appliquées dans le modèle de programmation. Il convient pourtant de spécifier qu'ADO est suffisamment souple pour vous permettre d'effectuer des opérations utiles en n'exécutant qu'une partie du modèle. Par exemple, vous pouvez stocker les données d'un fichier directement dans un cache de lignes, puis faire appel aux ressources d'ADO pour les examiner.
Petit rappel nous allons utilisé des objets, chaque objet dispose de méthodes, propriétés (certaines en lecture seule) et de collections.
Les méthodes, correspondes à des fonction propres a l'objet que nous allons appeler.
$objet.Methode1($param1, $param2) ou si la méthode renvoie un résultat $resultat = $objet.Methode1($param1, $param2)

les propriétés, nous renvoie ou nous permettent de modifier le comportement de l'objet
$propriete1 = $objet.Propriete1, ou $objet.Propriete1 = $propriete1

les collections, nous renvoie une collection d'objet enfants par exemple une table contient une collection de champ que l'on parcours ensuite.

Code : Tout sélectionner

For $field In $oRS.Fileds
    ;;;; ici on pourra traiter l'objet field (champ) de la collection fields (les champs) d'une table
    $field.Name
Next
ou
Dans ce cas j'utilise la propriété Count (compte/nombre de) de la collection Fields

Code : Tout sélectionner

For $i = 0 To $oRS.Fields.Count - 1
    $oRS.Fields($i).Name
Next

GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [Tuto] Base de données

#2

Message par GaRydelaMer » mar. 28 avr. 2009 12:31

Le premier objet, que nous allons abordé dans ce tuto la connexion à une source de donnée.
Comme expliqué plus haut ADO nous permet de nous connecter à diverses source de données au travers d'un fournisseur (Provider) d'accès.
pour créer cet objet rien de plus simple: $oConn = ObjCreate("ADODB.Connection").
Ensuite on va jour sur les propriété de l'objet pour ouvrir la connexion à notre source. J'ai créer une fonction pour nous facilité cette tâche.

Code : Tout sélectionner

Global Const $adoProvider = "Microsoft.Jet.OLEDB.4.0"

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, $user, $pwd)
        EndSwitch
    EndWith
    Return $oConn
EndFunc   ;==>_ADO_Open
la fonction _ADO_Open($base, $driver = "", $serveur = "", $user = "", $pwd = "") comme on le voit il y a 5 paramètres, elle nous renvoi un objet "ADODB.Connection". Avec cette fonction il devient facile de se connecter à un fichier xls ou CVS, une base SQLServer, et par défault une base Access.
Dans tout les cas il faut que ce fichier ou cette base existe déja.

Voyons voir comment créer une base access avec AutoIt, la base "tuto.mdb" dans le dossier du script.
On va utiliser un dérivé de la bibliothèque ADO le catalogue des données:

Code : Tout sélectionner

Local $oDB = ObjCreate("ADOX.Catalog")
Local $DBPath = @ScriptDir & "\tuto.mdb"
$oDB.Create("Provider=" & $adoProvider & ";Data Source=" & $DBPath)
Bien sur dans le cadre d'un vrai projet on en fera une fonction qui permettra de créer la base à la 1ère utilisation (un setup).

A partir de cet instant tout ce qui va se passer c'est de créer et d'exécuter des commandes sur notre objet. Ces commandes sont des instructions SQL.

Pour ce faire on va utiliser la méthode "Execute" de notre objet connexion. Créer une table nommé "NomdelaTable" (pour ajouter un espace dans le nom de la table utiliser cette syntaxe "[Nom de la Table]") comme vous le voyer il s'agit de chaine de caractère que vous pouvez manipulera loisir.

Code : Tout sélectionner

$oConn = _ADO_Open($DBPath)
$oConn.Execute("CREATE TABLE NomdelaTable")
Ceci dit une table si on la peuple pas de champs elle sert à rien. Voyons voir comment ajouter des champs dans la table.
Mais avant, petit moment de réflexion, une table pourquoi faire, pour y mettre des données OK, mais quelles données ?
L'importance de cette question et sa réponse va nous permettre de faire le choix du type de données de chaque champ. Ainsi on choisira un type de champs parmi 4 familles: les littéraux (chaine), les numériques, les binaires (oui/non) et les temporelles (date heure).

On va donc modifier le code précédent pour créer la table avec les champs que nous avons besoin.

Code : Tout sélectionner

$oConn.Execute("CREATE TABLE NomdelaTable (Champ_id INTEGER NOT NULL PRIMARY KEY, Champ1 CHAR(25), Champ2 DATE, Champ3 INTEGER DEFAULT 1, Champ5 BIT DEFAULT TRUE)")
Certain qui auront suivi et exécuter le code précédent vont avoir une erreur car la table existe, dans ce cas on peut la supprimer avec l'instruction SQL: "DROP TABLE NomdelaTable".

Je vous conseille trés vivement de consulter le site car la norme SQL fait dans les 300 pages et c'est pas l'objet de ce tutoriel.
► Afficher le texteCode complet

GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [Tuto] Base de données

#3

Message par GaRydelaMer » mar. 28 avr. 2009 12:31

Après avoir vu comment se connecter à une base de donnée, le principal est d'accéder aux données qu'elle contient.
Pour se faire ADO met à notre disposition un objet RecordSet (jeu d'enregistrements) cet objet peut être apparenté à 1 tableau a 2 dimensions, ou un tableau sous excel: donc des lignes et des colonnes.

Pour le créer il nous faut une connexion valide (nous verrons comment nous en passer un peu plus tard).
Pour le créer avec AutoIt rien de plus simple:

Code : Tout sélectionner

$oRs = ObjCreate("ADODB.RecordSet")
Une fois l'objet instancier il faut l'ouvrir et lui fournir la source de donnée. Le plus souvent il s'agira du résultat d'une requête SQL (SELECT). Mais nous pouvons aussi simplement lui données le nom de la table à ouvrir.

GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [Tuto] Base de données

#4

Message par GaRydelaMer » mar. 28 avr. 2009 12:33

Réservé par moi

Utilisation de base autre que ADO

SQLite, MySQL.

voir le poste plus bas
http://www.autoitscript.fr/forum/viewto ... 865#p29865

GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [Tuto] Base de données. En cours de rédaction !!!

#5

Message par GaRydelaMer » sam. 02 mai 2009 00:18

les fichiers Texte

voir le poste plus bas
http://www.autoitscript.fr/forum/viewto ... 865#p29865

GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [Tuto] Base de données. En cours de rédaction !!!

#6

Message par GaRydelaMer » lun. 22 mars 2010 21:40

Bonsoir

je reviens sur mon tuto.

J'ai rajouté dans une application quelques routines (fonctions) sympa pour nous facilité la vie pour la création des connection avec en plus un petit GUI et la liste des drivers ODBC de votre machine. Plus l'utilisation d'un nouvel objet de ADO: Datalink qui permet de créer un DSN, d'utiliser les <> drivers ODBC et/ou OleDB. Je vous les partages.

pour l'utiliser:

Global $oConn = _ADOConnection_Create()
Ensuite on fais ce qu'on veu avec la connection mais surtout avant on l'ouvre: $oConn.Open
et à la fin on la ferme $oConn.Close Voir tuto.

Tester avec ODBC:
Driver TXT, Driver dBase, Driver Excel, MySQL, PostgreSQL, SQLite2 & 3

OleDB:
Microsoft OLDB Jet, avec des bases Access (enlever de la liste des drivers ODBC pour la performance).


Drivers SQLite ODBC driver trouvé sur le site, pareil pour MySQL (j'utilise aussi pour le web un petit serveur complet trés simple à configurer qui à PHP, et MySQL en standard ZazouMiniWebServer http://zmws.com) et PostgreSQL sur le site aussi.
A++

Code : Tout sélectionner

Func _ADOConnection_Create($GUI = 0)
    Local $oldGUIOnEventMode = Opt("GUIOnEventMode")
    Opt("GUIOnEventMode", 0)

    #Region ### START Koda GUI section ### Form=
    Local $GUI_Main, $Cb_ODBC, $BT_OLEDB, $Bt_Ok, $Bt_Cancel
    $GUI_Main = GUICreate("ADO Connection", 357, 129, -1, -1, -1, -1, $GUI)
    GUICtrlCreateGroup("", 8, 8, 257, 113)
    GUICtrlCreateLabel("Connection avec un pilote ODBC", 16, 24, 161, 17)
    $Cb_ODBC = GUICtrlCreateCombo("", 16, 48, 241, 25)
    GUICtrlCreateLabel("Créer une connection OLEDB", 16, 88, 145, 17)
    $BT_OLEDB = GUICtrlCreateButton("Créer", 184, 80, 75, 25, $WS_GROUP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Bt_Ok = GUICtrlCreateButton("&OK", 272, 16, 75, 25, $WS_GROUP)
    $Bt_Cancel = GUICtrlCreateButton("&Annuler", 272, 48, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    Local $a = _ODBC_GetDrivers()
    GUICtrlSetData($Cb_ODBC, _ArrayToString($a))

    Local $msg
    Local $oConn = ObjCreate("ADODB.Connection")
    $oConn.CursorLocation = $adUseClient
    While 1
        $msg = GUIGetMsg()
        Sleep(10)
        Switch $msg
            Case $GUI_EVENT_CLOSE, $Bt_Cancel
                $oConn = 0
                ExitLoop
            Case $BT_OLEDB
                Local $dl = ObjCreate("DataLinks")
                $oConn = $dl.PromptNew()
                If IsObj($oConn) Then ExitLoop
            Case $Bt_Ok
                If GUICtrlRead($Cb_ODBC) <> "" Then
                    $oConn.ConnectionString = "Provider=MSDASQL.1;Driver={" & GUICtrlRead($Cb_ODBC) & "};Prompt=Complete"
                    Switch StringLeft(GUICtrlRead($Cb_ODBC), 5)
                        Case "MySQL", "Postg"
                            $oConn.Properties("Prompt") = $adPromptAlways
                    EndSwitch
                    ExitLoop
                EndIf
        EndSwitch
    WEnd
    GUIDelete($GUI_Main)
    Opt("GUIOnEventMode", $oldGUIOnEventMode)
;~  If IsObj($oConn) And $oConn.ConnectionString Then
;~      If $oConn.State <> $adStateOpen Then $oConn.Open
;~  EndIf
    Return $oConn
EndFunc   ;==>_ADOConnection_Create
Func _ODBC_GetDrivers()
    Local $i = 0, $Drivers = "", $Value = ""
    While @Error = 0
        $i += 1
        $Value = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", $i)
        If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", $Value) = "Installed" Then $Drivers &= $Value & "|"
    WEnd
    Local $a = StringSplit($Drivers, "|", 2)
    For $i = UBound($a) - 1 To 0 Step -1
        Switch $a[$i]
            Case "", "Driver da Microsoft para arquivos texto (*.txt; *.csv)", _
                    "Driver do Microsoft Access (*.mdb)", _
                    "Driver do Microsoft dBase (*.dbf)", _
                    "Driver do Microsoft Excel(*.xls)", _
                    "Driver do Microsoft Paradox (*.db )", _
                    "Driver para o Microsoft Visual FoxPro", _
                    "Microsoft Access Driver (*.mdb)", _
                    "Microsoft Access-Treiber (*.mdb)", _
                    "Microsoft dBase-Treiber (*.dbf)", _
                    "Microsoft Excel-Treiber (*.xls)", _
                    "Microsoft ODBC pour Oracle", _
                    "Microsoft Paradox-Treiber (*.db )", _
                    "Microsoft Text-Treiber (*.txt; *.csv)", _
                    "Microsoft Visual FoxPro-Treiber";, _
                _ArrayDelete($a, $i)
        EndSwitch
    Next
    _ArraySort($a)
    Return $a
EndFunc   ;==>_ODBC_GetDrivers
 

GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [Tuto] Base de données avec ADO, ADOX, DataLinks.

#7

Message par GaRydelaMer » lun. 13 sept. 2010 09:29

Re,

J'en profites pour ajouter l'ensemble des constantes ADO:

http://msdn.microsoft.com/en-us/library ... S.85).aspx
► Afficher le texteLes constantes ADO

Répondre