SlideShare une entreprise Scribd logo
Cours C++ (2002)
semaine 3
jour 2
Cours semaine 3 jour 2 Cours C++ 2
Plan du jour
 Accès aux bases de données sur plate-
formes Microsoft
Cours semaine 3 jour 2 Cours C++ 3
Base de données relationnelles
 Les base de données relationnelles utilisent
la théorie des ensembles
 Un langage de requête standardisé existe :
SQL, Structured Query Language
 La standardisation a ses limites
 Il existe de nombreuses extensions par de
nombreux éditeurs de systèmes de gestion de
bases de données relationnelles, SGBD/R
Cours semaine 3 jour 2 Cours C++ 4
Base de données relationnelles (2)
 Les bases de données permettent de stocker
facilement une grande quantité
d’informations
 Elles sont incontournables dans le monde de
l’entreprise
 Elles ne sont pas efficaces pour tous les
types d’information
 Nous le verrons dans les prochains cours
Cours semaine 3 jour 2 Cours C++ 5
Accès aux bases de données
 Dans le monde Microsoft
 DAO : Data Access Object
 ODBC : Open DataBase Connectivity
 OLE DB : Object Linking and Embedding
 ADO : ActiveX Data Object
 Ces standards permettent de faire la
connection à la base, pas de retrouver des
informations : SQL reste nécessaire
Cours semaine 3 jour 2 Cours C++ 6
ODBC
 ODBC est un médiateur
 Il fournit une interface unique pour l’accès
aux bases de données SQL
 Un driver ODBC implémente les
spécificités d’accès aux différentes bases : il
s’agit d’une extension au système
compatible avec la norme ODBC et une
base de données particulière
Cours semaine 3 jour 2 Cours C++ 7
ODBC (2)
Base de
données
relationnelle
driver
ODBC
système
d’exploitation
Windows
interface
ODBC
Gestion de l’accès et
de la récupération
des données
Cours semaine 3 jour 2 Cours C++ 8
ODBC (3)
 Il y a plusieurs modèles ODBC
 On parle de tiers
 Cela correspond à un nombre différent de
couches dans lesquelles il faut passer avant
d’accèder véritablement à la base de données
 Le schéma précédent correspond au modèle 1
tier (sur une machine)
Cours semaine 3 jour 2 Cours C++ 9
ProgrammeProgramme appelant une
fonction ODBC
ODBC Manager
L’ODBC Manager qui
définit ce qu’il faut faire
ODBC Driver
L’ODBC Driver qui
effectue le traitement
Fichier
BDD
Le fichier de base de
données est ouvert par le
driver et les données sont
manipulées
ODBC (4) : 1 tier
Cours semaine 3 jour 2 Cours C++ 10
Programme appelant une
fonction ODBC
L’ODBC Manager qui
définit ce qu’il faut faire
L’ODBC Driver envoie le
traitement au serveur
Le serveur de base de
données traite la requête
Programme
ODBC Manager
ODBC Driver
Client
Fichier
BDD
Serveur
BDD
Serveur
ODBC (5) : 2 tiers
Cours semaine 3 jour 2 Cours C++ 11
ProgrammeProgramme appelant une
fonction ODBC
ODBC ManagerL’ODBC Manager qui définit ce
qu’il faut faire
ODBC DriverL’ODBC Driver envoie le
traitement au Gateway
Client
Serveur
Gateway
Fichier
BDD
Le serveur de base de données
traite la requête
Serveur
BDD
ODBC Manager/DriverLe Gateway ODBC Manager /
Driver envoie la requête au serveur
ODBC (6) : 3 tiers
Cours semaine 3 jour 2 Cours C++ 12
ODBC (7)
 DSN : Data Source Name
 Un DSN est constitué :
 Des informations sur la base de données,
 De l’identifiant utilisateur (user ID),
 Du mot de passe utilisateur,
 Des informations de connections.
Cours semaine 3 jour 2 Cours C++ 13
ODBC (8)
 Il existe deux types de DSN
 Les DSN ou user DSN
 Ils sont accessible par l’utilisateur qui les a créés
 Les System DSN
 Ils sont accessibles par n’importe quel utilisateur et
par le système lui-même
Cours semaine 3 jour 2 Cours C++ 14
ODBC (9)
 Les informations ODBC sont accessibles
par Start > Settings > Control Panel > Data Sources
Cours semaine 3 jour 2 Cours C++ 15
ODBC Data Source
 Une source de données est un système de
stockage des données
 Normalement un base de données, relationnelle
ou pseudo relationnelle
 Autre chose (…) : un fichier Excel peut être
considéré comme une base de données
relationnelle
 Par extension d’Excel, un fichier texte peut
également être accéder (Comma Separated
Values, CSV)
Cours semaine 3 jour 2 Cours C++ 16
ODBC Data Source (2)
Cours semaine 3 jour 2 Cours C++ 17
ODBC Driver
 Une Data Source possède obligatoirement
un pilote pour être exploitée
 Le pilote respecte deux choses différentes :
 Les spécifications ODBC pour pouvoir être
exploité sur la plate-forme Windows
 Les procédures, méthodes et appels de fonction
propres à la base de données à laquelle il
permet d’accéder
Cours semaine 3 jour 2 Cours C++ 18
ODBC Driver (2)
 Note : plusieurs versions d’une même base
peuvent posséder des drivers ODBC
différents
 Lorsqu’une base de données évolue et qu’elle
fournit de nouvelles fonctionnalités, certaines
fonctionnalités anciennes peuvent être
modifiées ou supprimées
 Les drivers doivent être mis à jour sur les
postes clients déportés lors d’une mise à jour
Cours semaine 3 jour 2 Cours C++ 19
ODBC Driver (3)
Cours semaine 3 jour 2 Cours C++ 20
ODBC Connection Pooling
 Il se peut que plusieurs accès à une même
base de données soient réalisés en même
temps : besoin d’un connection pooling
 Une certain nombre de connexions à la base de
données sont effectués au démarrage du
système
 Les connexions, restées actives, sont distribuées
aux différents demandeurs en fonction des
besoins
 Le connection pooling est un gain de temps
Cours semaine 3 jour 2 Cours C++ 21
ODBC Connection Pooling (2)
BDD
driver
pool
BDD
driver
pool
application
BDD
driver
pool
Initialisation
du driver
Utilisation
du driver dans
une application
Fin de l’utilisation
du driver
Cours semaine 3 jour 2 Cours C++ 22
ODBC Connection Pooling (3)
Cours semaine 3 jour 2 Cours C++ 23
Visual C++ et ODBC
 Deux classes permettent d’accèder à une
