OVH Cloud OVH Cloud

OLE DB et ADO en VB comme en ASP

6 réponses
Avatar
Adrien Gaudel
Bonjour à tous,

Dans un projet VB6 j'aimerais pouvoir acceder à mes données (base access
attaquée avec Jet 4) de la même manière que je le fais en ASP, c'est à dire
:
- creation d'un objet recordset
- ouverture de cette objet (avec paramètre de connection et d'appel des
données via requette SQL)
- parcourir le recordset pour traiter et afficher les données
- fermer le recordset
- detruire l'objet

Ceci afin de m'affranchir de l'utilisation d'un contrôle ADO Data que je
trouve encombrant (surtout en utilisation memoire) et un peu obscure quant à
son fonctionnement.

Avez-vous une idée ou même un exemple de code qui permet de faire cela ?

Merci d'avance à celui qui s'aura m'aider !

6 réponses

Avatar
JLK
Tu feras presque pareil qu'en ASP
Tu commences par ajouter la référence à la bibliothèque dans Projet /
Références / Microsoft Activex data Objects Library 2.x (2.7 de préférences
avec SP5)

- création d'une connexion à la base:
dim maconnexion as new adodb.connexion
- création d'un recordset
dim monrecordset as new adodb.recordset
- spécifier la chaîne de connexion
maconnexion.provider="fournisseur" p.ex. "Microsoft.jet.oledb.4.0" pour les
bases Jet ( access...)
maconnexion.connectionstring="chemin d'acces à la base + nom de la base et
extension"
- ouvrir la connexion
maconnexion.open (ici tu peux aussi préciser le type de curseur, ...)
- ouvrir le recordset
monrecordset.open "select ou nom de la table", maconnexion (il y a d'autres
paramètres à préciser aussi)

A partir de ce moment tu as l'accès à ton recordset
monrecordset.eof
monrecordset.bof
monrecordset!nomdechamp
monrecordset.addnew
...

JLK

"Adrien Gaudel" a écrit dans le message de
news: bqfa5c$2it$
Bonjour à tous,

Dans un projet VB6 j'aimerais pouvoir acceder à mes données (base access
attaquée avec Jet 4) de la même manière que je le fais en ASP, c'est à


dire
:
- creation d'un objet recordset
- ouverture de cette objet (avec paramètre de connection et d'appel des
données via requette SQL)
- parcourir le recordset pour traiter et afficher les données
- fermer le recordset
- detruire l'objet

Ceci afin de m'affranchir de l'utilisation d'un contrôle ADO Data que je
trouve encombrant (surtout en utilisation memoire) et un peu obscure quant


à
son fonctionnement.

Avez-vous une idée ou même un exemple de code qui permet de faire cela ?

Merci d'avance à celui qui s'aura m'aider !




Avatar
Adrien Gaudel
Ok merci beaucou pour cette réponse,

Mais est-ce que comme en ASP je peux m'affranchir de l'utilisation d'un
objet connexion
en faisant par exemple :
monrecordset.open "select ou nom de la table", maChaineDeConnexion (chaine
incluant fournisseur, nom et chemin du fichier et option de connexion
genre
maChaineDeConnexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source="C:DatabaseEquitation2004.mdb";Persist Security Infoúlse"

Avant de me casser la tête à essayer, j'aimerais autant savoir si c'est
possible ou si je dois me trainer un objet connexion.

En tout cas merci encore pour cette réponse, je crois que ça va bien me
déplanter déjà !

"JLK" a écrit dans le message de
news:
Tu feras presque pareil qu'en ASP
Tu commences par ajouter la référence à la bibliothèque dans Projet /
Références / Microsoft Activex data Objects Library 2.x (2.7 de


préférences
avec SP5)

- création d'une connexion à la base:
dim maconnexion as new adodb.connexion
- création d'un recordset
dim monrecordset as new adodb.recordset
- spécifier la chaîne de connexion
maconnexion.provider="fournisseur" p.ex. "Microsoft.jet.oledb.4.0" pour


les
bases Jet ( access...)
maconnexion.connectionstring="chemin d'acces à la base + nom de la base et
extension"
- ouvrir la connexion
maconnexion.open (ici tu peux aussi préciser le type de curseur, ...)
- ouvrir le recordset
monrecordset.open "select ou nom de la table", maconnexion (il y a


d'autres
paramètres à préciser aussi)

A partir de ce moment tu as l'accès à ton recordset
monrecordset.eof
monrecordset.bof
monrecordset!nomdechamp
monrecordset.addnew
...

JLK

"Adrien Gaudel" a écrit dans le message de
news: bqfa5c$2it$
> Bonjour à tous,
>
> Dans un projet VB6 j'aimerais pouvoir acceder à mes données (base access
> attaquée avec Jet 4) de la même manière que je le fais en ASP, c'est à
dire
> :
> - creation d'un objet recordset
> - ouverture de cette objet (avec paramètre de connection et d'appel des
> données via requette SQL)
> - parcourir le recordset pour traiter et afficher les données
> - fermer le recordset
> - detruire l'objet
>
> Ceci afin de m'affranchir de l'utilisation d'un contrôle ADO Data que je
> trouve encombrant (surtout en utilisation memoire) et un peu obscure


