102
Cours C++ (2002) semaine 3 jour 2

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

Embed Size (px)

Citation preview

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

Cours C++ (2002)

semaine 3

jour 2

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

Cours semaine 3 jour 2 Cours C++ 2

Plan du jour

Accès aux bases de données sur plate-

formes Microsoft

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

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

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

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

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

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

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

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

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

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

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

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)

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

Cours semaine 3 jour 2 Cours C++ 9

ProgrammeProgramme appelant une

fonction ODBC

ODBC ManagerL’ODBC Manager qui

définit ce qu’il faut faire

ODBC DriverL’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

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

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

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

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

BDDLe 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

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

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.

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

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

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

Cours semaine 3 jour 2 Cours C++ 14

ODBC (9)

Les informations ODBC sont accessibles

par Start > Settings > Control Panel > Data Sources

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

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)

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

Cours semaine 3 jour 2 Cours C++ 16

ODBC Data Source (2)

Page 17: Cours de C++, en français, 2002 - Cours 3.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

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

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

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

Cours semaine 3 jour 2 Cours C++ 19

ODBC Driver (3)

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

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

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

Cours semaine 3 jour 2 Cours C++ 21

ODBC Connection Pooling (2)

BDD

driver

pool

BDD

driver

poolapplication

BDD

driver

pool

Initialisation

du driver

Utilisation

du driver dans

une application

Fin de l’utilisation

du driver

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

Cours semaine 3 jour 2 Cours C++ 22

ODBC Connection Pooling (3)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cours semaine 3 jour 2 Cours C++ 37

Exemple avec ODBC (2)

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

Cours semaine 3 jour 2 Cours C++ 38

Exemple avec ODBC (3)

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

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 »

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

Cours semaine 3 jour 2 Cours C++ 40

Exemple avec ODBC (5)

Dans VCPP, créer une application

MFC(exe)

PTContact

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

Cours semaine 3 jour 2 Cours C++ 41

Exemple avec ODBC (6)

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

Cours semaine 3 jour 2 Cours C++ 42

Exemple avec ODBC (7)

*

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

Cours semaine 3 jour 2 Cours C++ 43

Exemple avec ODBC (8)

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

Cours semaine 3 jour 2 Cours C++ 44

Exemple avec ODBC (9)

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

Cours semaine 3 jour 2 Cours C++ 45

Exemple avec ODBC (10)

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

Cours semaine 3 jour 2 Cours C++ 46

Exemple avec ODBC (11)

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

Cours semaine 3 jour 2 Cours C++ 47

Exemple avec ODBC (12)

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

Cours semaine 3 jour 2 Cours C++ 48

Exemple avec ODBC (13)

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

Cours semaine 3 jour 2 Cours C++ 49

Exemple avec ODBC (14)

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

Cours semaine 3 jour 2 Cours C++ 50

Exemple avec ODBC (15)

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

Cours semaine 3 jour 2 Cours C++ 51

Exemple avec ODBC (16)

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

Cours semaine 3 jour 2 Cours C++ 52

Exemple avec ODBC (17)

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

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

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

Cours semaine 3 jour 2 Cours C++ 54

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

Cours semaine 3 jour 2 Cours C++ 55

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

Cours semaine 3 jour 2 Cours C++ 56

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

Cours semaine 3 jour 2 Cours C++ 57

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

Cours semaine 3 jour 2 Cours C++ 58

Exemple avec ODBC (23)

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

Cours semaine 3 jour 2 Cours C++ 59

Exemple avec ODBC (24)

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

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

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

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

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

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

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

Cours semaine 3 jour 2 Cours C++ 63

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

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

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

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

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

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

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

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)

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

Cours semaine 3 jour 2 Cours C++ 68

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

Cours semaine 3 jour 2 Cours C++ 69

m_ContactID;

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

Cours semaine 3 jour 2 Cours C++ 70

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

Cours semaine 3 jour 2 Cours C++ 71

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

Cours semaine 3 jour 2 Cours C++ 72

Exemple avec ODBC (37)

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

Cours semaine 3 jour 2 Cours C++ 73

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

Cours semaine 3 jour 2 Cours C++ 74

Exemple avec ODBC (39)

Suppression de l’enregistrement

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

Cours semaine 3 jour 2 Cours C++ 75

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

Cours semaine 3 jour 2 Cours C++ 76

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

Cours semaine 3 jour 2 Cours C++ 77

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

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…

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

Cours semaine 3 jour 2 Cours C++ 79

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

Cours semaine 3 jour 2 Cours C++ 80

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

Cours semaine 3 jour 2 Cours C++ 81

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

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

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

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

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

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

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

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

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

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

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

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 !

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

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

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

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)

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

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

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

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

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

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

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

Cours semaine 3 jour 2 Cours C++ 93

ADO (8)

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

Cours semaine 3 jour 2 Cours C++ 94

ADO (9)

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

Cours semaine 3 jour 2 Cours C++ 95

ADO (10)

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

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

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

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

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

Cours semaine 3 jour 2 Cours C++ 98

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

Cours semaine 3 jour 2 Cours C++ 99

ADO (14)

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

Cours semaine 3 jour 2 Cours C++ 100

ADO (15)

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

Cours semaine 3 jour 2 Cours C++ 101

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

Cours semaine 3 jour 2 Cours C++ 102

Questions / Remarques