base de données via ODBC
 CDatabase
 Informations sur la connexion à une base
 Partageable dans toute l’application (singleton)
 CRecordset
 Informations sur un ensemble d’enregistrements
 Gère les ajouts, les modifications et les suppressions
 Les changements sont reflétés dans la base de
données
Cours semaine 3 jour 2 Cours C++ 24
CDatabase
 Pas de nécessité de créer d’instance de cette
classe
 La création est effectuée à l’appel du
premier CRecordset
 L’instance est réutilisée ensuite si nécessaire
de manière transparente
Cours semaine 3 jour 2 Cours C++ 25
Ouverture de CRecordset
 Fonction membre Open
 Premier argument : type de l’ensemble
d’enregistrements (Valeur par défaut :
AFX_DB_USE_DEFAULT_TYPE = snapshot)
 Deuxième argument : instruction SQL à
exécuter pour créer le record set (si NULL,
instruction SQL du Wizard par défaut)
 Troisième argument : manipulation du record
set, par défaut none
Cours semaine 3 jour 2 Cours C++ 26
CRecordset::Open, argument 1
 CRecordset::dynaset : les enregistrements peuvent
être mis à jour pendant l’utilisation par appel de la
fonction Fetch
 CRecordset::snapshot : les enregistrements seront
mis à jour à la fermeture du record set
 CRecordset::dynamic : similaire à dynaset mais
n’est pas disponible dans tous les drivers
 CRecordset::forwardOnly : lecture du premier au
dernier enregistrement uniquement
Cours semaine 3 jour 2 Cours C++ 27
CRecordset::Open, argument 3
 Quelques-unes des options :
 CRecordset::none : valeur par défaut,
aucune option n’affecte l’utilisation
 CRecordset::appendOnly : lecture possible,
modification/suppression d’enregistrements
existants impossible, ajout de nouveaux
enregistrements en fin de fichier possible
 CRecordset::readOnly : lecture seule
Cours semaine 3 jour 2 Cours C++ 28
CRecordset, navigation
 Plusieurs fonctions de navigation sont
disponibles :
 MoveFirst : déplacement sur le premier record
 MoveLast : déplacement sur le dernier record
 MoveNext : déplacement sur le record suivant
 MovePrev : déplacement sur le record précédent
 SetAbsolutePosition : déplacement sur le record
dont la position est donnée
Cours semaine 3 jour 2 Cours C++ 29
CRecordset, navigation (2)
 Autre fonction : Move
 Premier argument : nombre de records
parcourus pendant le déplacement, positif
(déplacement vers la fin du record set) ou
négatif (déplacement vers le début)
 Deuxième argument : option de déplacement
 SQL_FETCH_RELATIVE : tient compte du
premier argument
 SQL_FETCH_NEXT : équivalent à MoveNext
Cours semaine 3 jour 2 Cours C++ 30
CRecordset, navigation (3)
 Autre fonction : Move (suite)
 Deuxième argument : option de déplacement
 SQL_FETCH_PRIOR : équivalent à MovePrev
 SQL_FETCH_FIRST : équivalent à MoveFirst
 SQL_FETCH_LAST : équivalent à MoveLast
 SQL_FETCH_ABSOLUTE : équivalent à
SetAbsolutePosition
Cours semaine 3 jour 2 Cours C++ 31
CRecordset, navigation (4)
 Aides à la navigation
 Fonction IsBOF : retourne le booléen TRUE si
le pointeur courant est sur le premier record
 Fonction IsEOF : retourne TRUE si le pointeur
est en fin de record set
 Fonction GetRecordCount : donne le nombre
total d’enregistrement dans le record set
Cours semaine 3 jour 2 Cours C++ 32
Opérations sur les records
 Dans une base de données, quatre types
d’opérations peuvent être effectuées :
principe du CRUD
 Create, création d’un enregistrement
 Read, lecture
 Update, mise à jour
 Delete, destruction
 Nous venons de voir les manières de faire la
navigation, c’est à dire le Read
Cours semaine 3 jour 2 Cours C++ 33
Opérations sur les records (2)
 Création de records
 Fonction AddNew : création d’un nouveau
record ; pas d’argument mais doit être suivi de
l’affectation des valeurs du nouveau record et
de Update
 Mise à jour d’un record
 Fonction Edit : permet de modifier les champs
du record courant ; doit être suivi de la fonction
Update
Cours semaine 3 jour 2 Cours C++ 34
Opérations sur les records (3)
 Destruction d’un record
 Fonction Delete : supprime l’enregistrement
courant ; pas besoin d’appeler Update
(implicite) mais besoin de se déplacer sur un
autre enregistrement (appel de MovePrev ou
MoveNext par exemple)
 Remarque : pas d’affectation nouvelle ou de
modification et donc pas besoin d’Update
Cours semaine 3 jour 2 Cours C++ 35
Opérations sur les records (4)
 Fonctions auxiliaires
 Update : enregistrement des modifications
courantes dans la base de données
 Requery : réexécution de la requête SQL
originale pour remettre à jour le record set
courant
 À utiliser par exemple après AddNew
 À utiliser « régulièrement » si plusieurs utilisateurs
travaillent sur la même base de données
Cours semaine 3 jour 2 Cours C++ 36
Exemple avec ODBC
 Création d’une base de données Access
avec le Wizard, sélection du modèle « base
de contacts » : base « ptcontact »
 Obtention d’une base de données possèdant
des tables, des rapports et … des écrans de
saisie (forms)
 Mise en place de la base de données parmi
les sources ODBC du système
Cours semaine 3 jour 2 Cours C++ 37
Exemple avec ODBC (2)
Cours semaine 3 jour 2 Cours C++ 38
Exemple avec ODBC (3)
Cours semaine 3 jour 2 Cours C++ 39
Exemple avec ODBC (4)
 Refaire la même grille de saisie en C++
 Cependant :
 Pas de « calls » ni de « dial »
Cours semaine 3 jour 2 Cours C++ 40
Exemple avec ODBC (5)
 Dans VCPP, créer une application