quant
à
> son fonctionnement.
>
> Avez-vous une idée ou même un exemple de code qui permet de faire cela ?
>
> Merci d'avance à celui qui s'aura m'aider !
>
>




Avatar
JLK
Tout à fait oui. Vous n'êtes pas obligé de vous encombrer de l'objet
connexion.
Il suffit d'indiquer la chaîne de connexion à l'ouverture du recordset.
C'est là l'élégance du modèle ADO par rapport à DAO où la hiérarchie est
stricte.

JLK
"Adrien Gaudel" a écrit dans le message de
news: bqfq11$rre$
Ok merci beaucou pour cette réponse,

Mais est-ce que comme en ASP je peux m'affranchir de l'utilisation d'un
objet connexion
en faisant par exemple :
monrecordset.open "select ou nom de la table", maChaineDeConnexion (chaine
incluant fournisseur, nom et chemin du fichier et option de connexion
genre
maChaineDeConnexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source="C:DatabaseEquitation2004.mdb";Persist Security Infoúlse"

Avant de me casser la tête à essayer, j'aimerais autant savoir si c'est
possible ou si je dois me trainer un objet connexion.

En tout cas merci encore pour cette réponse, je crois que ça va bien me
déplanter déjà !

"JLK" a écrit dans le message de
news:
> Tu feras presque pareil qu'en ASP
> Tu commences par ajouter la référence à la bibliothèque dans Projet /
> Références / Microsoft Activex data Objects Library 2.x (2.7 de
préférences
> avec SP5)
>
> - création d'une connexion à la base:
> dim maconnexion as new adodb.connexion
> - création d'un recordset
> dim monrecordset as new adodb.recordset
> - spécifier la chaîne de connexion
> maconnexion.provider="fournisseur" p.ex. "Microsoft.jet.oledb.4.0" pour
les
> bases Jet ( access...)
> maconnexion.connectionstring="chemin d'acces à la base + nom de la base


et
> extension"
> - ouvrir la connexion
> maconnexion.open (ici tu peux aussi préciser le type de curseur, ...)
> - ouvrir le recordset
> monrecordset.open "select ou nom de la table", maconnexion (il y a
d'autres
> paramètres à préciser aussi)
>
> A partir de ce moment tu as l'accès à ton recordset
> monrecordset.eof
> monrecordset.bof
> monrecordset!nomdechamp
> monrecordset.addnew
> ...
>
> JLK
>
> "Adrien Gaudel" a écrit dans le message


de
> news: bqfa5c$2it$
> > Bonjour à tous,
> >
> > Dans un projet VB6 j'aimerais pouvoir acceder à mes données (base


access
> > attaquée avec Jet 4) de la même manière que je le fais en ASP, c'est à
> dire
> > :
> > - creation d'un objet recordset
> > - ouverture de cette objet (avec paramètre de connection et d'appel


des
> > données via requette SQL)
> > - parcourir le recordset pour traiter et afficher les données
> > - fermer le recordset
> > - detruire l'objet
> >
> > Ceci afin de m'affranchir de l'utilisation d'un contrôle ADO Data que


je
> > trouve encombrant (surtout en utilisation memoire) et un peu obscure
quant
> à
> > son fonctionnement.
> >
> > Avez-vous une idée ou même un exemple de code qui permet de faire cela


?
> >
> > Merci d'avance à celui qui s'aura m'aider !
> >
> >
>
>




Avatar
Adrien Gaudel
Merci beaucoup de vous être penché sur mon problème, très sympathique de
votre part.

