Sujet du message: [Tuto] Base de données avec ADO, ADOX, DataLinks.
Posté: 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/
Citation
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.
Citation
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
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
For $i = 0 To $oRS.Fields.Count - 1 $oRS.Fields($i).Name Next
AutoIt Français
GaRydelaMer
Modérateur
Inscription: Mer 18 Mar 2009 22:12 Messages: 220 Age: 39
Localisation: Montpellier
Sujet du message: Re: [Tuto] Base de données
Posté: 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
Global Const $adoProvider = "Microsoft.Jet.OLEDB.4.0"
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
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.
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.
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.
Spoiler pour Code complet :
Code
;======= les constantes ADO =============================== GlobalConst$adoProvider = "Microsoft.Jet.OLEDB.4.0"
Inscription: Mer 18 Mar 2009 22:12 Messages: 220 Age: 39
Localisation: Montpellier
Sujet du message: Re: [Tuto] Base de données
Posté: 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: $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.
AutoIt Français
GaRydelaMer
Modérateur
Inscription: Mer 18 Mar 2009 22:12 Messages: 220 Age: 39
Inscription: Mar 04 Nov 2008 21:51 Messages: 129 Age: 38
Localisation: Avignon
Sujet du message: Re: [Tuto] Base de données. En cours de rédaction !!!
Posté: Mer 10 Mar 2010 14:33
Bonjour GaRydelaMer,
Merci ++ d'avoir pris du temps pour nous faire ton tuto car il correspond à mes besoins actuels
N'étant pas spécialiste des connexion de base de données, je bloque sur les paramètres de connexion.
En fait j'ai un alias ODBC déclaré en local sur mon poste.
Pour l'Alias, j'ai : - le nom de l'Alias (aaa) - l'adresse IP du serveur (iii) - le port de connexion (ppp) - l'utilisateur (uuu) - le mot de passe (mmm)
1. Est il possible de l'utiliser ou dois je me connecter directement au serveur de base de données ?
J'ai essayé de rentrer les infos que je pouvais dans ta fonction "_ADO_Open" mais sans succès
Il me dit :
Code
WARNING: $driver: possibly used before declaration.
2. Où puis je trouver la version du driver SQL de mon poste ?
3. A quoi correspond "option=16386". Est ce le n° de port ?
Merci d'avance pour ton aide
Amicalement.
BM
PS : Peut être ne suis je pas au bon endroit (Tuto) pour poser ma question... Merci de me le dire si c'était le cas
AutoIt Français
GaRydelaMer
Modérateur
Inscription: Mer 18 Mar 2009 22:12 Messages: 220 Age: 39
Localisation: Montpellier
Sujet du message: Re: [Tuto] Base de données. En cours de rédaction !!!
Posté: Lun 22 Mar 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.
Elle va répondre à ta question.
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.
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++
Local$msg Local$oConn = ObjCreate("ADODB.Connection") $oConn.CursorLocation = $adUseClient While1 $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() IfIsObj($oConn)ThenExitLoop Case$Bt_Ok IfGUICtrlRead($Cb_ODBC) <> ""Then $oConn.ConnectionString = "Provider=MSDASQL.1;Driver={" & GUICtrlRead($Cb_ODBC) & "};Prompt=Complete" SwitchStringLeft(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) IfRegRead("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", $Value) = "Installed"Then$Drivers &= $Value & "|" WEnd Local$a = StringSplit($Drivers, "|", 2) For$i = UBound($a) - 1To0Step-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
AutoIt Français
scorp84
Niveau 5
Inscription: Mar 04 Nov 2008 21:51 Messages: 129 Age: 38
Localisation: Avignon
Sujet du message: Re: [Tuto] Base de données. En cours de rédaction !!!
Posté: Lun 22 Mar 2010 21:44
Bonsoir GaRydelaMer,
Merci ++ pour ton développement et tes explications
Je teste ça dès demain
Amicalement.
BM
Dernière édition par scorp84 le Mer 30 Juin 2010 19:18, édité 1 fois.
AutoIt Français
GaRydelaMer
Modérateur
Inscription: Mer 18 Mar 2009 22:12 Messages: 220 Age: 39
Localisation: Montpellier
Sujet du message: Re: [Tuto] Base de données. En cours de rédaction !!!
Posté: Lun 22 Mar 2010 21:47
De rien je bosse dessus en ce moment, réécrite de ce matin.
L'interface est aps trés jolie mais ca march, après je verais pour le coté fioriture
AutoIt Français
scorp84
Niveau 5
Inscription: Mar 04 Nov 2008 21:51 Messages: 129 Age: 38
Localisation: Avignon
Sujet du message: Re: [Tuto] Base de données avec ADO, ADOX, DataLinks.
Posté: Mer 31 Mar 2010 14:46
Bonjour GaRydelaMer,
J'ai essayé d'utiliser ton tuto mais je bloque encore pour me connecter (je t'avais bien dit que c'était pas mon truc les bases de données
Grâce à ton dernier post (merci j'ai trouvé les drivers ODBC de mon PC : SQL Server.
Par contre je n'arrive pas à me connecter avec les données suivantes :
- Serveur SQL : 192.168.x.x - Port : 1455 - Alias ODBC déjà déclaré sur le poste client : AAAA - Login : LLLL - Mot de passe : MMMM - Table : Uti - Champs : uti_id, uti_login,uti_mdp
Pourrais tu me donner un exemple avec mes données, ça serait super sympa de ta part.
Merci d'avance pour ton aide et pour ta patience
Amicalement.
BM
AutoIt Français
GaRydelaMer
Modérateur
Inscription: Mer 18 Mar 2009 22:12 Messages: 220 Age: 39
Localisation: Montpellier
Sujet du message: Re: [Tuto] Base de données avec ADO, ADOX, DataLinks.
Utilisateurs parcourant ce forum: Baidu [Spider] et 1 invité
Vous ne pouvez pas poster de nouveaux sujets Vous ne pouvez pas répondre aux sujets Vous ne pouvez pas éditer vos messages Vous ne pouvez pas supprimer vos messages Vous ne pouvez pas joindre des fichiers