MFC(exe)
PTContact
Cours semaine 3 jour 2 Cours C++ 41
Exemple avec ODBC (6)
Cours semaine 3 jour 2 Cours C++ 42
Exemple avec ODBC (7)
*
Cours semaine 3 jour 2 Cours C++ 43
Exemple avec ODBC (8)
Cours semaine 3 jour 2 Cours C++ 44
Exemple avec ODBC (9)
Cours semaine 3 jour 2 Cours C++ 45
Exemple avec ODBC (10)
Cours semaine 3 jour 2 Cours C++ 46
Exemple avec ODBC (11)
Cours semaine 3 jour 2 Cours C++ 47
Exemple avec ODBC (12)
Cours semaine 3 jour 2 Cours C++ 48
Exemple avec ODBC (13)
Cours semaine 3 jour 2 Cours C++ 49
Exemple avec ODBC (14)
Cours semaine 3 jour 2 Cours C++ 50
Exemple avec ODBC (15)
Cours semaine 3 jour 2 Cours C++ 51
Exemple avec ODBC (16)
Cours semaine 3 jour 2 Cours C++ 52
Exemple avec ODBC (17)
Cours semaine 3 jour 2 Cours C++ 53
IDC_ECTRY
IDC_ESTAT
IDC_ECITY
IDC_EZIP
IDC_EADDR
IDC_EDEAR
IDC_EFIRM
IDC_ELNAME
IDC_EFNAME
IDC_ECNAME
IDC_ECTYPE
IDC_EENAME
IDC_EREFER
IDC_EID
IDC_ETITL
IDC_EWPHONE
IDC_EWEXT
IDC_EMPHONE
IDC_EFAX
IDC_ENOTES
Cours semaine 3 jour 2 Cours C++ 54
Cours semaine 3 jour 2 Cours C++ 55
Cours semaine 3 jour 2 Cours C++ 56
Cours semaine 3 jour 2 Cours C++ 57
Cours semaine 3 jour 2 Cours C++ 58
Exemple avec ODBC (23)
Cours semaine 3 jour 2 Cours C++ 59
Exemple avec ODBC (24)
Cours semaine 3 jour 2 Cours C++ 60
Exemple avec ODBC (25)
IDC_EFNAME = m_pSet->m_FirstName
IDC_ELNAME = m_pSet->m_LastName
IDC_EFIRM = m_pSet->m_CompanyName
IDC_EDEAR = m_pSet->m_Dear
IDC_EADDR = m_pSet->m_Address
IDC_EZIP = m_pSet->m_PostalCode
IDC_ECITY = m_pSet->m_City
IDC_ESTAT = m_pSet->m_StateOrProvince
Cours semaine 3 jour 2 Cours C++ 61
Exemple avec ODBC (26)
IDC_ECTRY = m_pSet->m_Country
IDC_ECNAME = RIEN
IDC_ECTYPE = m_pSet->m_ContactTypeID
IDC_EENAME = m_pSet->m_EmailName
IDC_EREFER = m_pSet->m_ReferredBy
IDC_ENOTES = m_pSet->m_Notes
IDC_EID = m_pSet->m_ContactID
IDC_ETITL = m_pSet->m_Title
Cours semaine 3 jour 2 Cours C++ 62
Exemple avec ODBC (27)
IDC_EWPHONE = m_pSet->m_WorkPhone
IDC_EWEXT = m_pSet->m_WorkExtension
IDC_EMPHONE = m_pSet->m_MobilePhone
IDC_EFAX = m_pSet->m_FaxNumber
Cours semaine 3 jour 2 Cours C++ 63
Cours semaine 3 jour 2 Cours C++ 64
Exemple avec ODBC (29)
 M_LastMeetingDate est absent de notre
liste… Le code généré automatiquement ne
doit jamais être modifié mais
 Le type CTime ne peut pas être pris en compte
 CTime ne supporte pas les dates antérieures au
31 décembre 1969
 Il faudrait le modifier en type COleDateTime
Cours semaine 3 jour 2 Cours C++ 65
Exemple avec ODBC (30)
 Compilation et exécution de ptcontact.exe
 L’application fonctionne mais rien n’est affiché
 Normal : la base a été créée mais aucun
enregistrement n’a été ajouté !
 Retournez sous Access et ajouter des
enregistrements
 Réexécutez : les informations apparaissent
Cours semaine 3 jour 2 Cours C++ 66
Exemple avec ODBC (31)
 Nous disposons d’une application accèdant
à une base de données qui est fonctionnelle
 Nous pouvons parcourir les enregistrements
existants et faire des update
 Nous ne pouvons pas encore ajouter de
nouveaux enregistrements
 Nous ne pouvons pas encore supprimer des
enregistrements existants
Cours semaine 3 jour 2 Cours C++ 67
Exemple avec ODBC (32)
 Pour l’ajout d’enregistrement :
 Besoin d’une fonction qui retrouve le nombre
max de records existants (dans la classe de
gestion du Set)
 Besoin d’une fonction qui fait la mise à jour
après saisie dans le formulaire (dans la classe
de gestion de la View)
Cours semaine 3 jour 2 Cours C++ 68
Cours semaine 3 jour 2 Cours C++ 69
m_ContactID;
Cours semaine 3 jour 2 Cours C++ 70
Cours semaine 3 jour 2 Cours C++ 71
Cours semaine 3 jour 2 Cours C++ 72
Exemple avec ODBC (37)
Cours semaine 3 jour 2 Cours C++ 73
Cours semaine 3 jour 2 Cours C++ 74
Exemple avec ODBC (39)
 Suppression de l’enregistrement
Cours semaine 3 jour 2 Cours C++ 75
Cours semaine 3 jour 2 Cours C++ 76
Cours semaine 3 jour 2 Cours C++ 77
Cours semaine 3 jour 2 Cours C++ 78
Exemple avec ODBC (43)
 Raccourci dans la barre d’outils
 Simplifie l’interaction avec l’utilisateur qui n’a
plus besoin de parcourir les menus
 Utilise les mêmes événements que ceux utiliser
dans les menus : inutile de réassocier les
fonctions…
Cours semaine 3 jour 2 Cours C++ 79
Cours semaine 3 jour 2 Cours C++ 80
Cours semaine 3 jour 2 Cours C++ 81
Cours semaine 3 jour 2 Cours C++ 82
Problèmes, problèmes
 L’exemple précédent fonctionne sur un
même poste
 Théoriquement : une base de données et un
utilisateur = pas de problème
 Que se passerait-il si la base était accédée
par plusieurs utilisateurs ?
 La base deviendrait instable à un moment ou un
autre : aucune notion de transaction n’est
intégrée
Cours semaine 3 jour 2 Cours C++ 83
Problèmes, problèmes (2)
 Généralisation du problème précédent =
problème encore plus grave
 Nous n’accèdons qu’à une base de données.
Une entreprise en possède généralement
plusieurs, chacune représentant un ensemble
cohérent
 Travailler avec plusieurs bases nécessite de
