Sommaire
1. Exemple d'application classique
2. Rôle de chacune des couches
3. Avantages de cette architecture
4. Exemple d'architecture à 3 couches
4.1 Couche données
4.2 Couche métier
4.3 Couche présentation
4.1 Couche données
Cette couche aura donc la forme d'une dll ActiveX. Pour créer ce type de projet, cliquez sur le menu Fichier -> Nouveau projet,
puis sur DLL ActiveX. Allez dans les propriétés du projet et saisissez "Data" pour le nom du projet. La classe Class1 a été créée par défaut, renommez-la en clsData. Ce sera la seule classe contenue dans cette couche.
La classe clsData doit pouvoir : ouvrir une connexion à la base de données, et renvoyer un recordset déconnecté à partir d'une requête passée en paramètre.
Option Explicit
Public Enum DataErrorEnum
dtErrorConnexion = 4000 dtErrorOpenRecordset = 4001 dtErrorGeneral = 4002
End Enum
Private m_baseDeDonnees As String
Private m_chaineDeConnexion As String
Private Sub Class_Initialize()
m_baseDeDonnees = App.Path & "\db.mdb"
m_chaineDeConnexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_baseDeDonnees & _
";Persist Security Info=False"
End Sub |
Nous avons tout d'abord une énumération qui représente les numéros d'erreurs qui peuvent être créées par cette classe. Ces erreurs peuvent être
signalées à la couche métier. La procédure Class_Initialize() est exécutée à l'initialisation de la classe. C'est à ce niveau que
nous initialisons les variables qui contiennent les paramètres de notre connexion.
Private Function CreeConnexion() As ADODB.Connection
Dim cnn As ADODB.Connection
On Error GoTo fail
Set cnn = New ADODB.Connection cnn.Open m_chaineDeConnexion
Set CreeConnexion = cnn Exit Function
fail: Err.Raise dtErrorConnexion, "Data.clsData", _
"La connexion à la base de données a échoué." & vbCrLf & Err.Number & ": " & Err.Description
End Function
Private Function CreeRecordset(sql As String) As ADODB.Recordset
Dim cnn As ADODB.Connection, rst As ADODB.Recordset
On Error GoTo fail
Set cnn = CreeConnexion()
Set rst = New ADODB.Recordset rst.CursorLocation = adUseClient
rst.Open sql, cnn, adOpenForwardOnly, adLockReadOnly Set rst.ActiveConnection = Nothing
cnn.Close Set cnn = Nothing
Set CreeRecordset = rst
Exit Function
fail: Select Case Err.Number
Case dtErrorConnexion: Err.Raise dtErrorConnexion, "Data.clsData", Err.Description
Case Else Err.Raise dtErrorOpenRecordset, "Data.clsData", _
"L'ouverture d'un recordset a échoué." & vbCrLf & Err.Number & ": " & Err.Description
End Select
End Function |
La fonction CreeConnexion() instancie un objet ADODB.Connection, se connecte à la base de données et renvoie l'objet instancié.
La fonction CreeRecordset() crée puis renvoie un recordset déconnecté, le code sql de la requête devant être passé en paramètre.
Nous renvoyons un recordset déconnecté, car un recordset connecté qui est transféré sur le réseau, conserve avec lui toutes les
informations nécessaires pour rester lié à sa source de données.
Pour que le recordset soit déconnecté, vous devez :
- Donner à la propriété CursorLocation la valeur adUseClient, et ceci avant d'ouvrir le recordset. Ainsi le curseur sera géré du côté client.
- Donner à la propriété ActiveConnection la valeur Nothing, après l'ouverture du recordset. Cela a pour effet de déconnecter le recordset de
sa source de données.
En utilisant cette méthode, le recordset est transféré du serveur vers le client, morceau par morceau. Il faut donc plusieurs allers-retours
entre le serveur et le client pour que le recordset soit totalement transféré, ce qui n'est pas l'idéal. Ceci peut-être encore amélioré en utilisant les composants RDS
pour accéder aux données. Pour plus d'informations sur RDS, voir la documentation sur MSDN.
Ici la valeur choisie pour le "locktype" du recordset est adLockReadOnly, parce que les enregistrements n'ont pas besoin d'être modifiables
par le client.
[ Précédent ] [ Suivant ]
Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici.
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.
|