J'ai créé une classe qui sert à gérer tout ce qui concerne l'interaction
avec une base de données. Elle se base bien sûr sur ADO mais possède d'autres
propriétés et méthodes. Mon problème concerne les recordsets. J'aimerais que
le code qui utilise cette classe puisse utiliser plusieurs recordsets. Par
défaut, la classe contient un recordset qui contiendra le résultat des
requêtes demandées par le code qui utilise la classe. Mais j'aimerais que le
code qui utilise la classe puisse avoir plusieurs recordsets d'ouverts en
même temps. Savez-vous comment je devrais créer la classe pour que cela soit
possible ?
L'objectif de cette classe est que le code qui l'utilise n'ait jamais besoin
de créer des objets recordsets.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-marc
Patrick wrote:
Bonjour,
J'ai créé une classe qui sert à gérer tout ce qui concerne l'interaction avec une base de données. Elle se base bien sûr sur ADO mais possède d'autres propriétés et méthodes. Mon problème concerne les recordsets. J'aimerais que le code qui utilise cette classe puisse utiliser plusieurs recordsets. Par défaut, la classe contient un recordset qui contiendra le résultat des requêtes demandées par le code qui utilise la classe. Mais j'aimerais que le code qui utilise la classe puisse avoir plusieurs recordsets d'ouverts en même temps. Savez-vous comment je devrais créer la classe pour que cela soit possible ?
L'objectif de cette classe est que le code qui l'utilise n'ait jamais besoin de créer des objets recordsets.
J'espère que mes explications sont claires.
Hello,
C'est un classique. Il y a plusieurs façons de faire. Le plus simple est de créer non pas un (1) recordset dans ta classe mais un "pool" de recordsets.
Au niveau implémentation, c'est simplement un tableau de recordsets. Pour les utilisateurs de ta classe, tu crées 2 méthodes publiques, l'une permettant d'"allouer" un recordset en lui donnant un nom logique, l'autre methodes permettant de "libérer" le recodset.
Tu dois aussi créer des fonctions permettant de manipuler chaque recordset (mettre du SQL, récupérer les résultats, etc.).
Je ne sais pas si je suis clair, sans doute pas trop :-(
Voici un moreceau de code, avec les méthodes pour créer (en fait juste réserver le nom), puis ouvrir:
Private Const MAX_RS As Long = 100
Private Type EasyRecordset rs As ADODB.Recordset logicalname As String End Type
Private TRecordset(MAX_RS) As EasyRecordset
Public Function CreateRs(ByVal name As String) As Boolean Dim i As Long
' trouve une place libre For i = 1 To MAX_RS If TRecordset(i).logicalname = "" Then TRecordset(i).logicalname = name CreateRs = True Exit For End If Next i End Function
Public Function OpenRs(ByVal name As String) As Boolean Dim i As Long
For i = 1 To MAX_RS If TRecordset(i).logicalname = name Then Set TRecordset(i).rs = New ADODB.Recordset TRecordset(i).rs.Open found = True OpenRs = True Exit For End If Next i
End Function
Il ne te reste plus qu'à créer sur le même modèle le CloseRs (qui fermera et resetera le logicalname pour faire de la place) le RSSetSql(), etc. en fonction de tes besoins.
C'est très simple à utiliser ensuite depuis l'extérieur, l'utilisateur ne devant jouer qu'avec des noms logiques, sans savoir qu'il manipule des recordset, des cursor et tout ça.
J'ai créé une classe qui sert à gérer tout ce qui concerne
l'interaction avec une base de données. Elle se base bien sûr sur ADO
mais possède d'autres propriétés et méthodes. Mon problème concerne
les recordsets. J'aimerais que le code qui utilise cette classe
puisse utiliser plusieurs recordsets. Par défaut, la classe contient
un recordset qui contiendra le résultat des requêtes demandées par le
code qui utilise la classe. Mais j'aimerais que le code qui utilise
la classe puisse avoir plusieurs recordsets d'ouverts en même temps.
Savez-vous comment je devrais créer la classe pour que cela soit
possible ?
L'objectif de cette classe est que le code qui l'utilise n'ait jamais
besoin de créer des objets recordsets.
J'espère que mes explications sont claires.
Hello,
C'est un classique. Il y a plusieurs façons de faire. Le plus simple est de
créer non pas un (1) recordset dans ta classe mais un "pool" de recordsets.
Au niveau implémentation, c'est simplement un tableau de recordsets.
Pour les utilisateurs de ta classe, tu crées 2 méthodes publiques, l'une
permettant
d'"allouer" un recordset en lui donnant un nom logique, l'autre methodes
permettant
de "libérer" le recodset.
Tu dois aussi créer des fonctions permettant de manipuler chaque recordset
(mettre
du SQL, récupérer les résultats, etc.).
Je ne sais pas si je suis clair, sans doute pas trop :-(
Voici un moreceau de code, avec les méthodes pour créer (en fait juste
réserver
le nom), puis ouvrir:
Private Const MAX_RS As Long = 100
Private Type EasyRecordset
rs As ADODB.Recordset
logicalname As String
End Type
Private TRecordset(MAX_RS) As EasyRecordset
Public Function CreateRs(ByVal name As String) As Boolean
Dim i As Long
' trouve une place libre
For i = 1 To MAX_RS
If TRecordset(i).logicalname = "" Then
TRecordset(i).logicalname = name
CreateRs = True
Exit For
End If
Next i
End Function
Public Function OpenRs(ByVal name As String) As Boolean
Dim i As Long
For i = 1 To MAX_RS
If TRecordset(i).logicalname = name Then
Set TRecordset(i).rs = New ADODB.Recordset
TRecordset(i).rs.Open
found = True
OpenRs = True
Exit For
End If
Next i
End Function
Il ne te reste plus qu'à créer sur le même modèle
le CloseRs (qui fermera et resetera le logicalname pour faire de la
place)
le RSSetSql(), etc. en fonction de tes besoins.
C'est très simple à utiliser ensuite depuis l'extérieur, l'utilisateur ne
devant jouer qu'avec des noms logiques, sans savoir qu'il manipule
des recordset, des cursor et tout ça.
J'ai créé une classe qui sert à gérer tout ce qui concerne l'interaction avec une base de données. Elle se base bien sûr sur ADO mais possède d'autres propriétés et méthodes. Mon problème concerne les recordsets. J'aimerais que le code qui utilise cette classe puisse utiliser plusieurs recordsets. Par défaut, la classe contient un recordset qui contiendra le résultat des requêtes demandées par le code qui utilise la classe. Mais j'aimerais que le code qui utilise la classe puisse avoir plusieurs recordsets d'ouverts en même temps. Savez-vous comment je devrais créer la classe pour que cela soit possible ?
L'objectif de cette classe est que le code qui l'utilise n'ait jamais besoin de créer des objets recordsets.
J'espère que mes explications sont claires.
Hello,
C'est un classique. Il y a plusieurs façons de faire. Le plus simple est de créer non pas un (1) recordset dans ta classe mais un "pool" de recordsets.
Au niveau implémentation, c'est simplement un tableau de recordsets. Pour les utilisateurs de ta classe, tu crées 2 méthodes publiques, l'une permettant d'"allouer" un recordset en lui donnant un nom logique, l'autre methodes permettant de "libérer" le recodset.
Tu dois aussi créer des fonctions permettant de manipuler chaque recordset (mettre du SQL, récupérer les résultats, etc.).
Je ne sais pas si je suis clair, sans doute pas trop :-(
Voici un moreceau de code, avec les méthodes pour créer (en fait juste réserver le nom), puis ouvrir:
Private Const MAX_RS As Long = 100
Private Type EasyRecordset rs As ADODB.Recordset logicalname As String End Type
Private TRecordset(MAX_RS) As EasyRecordset
Public Function CreateRs(ByVal name As String) As Boolean Dim i As Long
' trouve une place libre For i = 1 To MAX_RS If TRecordset(i).logicalname = "" Then TRecordset(i).logicalname = name CreateRs = True Exit For End If Next i End Function
Public Function OpenRs(ByVal name As String) As Boolean Dim i As Long
For i = 1 To MAX_RS If TRecordset(i).logicalname = name Then Set TRecordset(i).rs = New ADODB.Recordset TRecordset(i).rs.Open found = True OpenRs = True Exit For End If Next i
End Function
Il ne te reste plus qu'à créer sur le même modèle le CloseRs (qui fermera et resetera le logicalname pour faire de la place) le RSSetSql(), etc. en fonction de tes besoins.
C'est très simple à utiliser ensuite depuis l'extérieur, l'utilisateur ne devant jouer qu'avec des noms logiques, sans savoir qu'il manipule des recordset, des cursor et tout ça.
Merci pour tes explications. C'est tout à fait clair, d'autant plus que j'avais envisagé cette façon de faire mais je ne savais pas trop comment la réaliser.
Bonne journée.
-- Patrick
"Jean-marc" wrote:
Patrick wrote: > Bonjour, > > J'ai créé une classe qui sert à gérer tout ce qui concerne > l'interaction avec une base de données. Elle se base bien sûr sur ADO > mais possède d'autres propriétés et méthodes. Mon problème concerne > les recordsets. J'aimerais que le code qui utilise cette classe > puisse utiliser plusieurs recordsets. Par défaut, la classe contient > un recordset qui contiendra le résultat des requêtes demandées par le > code qui utilise la classe. Mais j'aimerais que le code qui utilise > la classe puisse avoir plusieurs recordsets d'ouverts en même temps. > Savez-vous comment je devrais créer la classe pour que cela soit > possible ? > > L'objectif de cette classe est que le code qui l'utilise n'ait jamais > besoin de créer des objets recordsets. > > J'espère que mes explications sont claires.
Hello,
C'est un classique. Il y a plusieurs façons de faire. Le plus simple est de créer non pas un (1) recordset dans ta classe mais un "pool" de recordsets.
Au niveau implémentation, c'est simplement un tableau de recordsets. Pour les utilisateurs de ta classe, tu crées 2 méthodes publiques, l'une permettant d'"allouer" un recordset en lui donnant un nom logique, l'autre methodes permettant de "libérer" le recodset.
Tu dois aussi créer des fonctions permettant de manipuler chaque recordset (mettre du SQL, récupérer les résultats, etc.).
Je ne sais pas si je suis clair, sans doute pas trop :-(
Voici un moreceau de code, avec les méthodes pour créer (en fait juste réserver le nom), puis ouvrir:
Private Const MAX_RS As Long = 100
Private Type EasyRecordset rs As ADODB.Recordset logicalname As String End Type
Private TRecordset(MAX_RS) As EasyRecordset
Public Function CreateRs(ByVal name As String) As Boolean Dim i As Long
' trouve une place libre For i = 1 To MAX_RS If TRecordset(i).logicalname = "" Then TRecordset(i).logicalname = name CreateRs = True Exit For End If Next i End Function
Public Function OpenRs(ByVal name As String) As Boolean Dim i As Long
For i = 1 To MAX_RS If TRecordset(i).logicalname = name Then Set TRecordset(i).rs = New ADODB.Recordset TRecordset(i).rs.Open found = True OpenRs = True Exit For End If Next i
End Function
Il ne te reste plus qu'à créer sur le même modèle le CloseRs (qui fermera et resetera le logicalname pour faire de la place) le RSSetSql(), etc. en fonction de tes besoins.
C'est très simple à utiliser ensuite depuis l'extérieur, l'utilisateur ne devant jouer qu'avec des noms logiques, sans savoir qu'il manipule des recordset, des cursor et tout ça.
Merci pour tes explications. C'est tout à fait clair, d'autant plus que
j'avais envisagé cette façon de faire mais je ne savais pas trop comment la
réaliser.
Bonne journée.
--
Patrick
"Jean-marc" wrote:
Patrick wrote:
> Bonjour,
>
> J'ai créé une classe qui sert à gérer tout ce qui concerne
> l'interaction avec une base de données. Elle se base bien sûr sur ADO
> mais possède d'autres propriétés et méthodes. Mon problème concerne
> les recordsets. J'aimerais que le code qui utilise cette classe
> puisse utiliser plusieurs recordsets. Par défaut, la classe contient
> un recordset qui contiendra le résultat des requêtes demandées par le
> code qui utilise la classe. Mais j'aimerais que le code qui utilise
> la classe puisse avoir plusieurs recordsets d'ouverts en même temps.
> Savez-vous comment je devrais créer la classe pour que cela soit
> possible ?
>
> L'objectif de cette classe est que le code qui l'utilise n'ait jamais
> besoin de créer des objets recordsets.
>
> J'espère que mes explications sont claires.
Hello,
C'est un classique. Il y a plusieurs façons de faire. Le plus simple est de
créer non pas un (1) recordset dans ta classe mais un "pool" de recordsets.
Au niveau implémentation, c'est simplement un tableau de recordsets.
Pour les utilisateurs de ta classe, tu crées 2 méthodes publiques, l'une
permettant
d'"allouer" un recordset en lui donnant un nom logique, l'autre methodes
permettant
de "libérer" le recodset.
Tu dois aussi créer des fonctions permettant de manipuler chaque recordset
(mettre
du SQL, récupérer les résultats, etc.).
Je ne sais pas si je suis clair, sans doute pas trop :-(
Voici un moreceau de code, avec les méthodes pour créer (en fait juste
réserver
le nom), puis ouvrir:
Private Const MAX_RS As Long = 100
Private Type EasyRecordset
rs As ADODB.Recordset
logicalname As String
End Type
Private TRecordset(MAX_RS) As EasyRecordset
Public Function CreateRs(ByVal name As String) As Boolean
Dim i As Long
' trouve une place libre
For i = 1 To MAX_RS
If TRecordset(i).logicalname = "" Then
TRecordset(i).logicalname = name
CreateRs = True
Exit For
End If
Next i
End Function
Public Function OpenRs(ByVal name As String) As Boolean
Dim i As Long
For i = 1 To MAX_RS
If TRecordset(i).logicalname = name Then
Set TRecordset(i).rs = New ADODB.Recordset
TRecordset(i).rs.Open
found = True
OpenRs = True
Exit For
End If
Next i
End Function
Il ne te reste plus qu'à créer sur le même modèle
le CloseRs (qui fermera et resetera le logicalname pour faire de la
place)
le RSSetSql(), etc. en fonction de tes besoins.
C'est très simple à utiliser ensuite depuis l'extérieur, l'utilisateur ne
devant jouer qu'avec des noms logiques, sans savoir qu'il manipule
des recordset, des cursor et tout ça.
Merci pour tes explications. C'est tout à fait clair, d'autant plus que j'avais envisagé cette façon de faire mais je ne savais pas trop comment la réaliser.
Bonne journée.
-- Patrick
"Jean-marc" wrote:
Patrick wrote: > Bonjour, > > J'ai créé une classe qui sert à gérer tout ce qui concerne > l'interaction avec une base de données. Elle se base bien sûr sur ADO > mais possède d'autres propriétés et méthodes. Mon problème concerne > les recordsets. J'aimerais que le code qui utilise cette classe > puisse utiliser plusieurs recordsets. Par défaut, la classe contient > un recordset qui contiendra le résultat des requêtes demandées par le > code qui utilise la classe. Mais j'aimerais que le code qui utilise > la classe puisse avoir plusieurs recordsets d'ouverts en même temps. > Savez-vous comment je devrais créer la classe pour que cela soit > possible ? > > L'objectif de cette classe est que le code qui l'utilise n'ait jamais > besoin de créer des objets recordsets. > > J'espère que mes explications sont claires.
Hello,
C'est un classique. Il y a plusieurs façons de faire. Le plus simple est de créer non pas un (1) recordset dans ta classe mais un "pool" de recordsets.
Au niveau implémentation, c'est simplement un tableau de recordsets. Pour les utilisateurs de ta classe, tu crées 2 méthodes publiques, l'une permettant d'"allouer" un recordset en lui donnant un nom logique, l'autre methodes permettant de "libérer" le recodset.
Tu dois aussi créer des fonctions permettant de manipuler chaque recordset (mettre du SQL, récupérer les résultats, etc.).
Je ne sais pas si je suis clair, sans doute pas trop :-(
Voici un moreceau de code, avec les méthodes pour créer (en fait juste réserver le nom), puis ouvrir:
Private Const MAX_RS As Long = 100
Private Type EasyRecordset rs As ADODB.Recordset logicalname As String End Type
Private TRecordset(MAX_RS) As EasyRecordset
Public Function CreateRs(ByVal name As String) As Boolean Dim i As Long
' trouve une place libre For i = 1 To MAX_RS If TRecordset(i).logicalname = "" Then TRecordset(i).logicalname = name CreateRs = True Exit For End If Next i End Function
Public Function OpenRs(ByVal name As String) As Boolean Dim i As Long
For i = 1 To MAX_RS If TRecordset(i).logicalname = name Then Set TRecordset(i).rs = New ADODB.Recordset TRecordset(i).rs.Open found = True OpenRs = True Exit For End If Next i
End Function
Il ne te reste plus qu'à créer sur le même modèle le CloseRs (qui fermera et resetera le logicalname pour faire de la place) le RSSetSql(), etc. en fonction de tes besoins.
C'est très simple à utiliser ensuite depuis l'extérieur, l'utilisateur ne devant jouer qu'avec des noms logiques, sans savoir qu'il manipule des recordset, des cursor et tout ça.