travailler avec des transactions supportant le
« two phase commit », 2PC : pas disponible ici
Cours semaine 3 jour 2 Cours C++ 84
Two phase commit
BDD 1
BDD n
BDD 2
transaction
distribuée
commit
global
commit
local
commit
local
commit
local
OK
OK
OK
Cours semaine 3 jour 2 Cours C++ 85
Autre méthode d’accès
 Nous venons de réaliser un programme avec
MFC avec un accès ODBC
 Peu de travail à faire
 Génération automatique de la majorité du code
 À modifier soi-même le moins possible car c’est une
prise de risque
 Modification parfois nécessaire comme pour le type
CTime
 Utilisation rapide de la plateforme
Cours semaine 3 jour 2 Cours C++ 86
ADO
 Comme déjà brièvement mentionné, il est
possible d’utiliser ActiveX pour accéder aux
bases de données : ADO, ActiveX Data
Object
 ADO est une technologie assez récente qui
est désormais mise en avant avec ADO.NET
dans la nouvelle plate-forme .Net
Cours semaine 3 jour 2 Cours C++ 87
ADO (2)
 OLE DB est un ensemble complexe
permettant d’accèder à un ensemble varié
de répertoires de données
 Il ne s’agit plus uniquement de bases de
données relationnelles
 Il est aussi possible d’accéder à des bases de
données hiérarchiques ou plates
 Du fait de l’étendue des types de sources de
données, OLE DB est très complexe !
Cours semaine 3 jour 2 Cours C++ 88
ADO (3)
 ADO est une couche logicielle qui vient se greffer
au dessus d’OLE DB pour simplifier le
développement
 ADO contient un nombre minimum d’objets
 Connection
 Error
 Command
 Parameter
 Recordset
 Field
Cours semaine 3 jour 2 Cours C++ 89
ADO (4)
 ADO fournit également des objets de
collection permettant de traiter des
ensemble d’Error, de Parameter et de Field
 Connection permet d’établir et de maintenir
des connexions à une base de données.
Connection permet également de réaliser
des contrôles de haut niveau sur les
connexions, dont les transactions
(BeginTrans, CommitTrans, RollbackTrans)
Cours semaine 3 jour 2 Cours C++ 90
ADO (5)
 Error permet de retrouver les informations
sur les erreurs, qu’il est possible d’examiner
 Command permet d’exécuter une
commande sur une source de données
(typiquement du SQL pour les bases de
données relationnellles) ; le résultat est le
plus souvent du type RecordSet
 Parameter permet de passer des paramètres
associés à une Command
Cours semaine 3 jour 2 Cours C++ 91
ADO (6)
 RecordSet contient un ensemble
d’enregistrement en provenance de la base
de données. Il est possible de naviguer dans
le RecordSet et d’accèder aux champs des
enregistrement avec Field
 Field représente une seule colonne dans un
enregistrement du RecordSet
 Type par défaut : Variant
Cours semaine 3 jour 2 Cours C++ 92
ADO (7)
 Exemple d’application utilisant ADO
 QueryTool
 Téléchargeable sur www.mindcracker.com
 Disponible sous format exécutable
 Source C++ disponible sous la forme d’un projet
Visual C++ 6.0 SP3
 Décompressez le Zip, compilez et faites tournez
en accèdant à la base PTContact
Cours semaine 3 jour 2 Cours C++ 93
ADO (8)
Cours semaine 3 jour 2 Cours C++ 94
ADO (9)
Cours semaine 3 jour 2 Cours C++ 95
ADO (10)
Cours semaine 3 jour 2 Cours C++ 96
ADO (11)
 Dans le QueryTool, où se trouve le code
ActiveX ?
 ADOConnectionEvents.h
 msflexgrid.h
 Helpers.cpp
 ADO est finalement bien caché
 Pour le voir de manière plus explicite, nous
allons créer une autre application
Cours semaine 3 jour 2 Cours C++ 97
ADO (12)
 Créer une application MFC AppWizard
(EXE) en prenant tous les paramètres par
défaut sauf
 SDI plutôt que MDI (écran 1)
 CFormView plutôt que CView (écran 6)
 Remarques :
 Par défaut, il n’y a pas de database support…
 Par défaut, l’application supporte ActiveX
Cours semaine 3 jour 2 Cours C++ 98
Cours semaine 3 jour 2 Cours C++ 99
ADO (14)
Cours semaine 3 jour 2 Cours C++ 100
ADO (15)
Cours semaine 3 jour 2 Cours C++ 101
Cours semaine 3 jour 2 Cours C++ 102
Questions / Remarques

Contenu connexe

Tendances

Commandes usuelle linux
Commandes usuelle   linuxCommandes usuelle   linux
Commandes usuelle linux
Fabrice Sonzahi
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
Amal Abid
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6
Amal Abid
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
Amal Abid
 
10 03 clients ldap
10 03 clients ldap10 03 clients ldap
10 03 clients ldap
Noël
 
BigData_TP5 : Neo4J
BigData_TP5 : Neo4JBigData_TP5 : Neo4J
BigData_TP5 : Neo4J
Lilia Sfaxi
 

Tendances (6)

Commandes usuelle linux
Commandes usuelle   linuxCommandes usuelle   linux
Commandes usuelle linux
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
10 03 clients ldap
10 03 clients ldap10 03 clients ldap
10 03 clients ldap
 
BigData_TP5 : Neo4J
BigData_TP5 : Neo4JBigData_TP5 : Neo4J
BigData_TP5 : Neo4J
 

Similaire à Cours de C++, en français, 2002 - Cours 3.2

11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net
Hamza SAID
 
PHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiquesPHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiques
oumaimanouari
 
Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4
Laurent BUNIET
 
Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zineb
Zineb ELGARRAI
 
Ado.net database access
Ado.net database accessAdo.net database access
Ado.net database access
MarweN Boughattas
 
.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous
Microsoft
 
code4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABEScode4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABES
ABES
 
Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1
Laurent BUNIET
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
Zineb ELGARRAI
 
Applications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLiteApplications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLite
Ahmed-Chawki Chaouche
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Atsé François-Xavier KOBON
 
3-android.pdf
3-android.pdf3-android.pdf
3-android.pdf
FethiBenYahia1
 
Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3
Laurent BUNIET
 
Framework php « Codeignitor »
Framework php « Codeignitor » Framework php « Codeignitor »
Framework php « Codeignitor »
ODC Orange Developer Center
 
cours-android.pdf
cours-android.pdfcours-android.pdf
cours-android.pdf
med_univ78
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipse
ISIG
 