"JLK" a écrit dans le message de
news:
Tout à fait oui. Vous n'êtes pas obligé de vous encombrer de l'objet
connexion.
Il suffit d'indiquer la chaîne de connexion à l'ouverture du recordset.
C'est là l'élégance du modèle ADO par rapport à DAO où la hiérarchie est
stricte.

JLK
"Adrien Gaudel" a écrit dans le message de
news: bqfq11$rre$
> Ok merci beaucou pour cette réponse,
>
> Mais est-ce que comme en ASP je peux m'affranchir de l'utilisation d'un
> objet connexion
> en faisant par exemple :
> monrecordset.open "select ou nom de la table", maChaineDeConnexion


(chaine
> incluant fournisseur, nom et chemin du fichier et option de connexion
> genre
> maChaineDeConnexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source="C:DatabaseEquitation2004.mdb";Persist Security Infoúlse"
>
> Avant de me casser la tête à essayer, j'aimerais autant savoir si c'est
> possible ou si je dois me trainer un objet connexion.
>
> En tout cas merci encore pour cette réponse, je crois que ça va bien me
> déplanter déjà !


Avatar
Denis P
Bonjour Adrien,

Pour rajouter à ce que JLK t'a donné comme information, tu peux également
déclarer ta chaîne de connecxion comme une constante. Tu n'auras qu'à
l'initialiser, la définir et l'ouvrir dans le form load de la première form
de ton projet qui s'affiche. Ensuite tu utilises cette constante à tout
moment quand tu en as besoin sans avoir à répéter le même processus à chaque
fois. Quand tu fermes ton programme, tu fermes ta connexion.

Dans un module tu déclares ta constante

Public ConBD as ADODB.Connection

Dans ta première form qui s'affiche, dans le Form_Load

Set ConBD = New ADODB.Connection

ConBD.ConnectionString = "Ta chaîne de connexion"
ConBD.Open

Dans ta dernière form qui se fermera à la fin de ton programme, dans le
Form_Unload

ConBD.Close
Set ConBD = Nothing

En procédant de cette façon, tu viens d'éliminer le souci d'avoir à recréer
continuellement la même chaîne de connexion à chaque fois que tu en auras
besoin dans ton programme.

@ +

Denis P
"Adrien Gaudel" a écrit dans le message de
news:bqhpiv$9nt$
Merci beaucoup de vous être penché sur mon problème, très sympathique de
votre part.

"JLK" a écrit dans le message de
news:
> Tout à fait oui. Vous n'êtes pas obligé de vous encombrer de l'objet
> connexion.
> Il suffit d'indiquer la chaîne de connexion à l'ouverture du recordset.
> C'est là l'élégance du modèle ADO par rapport à DAO où la hiérarchie est
> stricte.
>
> JLK
> "Adrien Gaudel" a écrit dans le message


de
> news: bqfq11$rre$
> > Ok merci beaucou pour cette réponse,
> >
> > Mais est-ce que comme en ASP je peux m'affranchir de l'utilisation


d'un
> > objet connexion
> > en faisant par exemple :
> > monrecordset.open "select ou nom de la table", maChaineDeConnexion
(chaine
> > incluant fournisseur, nom et chemin du fichier et option de connexion
> > genre
> > maChaineDeConnexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> > Source="C:DatabaseEquitation2004.mdb";Persist Security Infoúlse"
> >
> > Avant de me casser la tête à essayer, j'aimerais autant savoir si


c'est
> > possible ou si je dois me trainer un objet connexion.
> >
> > En tout cas merci encore pour cette réponse, je crois que ça va bien


me
> > déplanter déjà !




Avatar
Adrien Gaudel
Merci pour cette astuce, mais j'ai même fait mieux...

Mon programme devant toujours appeler la même base (c'est un programme de
gestion, la base est inexistante du point de vue de l'utilisateur) mais
cette base pouvant être appelée à bouger suivant la configuration des
disques de sauvegarde sur le PC executant mon logiciel, j'ai tout simplement
stocké le chemin de ma base dans la base de registre et on peut modifier son
emplacement via une fenêtre de "configuration" avec un ComonDialogue File...
Au chargement du logiciel, l'emplacement de la base est stocké dans une
constante publique au niveau du module de chargement. Toutes mes forms ayant
besoin d'un acces au données peuvent ainsi utiliser cette chaine de
connexion.
Ainsi on ne se retrouve pas avec un logiciel figé devant obligatoirement
s'executer sur une arboresence prédefnie et qui plante si on tente de bouger
quelque chose (comme c'est le cas pour le logiciel utilisé actuellement et
que je dois ameliorer... mais dont je n'ai pas les sources)

Je n'utilise pas d'objet Connection mais uniquement des objets Recordset car
je trouve plus simple de n'utiliser qu'un seul objet "qui fait tout". Mes
acces aux données étant "cyclique" (lecture/écriture), je ne laisse pas
ouvert une connexion sur une base de donnée. Ce n'est peut-être pas la bonne
methode, mais c'est une deformation de mon experience de l'ASP où tout se
fait de cette manière (parce qu'il n'y à pas d'autre solution)
Au pire j'utilise un objet Command pour executer des requettes SQL visant à
la suppresion ou la modification d'un enregistrement ou d'une table.

Depuis quelques années je ne travail plus qu'en ASP, j'ai d'ailleur
découvert les données avec l'ASP (dans mes projets VB anterieurs je n'avais
pas besoin de données) de ce fait, j'ai acquis une certaine methode de
travail avec les données que je qualifierais de propre à l'ASP (bien que
comme on vient de me le demontrer, on puisse faire exactement la même chose
en VB pur)
Et le fait de revenir en VB avec ses contrôles un peu lourd au
fonctionnement pas toujours très clair, je me suis retrouvé perdu. Mon
proramme plantait, bouffait des ressources en pagaille et finisait par faire
planter le PC avec un très obscur "memoire insuffisante"
Je me suis dis qu'il devait y'avoir un moyen de faire aussi "propre" en VB
qu'en ASP sans se trainer des contrôles inutiles. J'avais raison puisque JLK
à tout à faire répondu à question...

"Denis P" a écrit dans le message de
news:
Bonjour Adrien,

Pour rajouter à ce que JLK t'a donné comme information, tu peux également
déclarer ta chaîne de connecxion comme une constante. Tu n'auras qu'à
l'initialiser, la définir et l'ouvrir dans le form load de la première


form
de ton projet qui s'affiche. Ensuite tu utilises cette constante à tout
moment quand tu en as besoin sans avoir à répéter le même processus à


chaque
fois. Quand tu fermes ton programme, tu fermes ta connexion.

Dans un module tu déclares ta constante

Public ConBD as ADODB.Connection

Dans ta première form qui s'affiche, dans le Form_Load

Set ConBD = New ADODB.Connection

ConBD.ConnectionString = "Ta chaîne de connexion"
ConBD.Open

Dans ta dernière form qui se fermera à la fin de ton programme, dans le
Form_Unload

ConBD.Close
Set ConBD = Nothing

En procédant de cette façon, tu viens d'éliminer le souci d'avoir à


recréer
continuellement la même chaîne de connexion à chaque fois que tu en auras
besoin dans ton programme.

@ +

Denis P
"Adrien Gaudel" a écrit dans le message de
news:bqhpiv$9nt$
> Merci beaucoup de vous être penché sur mon problème, très sympathique de
> votre part.
>
> "JLK" a écrit dans le message de
> news:
> > Tout à fait oui. Vous n'êtes pas obligé de vous encombrer de l'objet
> > connexion.
> > Il suffit d'indiquer la chaîne de connexion à l'ouverture du


recordset.
> > C'est là l'élégance du modèle ADO par rapport à DAO où la hiérarchie


est
> > stricte.
> >
> > JLK
> > "Adrien Gaudel" a écrit dans le


message
de
> > news: bqfq11$rre$
> > > Ok merci beaucou pour cette réponse,
> > >
> > > Mais est-ce que comme en ASP je peux m'affranchir de l'utilisation
d'un
> > > objet connexion
> > > en faisant par exemple :
> > > monrecordset.open "select ou nom de la table", maChaineDeConnexion
> (chaine
> > > incluant fournisseur, nom et chemin du fichier et option de


connexion
> > > genre
> > > maChaineDeConnexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> > > Source="C:DatabaseEquitation2004.mdb";Persist Security Infoúlse"
> > >
> > > Avant de me casser la tête à essayer, j'aimerais autant savoir si
c'est
> > > possible ou si je dois me trainer un objet connexion.
> > >
> > > En tout cas merci encore pour cette réponse, je crois que ça va bien
me
> > > déplanter déjà !
>
>