Alphorm.com Formation Informatica PowerCenter : Installer et Configurer
Alphorm.com Formation Informatica PowerCenter : Installer et ConfigurerAlphorm.com Formation Informatica PowerCenter : Installer et Configurer
Alphorm.com Formation Informatica PowerCenter : Installer et Configurer
Alphorm
 
Présentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptxPrésentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptx
salmachtioui1
 
Dotnet csharp
Dotnet csharpDotnet csharp
Dotnet csharp
SDFG5
 

Similaire à Cours de C++, en français, 2002 - Cours 3.2 (20)

11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net
 
PHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiquesPHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiques
 
Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4
 
Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zineb
 
Ado.net database access
Ado.net database accessAdo.net database access
Ado.net database access
 
.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous
 
code4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABEScode4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABES
 
Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
 
Applications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLiteApplications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLite
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
3-android.pdf
3-android.pdf3-android.pdf
3-android.pdf
 
Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3
 
Framework php « Codeignitor »
Framework php « Codeignitor » Framework php « Codeignitor »
Framework php « Codeignitor »
 
cours-android.pdf
cours-android.pdfcours-android.pdf
cours-android.pdf
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipse
 
Springioc
SpringiocSpringioc
Springioc
 
Alphorm.com Formation Informatica PowerCenter : Installer et Configurer
Alphorm.com Formation Informatica PowerCenter : Installer et ConfigurerAlphorm.com Formation Informatica PowerCenter : Installer et Configurer
Alphorm.com Formation Informatica PowerCenter : Installer et Configurer
 
Présentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptxPrésentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptx
 
Dotnet csharp
Dotnet csharpDotnet csharp
Dotnet csharp
 

Plus de Laurent BUNIET

Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1
Laurent BUNIET
 
Cours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - PlanCours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - Plan
Laurent BUNIET
 

Plus de Laurent BUNIET (12)

Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5
 
Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5
 
Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4
 
Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3
 
Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5
 
Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1
 
Cours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - PlanCours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - Plan
 

Cours de C++, en français, 2002 - Cours 3.2

  • 2. Cours semaine 3 jour 2 Cours C++ 2 Plan du jour  Accès aux bases de données sur plate- formes Microsoft
  • 3. Cours semaine 3 jour 2 Cours C++ 3 Base de données relationnelles  Les base de données relationnelles utilisent la théorie des ensembles  Un langage de requête standardisé existe : SQL, Structured Query Language  La standardisation a ses limites  Il existe de nombreuses extensions par de nombreux éditeurs de systèmes de gestion de bases de données relationnelles, SGBD/R
  • 4. Cours semaine 3 jour 2 Cours C++ 4 Base de données relationnelles (2)  Les bases de données permettent de stocker facilement une grande quantité d’informations  Elles sont incontournables dans le monde de l’entreprise  Elles ne sont pas efficaces pour tous les types d’information  Nous le verrons dans les prochains cours
  • 5. Cours semaine 3 jour 2 Cours C++ 5 Accès aux bases de données  Dans le monde Microsoft  DAO : Data Access Object  ODBC : Open DataBase Connectivity  OLE DB : Object Linking and Embedding  ADO : ActiveX Data Object  Ces standards permettent de faire la connection à la base, pas de retrouver des informations : SQL reste nécessaire
  • 6. Cours semaine 3 jour 2 Cours C++ 6 ODBC  ODBC est un médiateur  Il fournit une interface unique pour l’accès aux bases de données SQL  Un driver ODBC implémente les spécificités d’accès aux différentes bases : il s’agit d’une extension au système compatible avec la norme ODBC et une base de données particulière
  • 7. Cours semaine 3 jour 2 Cours C++ 7 ODBC (2) Base de données relationnelle driver ODBC système d’exploitation Windows interface ODBC Gestion de l’accès et de la récupération des données
  • 8. Cours semaine 3 jour 2 Cours C++ 8 ODBC (3)  Il y a plusieurs modèles ODBC  On parle de tiers  Cela correspond à un nombre différent de couches dans lesquelles il faut passer avant d’accèder véritablement à la base de données  Le schéma précédent correspond au modèle 1 tier (sur une machine)
  • 9. Cours semaine 3 jour 2 Cours C++ 9 ProgrammeProgramme appelant une fonction ODBC ODBC Manager L’ODBC Manager qui définit ce qu’il faut faire ODBC Driver L’ODBC Driver qui effectue le traitement Fichier BDD Le fichier de base de données est ouvert par le driver et les données sont manipulées ODBC (4) : 1 tier
  • 10. Cours semaine 3 jour 2 Cours C++ 10 Programme appelant une fonction ODBC L’ODBC Manager qui définit ce qu’il faut faire L’ODBC Driver envoie le traitement au serveur Le serveur de base de données traite la requête Programme ODBC Manager ODBC Driver Client Fichier BDD Serveur BDD Serveur ODBC (5) : 2 tiers
  • 11. Cours semaine 3 jour 2 Cours C++ 11 ProgrammeProgramme appelant une fonction ODBC ODBC ManagerL’ODBC Manager qui définit ce qu’il faut faire ODBC DriverL’ODBC Driver envoie le traitement au Gateway Client Serveur Gateway Fichier BDD Le serveur de base de données traite la requête Serveur BDD ODBC Manager/DriverLe Gateway ODBC Manager / Driver envoie la requête au serveur ODBC (6) : 3 tiers
  • 12. Cours semaine 3 jour 2 Cours C++ 12 ODBC (7)  DSN : Data Source Name  Un DSN est constitué :  Des informations sur la base de données,  De l’identifiant utilisateur (user ID),  Du mot de passe utilisateur,  Des informations de connections.
  • 13. Cours semaine 3 jour 2 Cours C++ 13 ODBC (8)  Il existe deux types de DSN  Les DSN ou user DSN  Ils sont accessible par l’utilisateur qui les a créés  Les System DSN  Ils sont accessibles par n’importe quel utilisateur et par le système lui-même
  • 14. Cours semaine 3 jour 2 Cours C++ 14 ODBC (9)  Les informations ODBC sont accessibles par Start > Settings > Control Panel > Data Sources
  • 15. Cours semaine 3 jour 2 Cours C++ 15 ODBC Data Source  Une source de données est un système de stockage des données  Normalement un base de données, relationnelle ou pseudo relationnelle  Autre chose (…) : un fichier Excel peut être considéré comme une base de données relationnelle  Par extension d’Excel, un fichier texte peut également être accéder (Comma Separated Values, CSV)
  • 16. Cours semaine 3 jour 2 Cours C++ 16 ODBC Data Source (2)
  • 17. Cours semaine 3 jour 2 Cours C++ 17 ODBC Driver  Une Data Source possède obligatoirement un pilote pour être exploitée  Le pilote respecte deux choses différentes :  Les spécifications ODBC pour pouvoir être exploité sur la plate-forme Windows  Les procédures, méthodes et appels de fonction propres à la base de données à laquelle il permet d’accéder
  • 18. Cours semaine 3 jour 2 Cours C++ 18 ODBC Driver (2)  Note : plusieurs versions d’une même base peuvent posséder des drivers ODBC différents  Lorsqu’une base de données évolue et qu’elle fournit de nouvelles fonctionnalités, certaines fonctionnalités anciennes peuvent être modifiées ou supprimées  Les drivers doivent être mis à jour sur les postes clients déportés lors d’une mise à jour
  • 19. Cours semaine 3 jour 2 Cours C++ 19 ODBC Driver (3)
  • 20. Cours semaine 3 jour 2 Cours C++ 20 ODBC Connection Pooling  Il se peut que plusieurs accès à une même base de données soient réalisés en même temps : besoin d’un connection pooling  Une certain nombre de connexions à la base de données sont effectués au démarrage du système  Les connexions, restées actives, sont distribuées aux différents demandeurs en fonction des besoins  Le connection pooling est un gain de temps
  • 21. Cours semaine 3 jour 2 Cours C++ 21 ODBC Connection Pooling (2) BDD driver pool BDD driver pool application BDD driver pool Initialisation du driver Utilisation du driver dans une application Fin de l’utilisation du driver
  • 22. Cours semaine 3 jour 2 Cours C++ 22 ODBC Connection Pooling (3)
  • 23. Cours semaine 3 jour 2 Cours C++ 23 Visual C++ et ODBC  Deux classes permettent d’accèder à une base de données via ODBC  CDatabase  Informations sur la connexion à une base  Partageable dans toute l’application (singleton)  CRecordset  Informations sur un ensemble d’enregistrements  Gère les ajouts, les modifications et les suppressions  Les changements sont reflétés dans la base de données
  • 24. Cours semaine 3 jour 2 Cours C++ 24 CDatabase  Pas de nécessité de créer d’instance de cette classe  La création est effectuée à l’appel du premier CRecordset  L’instance est réutilisée ensuite si nécessaire de manière transparente
  • 25. Cours semaine 3 jour 2 Cours C++ 25 Ouverture de CRecordset  Fonction membre Open  Premier argument : type de l’ensemble d’enregistrements (Valeur par défaut : AFX_DB_USE_DEFAULT_TYPE = snapshot)  Deuxième argument : instruction SQL à exécuter pour créer le record set (si NULL, instruction SQL du Wizard par défaut)  Troisième argument : manipulation du record set, par défaut none
  • 26. Cours semaine 3 jour 2 Cours C++ 26 CRecordset::Open, argument 1  CRecordset::dynaset : les enregistrements peuvent être mis à jour pendant l’utilisation par appel de la fonction Fetch  CRecordset::snapshot : les enregistrements seront mis à jour à la fermeture du record set  CRecordset::dynamic : similaire à dynaset mais n’est pas disponible dans tous les drivers  CRecordset::forwardOnly : lecture du premier au dernier enregistrement uniquement
  • 27. Cours semaine 3 jour 2 Cours C++ 27 CRecordset::Open, argument 3  Quelques-unes des options :  CRecordset::none : valeur par défaut, aucune option n’affecte l’utilisation  CRecordset::appendOnly : lecture possible, modification/suppression d’enregistrements existants impossible, ajout de nouveaux enregistrements en fin de fichier possible  CRecordset::readOnly : lecture seule
  • 28. Cours semaine 3 jour 2 Cours C++ 28 CRecordset, navigation  Plusieurs fonctions de navigation sont disponibles :  MoveFirst : déplacement sur le premier record  MoveLast : déplacement sur le dernier record  MoveNext : déplacement sur le record suivant  MovePrev : déplacement sur le record précédent  SetAbsolutePosition : déplacement sur le record dont la position est donnée
  • 29. Cours semaine 3 jour 2 Cours C++ 29 CRecordset, navigation (2)  Autre fonction : Move  Premier argument : nombre de records parcourus pendant le déplacement, positif (déplacement vers la fin du record set) ou négatif (déplacement vers le début)  Deuxième argument : option de déplacement  SQL_FETCH_RELATIVE : tient compte du premier argument  SQL_FETCH_NEXT : équivalent à MoveNext
  • 30. Cours semaine 3 jour 2 Cours C++ 30 CRecordset, navigation (3)  Autre fonction : Move (suite)  Deuxième argument : option de déplacement  SQL_FETCH_PRIOR : équivalent à MovePrev  SQL_FETCH_FIRST : équivalent à MoveFirst  SQL_FETCH_LAST : équivalent à MoveLast  SQL_FETCH_ABSOLUTE : équivalent à SetAbsolutePosition
  • 31. Cours semaine 3 jour 2 Cours C++ 31 CRecordset, navigation (4)  Aides à la navigation  Fonction IsBOF : retourne le booléen TRUE si le pointeur courant est sur le premier record  Fonction IsEOF : retourne TRUE si le pointeur est en fin de record set  Fonction GetRecordCount : donne le nombre total d’enregistrement dans le record set
  • 32. Cours semaine 3 jour 2 Cours C++ 32 Opérations sur les records  Dans une base de données, quatre types d’opérations peuvent être effectuées : principe du CRUD  Create, création d’un enregistrement  Read, lecture  Update, mise à jour  Delete, destruction  Nous venons de voir les manières de faire la navigation, c’est à dire le Read
  • 33. Cours semaine 3 jour 2 Cours C++ 33 Opérations sur les records (2)  Création de records  Fonction AddNew : création d’un nouveau record ; pas d’argument mais doit être suivi de l’affectation des valeurs du nouveau record et de Update  Mise à jour d’un record  Fonction Edit : permet de modifier les champs du record courant ; doit être suivi de la fonction Update
  • 34. Cours semaine 3 jour 2 Cours C++ 34 Opérations sur les records (3)  Destruction d’un record  Fonction Delete : supprime l’enregistrement courant ; pas besoin d’appeler Update (implicite) mais besoin de se déplacer sur un autre enregistrement (appel de MovePrev ou MoveNext par exemple)  Remarque : pas d’affectation nouvelle ou de modification et donc pas besoin d’Update
  • 35. Cours semaine 3 jour 2 Cours C++ 35 Opérations sur les records (4)  Fonctions auxiliaires  Update : enregistrement des modifications courantes dans la base de données  Requery : réexécution de la requête SQL originale pour remettre à jour le record set courant  À utiliser par exemple après AddNew  À utiliser « régulièrement » si plusieurs utilisateurs travaillent sur la même base de données
  • 36. Cours semaine 3 jour 2 Cours C++ 36 Exemple avec ODBC  Création d’une base de données Access avec le Wizard, sélection du modèle « base de contacts » : base « ptcontact »  Obtention d’une base de données possèdant des tables, des rapports et … des écrans de saisie (forms)  Mise en place de la base de données parmi les sources ODBC du système
  • 37. Cours semaine 3 jour 2 Cours C++ 37 Exemple avec ODBC (2)
  • 38. Cours semaine 3 jour 2 Cours C++ 38 Exemple avec ODBC (3)
  • 39. Cours semaine 3 jour 2 Cours C++ 39 Exemple avec ODBC (4)  Refaire la même grille de saisie en C++  Cependant :  Pas de « calls » ni de « dial »
  • 40. Cours semaine 3 jour 2 Cours C++ 40 Exemple avec ODBC (5)  Dans VCPP, créer une application MFC(exe) PTContact
  • 41. Cours semaine 3 jour 2 Cours C++ 41 Exemple avec ODBC (6)
  • 42. Cours semaine 3 jour 2 Cours C++ 42 Exemple avec ODBC (7) *
  • 43. Cours semaine 3 jour 2 Cours C++ 43 Exemple avec ODBC (8)
  • 44. Cours semaine 3 jour 2 Cours C++ 44 Exemple avec ODBC (9)
  • 45. Cours semaine 3 jour 2 Cours C++ 45 Exemple avec ODBC (10)
  • 46. Cours semaine 3 jour 2 Cours C++ 46 Exemple avec ODBC (11)
  • 47. Cours semaine 3 jour 2 Cours C++ 47 Exemple avec ODBC (12)
  • 48. Cours semaine 3 jour 2 Cours C++ 48 Exemple avec ODBC (13)
  • 49. Cours semaine 3 jour 2 Cours C++ 49 Exemple avec ODBC (14)
  • 50. Cours semaine 3 jour 2 Cours C++ 50 Exemple avec ODBC (15)
  • 51. Cours semaine 3 jour 2 Cours C++ 51 Exemple avec ODBC (16)
  • 52. Cours semaine 3 jour 2 Cours C++ 52 Exemple avec ODBC (17)
  • 53. Cours semaine 3 jour 2 Cours C++ 53 IDC_ECTRY IDC_ESTAT IDC_ECITY IDC_EZIP IDC_EADDR IDC_EDEAR IDC_EFIRM IDC_ELNAME IDC_EFNAME IDC_ECNAME IDC_ECTYPE IDC_EENAME IDC_EREFER IDC_EID IDC_ETITL IDC_EWPHONE IDC_EWEXT IDC_EMPHONE IDC_EFAX IDC_ENOTES
  • 54. Cours semaine 3 jour 2 Cours C++ 54
  • 55. Cours semaine 3 jour 2 Cours C++ 55
  • 56. Cours semaine 3 jour 2 Cours C++ 56
  • 57. Cours semaine 3 jour 2 Cours C++ 57
  • 58. Cours semaine 3 jour 2 Cours C++ 58 Exemple avec ODBC (23)
  • 59. Cours semaine 3 jour 2 Cours C++ 59 Exemple avec ODBC (24)
  • 60. Cours semaine 3 jour 2 Cours C++ 60 Exemple avec ODBC (25) IDC_EFNAME = m_pSet->m_FirstName IDC_ELNAME = m_pSet->m_LastName IDC_EFIRM = m_pSet->m_CompanyName IDC_EDEAR = m_pSet->m_Dear IDC_EADDR = m_pSet->m_Address IDC_EZIP = m_pSet->m_PostalCode IDC_ECITY = m_pSet->m_City IDC_ESTAT = m_pSet->m_StateOrProvince
  • 61. Cours semaine 3 jour 2 Cours C++ 61 Exemple avec ODBC (26) IDC_ECTRY = m_pSet->m_Country IDC_ECNAME = RIEN IDC_ECTYPE = m_pSet->m_ContactTypeID IDC_EENAME = m_pSet->m_EmailName IDC_EREFER = m_pSet->m_ReferredBy IDC_ENOTES = m_pSet->m_Notes IDC_EID = m_pSet->m_ContactID IDC_ETITL = m_pSet->m_Title
  • 62. Cours semaine 3 jour 2 Cours C++ 62 Exemple avec ODBC (27) IDC_EWPHONE = m_pSet->m_WorkPhone IDC_EWEXT = m_pSet->m_WorkExtension IDC_EMPHONE = m_pSet->m_MobilePhone IDC_EFAX = m_pSet->m_FaxNumber
  • 63. Cours semaine 3 jour 2 Cours C++ 63
  • 64. Cours semaine 3 jour 2 Cours C++ 64 Exemple avec ODBC (29)  M_LastMeetingDate est absent de notre liste… Le code généré automatiquement ne doit jamais être modifié mais  Le type CTime ne peut pas être pris en compte  CTime ne supporte pas les dates antérieures au 31 décembre 1969  Il faudrait le modifier en type COleDateTime
  • 65. Cours semaine 3 jour 2 Cours C++ 65 Exemple avec ODBC (30)  Compilation et exécution de ptcontact.exe  L’application fonctionne mais rien n’est affiché  Normal : la base a été créée mais aucun enregistrement n’a été ajouté !  Retournez sous Access et ajouter des enregistrements  Réexécutez : les informations apparaissent
  • 66. Cours semaine 3 jour 2 Cours C++ 66 Exemple avec ODBC (31)  Nous disposons d’une application accèdant à une base de données qui est fonctionnelle  Nous pouvons parcourir les enregistrements existants et faire des update  Nous ne pouvons pas encore ajouter de nouveaux enregistrements  Nous ne pouvons pas encore supprimer des enregistrements existants
  • 67. Cours semaine 3 jour 2 Cours C++ 67 Exemple avec ODBC (32)  Pour l’ajout d’enregistrement :  Besoin d’une fonction qui retrouve le nombre max de records existants (dans la classe de gestion du Set)  Besoin d’une fonction qui fait la mise à jour après saisie dans le formulaire (dans la classe de gestion de la View)
  • 68. Cours semaine 3 jour 2 Cours C++ 68
  • 69. Cours semaine 3 jour 2 Cours C++ 69 m_ContactID;
  • 70. Cours semaine 3 jour 2 Cours C++ 70
  • 71. Cours semaine 3 jour 2 Cours C++ 71
  • 72. Cours semaine 3 jour 2 Cours C++ 72 Exemple avec ODBC (37)
  • 73. Cours semaine 3 jour 2 Cours C++ 73
  • 74. Cours semaine 3 jour 2 Cours C++ 74 Exemple avec ODBC (39)  Suppression de l’enregistrement
  • 75. Cours semaine 3 jour 2 Cours C++ 75
  • 76. Cours semaine 3 jour 2 Cours C++ 76
  • 77. Cours semaine 3 jour 2 Cours C++ 77
  • 78. Cours semaine 3 jour 2 Cours C++ 78 Exemple avec ODBC (43)  Raccourci dans la barre d’outils  Simplifie l’interaction avec l’utilisateur qui n’a plus besoin de parcourir les menus  Utilise les mêmes événements que ceux utiliser dans les menus : inutile de réassocier les fonctions…
  • 79. Cours semaine 3 jour 2 Cours C++ 79
  • 80. Cours semaine 3 jour 2 Cours C++ 80
  • 81. Cours semaine 3 jour 2 Cours C++ 81
  • 82. Cours semaine 3 jour 2 Cours C++ 82 Problèmes, problèmes  L’exemple précédent fonctionne sur un même poste  Théoriquement : une base de données et un utilisateur = pas de problème  Que se passerait-il si la base était accédée par plusieurs utilisateurs ?  La base deviendrait instable à un moment ou un autre : aucune notion de transaction n’est intégrée
  • 83. Cours semaine 3 jour 2 Cours C++ 83 Problèmes, problèmes (2)  Généralisation du problème précédent = problème encore plus grave  Nous n’accèdons qu’à une base de données. Une entreprise en possède généralement plusieurs, chacune représentant un ensemble cohérent  Travailler avec plusieurs bases nécessite de travailler avec des transactions supportant le « two phase commit », 2PC : pas disponible ici
  • 84. Cours semaine 3 jour 2 Cours C++ 84 Two phase commit BDD 1 BDD n BDD 2 transaction distribuée commit global commit local commit local commit local OK OK OK
  • 85. Cours semaine 3 jour 2 Cours C++ 85 Autre méthode d’accès  Nous venons de réaliser un programme avec MFC avec un accès ODBC  Peu de travail à faire  Génération automatique de la majorité du code  À modifier soi-même le moins possible car c’est une prise de risque  Modification parfois nécessaire comme pour le type CTime  Utilisation rapide de la plateforme
  • 86. Cours semaine 3 jour 2 Cours C++ 86 ADO  Comme déjà brièvement mentionné, il est possible d’utiliser ActiveX pour accéder aux bases de données : ADO, ActiveX Data Object  ADO est une technologie assez récente qui est désormais mise en avant avec ADO.NET dans la nouvelle plate-forme .Net
  • 87. Cours semaine 3 jour 2 Cours C++ 87 ADO (2)  OLE DB est un ensemble complexe permettant d’accèder à un ensemble varié de répertoires de données  Il ne s’agit plus uniquement de bases de données relationnelles  Il est aussi possible d’accéder à des bases de données hiérarchiques ou plates  Du fait de l’étendue des types de sources de données, OLE DB est très complexe !
  • 88. Cours semaine 3 jour 2 Cours C++ 88 ADO (3)  ADO est une couche logicielle qui vient se greffer au dessus d’OLE DB pour simplifier le développement  ADO contient un nombre minimum d’objets  Connection  Error  Command  Parameter  Recordset  Field
  • 89. Cours semaine 3 jour 2 Cours C++ 89 ADO (4)  ADO fournit également des objets de collection permettant de traiter des ensemble d’Error, de Parameter et de Field  Connection permet d’établir et de maintenir des connexions à une base de données. Connection permet également de réaliser des contrôles de haut niveau sur les connexions, dont les transactions (BeginTrans, CommitTrans, RollbackTrans)
  • 90. Cours semaine 3 jour 2 Cours C++ 90 ADO (5)  Error permet de retrouver les informations sur les erreurs, qu’il est possible d’examiner  Command permet d’exécuter une commande sur une source de données (typiquement du SQL pour les bases de données relationnellles) ; le résultat est le plus souvent du type RecordSet  Parameter permet de passer des paramètres associés à une Command
  • 91. Cours semaine 3 jour 2 Cours C++ 91 ADO (6)  RecordSet contient un ensemble d’enregistrement en provenance de la base de données. Il est possible de naviguer dans le RecordSet et d’accèder aux champs des enregistrement avec Field  Field représente une seule colonne dans un enregistrement du RecordSet  Type par défaut : Variant
  • 92. Cours semaine 3 jour 2 Cours C++ 92 ADO (7)  Exemple d’application utilisant ADO  QueryTool  Téléchargeable sur www.mindcracker.com  Disponible sous format exécutable  Source C++ disponible sous la forme d’un projet Visual C++ 6.0 SP3  Décompressez le Zip, compilez et faites tournez en accèdant à la base PTContact
  • 93. Cours semaine 3 jour 2 Cours C++ 93 ADO (8)
  • 94. Cours semaine 3 jour 2 Cours C++ 94 ADO (9)
  • 95. Cours semaine 3 jour 2 Cours C++ 95 ADO (10)
  • 96. Cours semaine 3 jour 2 Cours C++ 96 ADO (11)  Dans le QueryTool, où se trouve le code ActiveX ?  ADOConnectionEvents.h  msflexgrid.h  Helpers.cpp  ADO est finalement bien caché  Pour le voir de manière plus explicite, nous allons créer une autre application
  • 97. Cours semaine 3 jour 2 Cours C++ 97 ADO (12)  Créer une application MFC AppWizard (EXE) en prenant tous les paramètres par défaut sauf  SDI plutôt que MDI (écran 1)  CFormView plutôt que CView (écran 6)  Remarques :  Par défaut, il n’y a pas de database support…  Par défaut, l’application supporte ActiveX
  • 98. Cours semaine 3 jour 2 Cours C++ 98
  • 99. Cours semaine 3 jour 2 Cours C++ 99 ADO (14)
  • 100. Cours semaine 3 jour 2 Cours C++ 100 ADO (15)
  • 101. Cours semaine 3 jour 2 Cours C++ 101
  • 102. Cours semaine 3 jour 2 Cours C++ 102 Questions / Remarques