OVH Cloud OVH Cloud

Base de données sur Internet

6 réponses
Avatar
pierre.rivet
Bonjour,

Est-il possible d'utiliser VB6 avec la base de données sur Internet , par
exemple, sur un site d'un particulier qui souhaiterait utiliser un logiciel
un réseau à partir de deux endroits différents.

Quand je rajoute une ADODC dans une feuille, j'ai le chemin de la base de
données: C:\Program Files\Base.mdb (par exemple)
Pourrait on avoir un chemin avec ftp quelque chose .....

Merci, et bonne année à tous,

Pierre

6 réponses

Avatar
Jean-Marc
"pierre.rivet" a écrit dans le message de
news:43b78935$0$19691$
Bonjour,

Est-il possible d'utiliser VB6 avec la base de données sur Internet ,


par
exemple, sur un site d'un particulier qui souhaiterait utiliser un


logiciel
un réseau à partir de deux endroits différents.

Quand je rajoute une ADODC dans une feuille, j'ai le chemin de la base


de
données: C:Program FilesBase.mdb (par exemple)
Pourrait on avoir un chemin avec ftp quelque chose .....

Merci, et bonne année à tous,



Hello,

non, on ne peut pas, en tout cas pas comme ça. On peut en revanche le
faire avec ASP, voir
par exemple un petit tutorial:
http://www.asp-magazine.com/aspressources/articles/asp/base_de_donnees/

On peut aussi utiliser une base distante directement depuis une appli
VB6, mais
pas une base Access. Il faut utiliser un vrai serveur de base de données
comme
Oracle ou DB2 (peut être aussi MySQL et SQL Server, mais je ne suis pas
compétent
pour ces 2 dernières).

Enfin, 3eme voie, on peut placer sa base access sur une machine dédiée
et écrire
un petit serveur dont le boulot est de résupérer les requêtes des
clients et de
renvoyer les résultats (par TCP/IP ou autre) sous une forme quelconque
(en XML
par exemple, ça marche bien). Il suffit alors de fournir à l'application
cliente
les API nécessaires pour se connecter au serveur, passer les requêtes et
récupérer
les résultats. J'ai fait cela une fois car les contraintes du projet m'y
obligeait.
Pas très simple, pas si dur non plus une fois le modèle bien fait.

3 pistes à explorer, donc!

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
pierre.rivet
Merci de votre réponse,

malheureusement, le lien que vous m'indiquez est "mort", pour je ne sais
quelle raison....
Je serais tenté par ce que vous appelez la 3ème voie, mais je suis "sec".
Dans l'application à laquelle je pense, j'ai des tas de requêtes....
Comment envoyer une requête au serveur ?
Peut-être un petit exemple de code si vous avez encore des traces ?

Merci encore,

Pierre


"Jean-Marc" a écrit dans le message de news:
43b80ebe$0$652$
"pierre.rivet" a écrit dans le message de
news:43b78935$0$19691$
Bonjour,

Est-il possible d'utiliser VB6 avec la base de données sur Internet ,


par
exemple, sur un site d'un particulier qui souhaiterait utiliser un


logiciel
un réseau à partir de deux endroits différents.

Quand je rajoute une ADODC dans une feuille, j'ai le chemin de la base


de
données: C:Program FilesBase.mdb (par exemple)
Pourrait on avoir un chemin avec ftp quelque chose .....

Merci, et bonne année à tous,



Hello,

non, on ne peut pas, en tout cas pas comme ça. On peut en revanche le
faire avec ASP, voir
par exemple un petit tutorial:
http://www.asp-magazine.com/aspressources/articles/asp/base_de_donnees/

On peut aussi utiliser une base distante directement depuis une appli
VB6, mais
pas une base Access. Il faut utiliser un vrai serveur de base de données
comme
Oracle ou DB2 (peut être aussi MySQL et SQL Server, mais je ne suis pas
compétent
pour ces 2 dernières).

Enfin, 3eme voie, on peut placer sa base access sur une machine dédiée
et écrire
un petit serveur dont le boulot est de résupérer les requêtes des
clients et de
renvoyer les résultats (par TCP/IP ou autre) sous une forme quelconque
(en XML
par exemple, ça marche bien). Il suffit alors de fournir à l'application
cliente
les API nécessaires pour se connecter au serveur, passer les requêtes et
récupérer
les résultats. J'ai fait cela une fois car les contraintes du projet m'y
obligeait.
Pas très simple, pas si dur non plus une fois le modèle bien fait.

3 pistes à explorer, donc!

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



Avatar
Clive Lumb
> Il faut utiliser un vrai serveur de base de
données comme
Oracle ou DB2 (peut être aussi MySQL et SQL Server, mais je ne suis
pas compétent
pour ces 2 dernières).



Cela marche très bien avec MySQL - il faut le MyODBC wrapper/dll de
http://dev.mysql.com/downloads/connector/odbc/3.51.html

Par contre, un hic (et un gros) ici en France est que les bases de données
MySQL de Proxad (Free) ne sont pas accessibles par ce méthode (au moins la
dernière fois que j'ai regardé). Donc il faut trouver un hébergeur
performant qui le permet.

De même, trouver un hébergeur ASP.NET qui ne coute pas les yeux de la tête -
et qui est performant - n'est pas une mince affaire.

Cela dit, si l'appli est pour un usage par un nombre restreint de personnes
on pourrait l'héberger sur un PC en ADSL (en IP fixe de préférence), soit en
ASP.NET (il faut Win 2000 serveur pour avoir un IIS complet) soit en MySQL
(voir easyPHP pour Windows par exemple).


Clive
Avatar
Jean-Marc
Re,

je viens de retester le lien, il fontionne bien, en tout cas chez moi.
Je le recolle ici avec 2 autres, par acquis de conscience:
http://www.asp-magazine.com/aspressources/articles/asp/base_de_donnees/
et
http://www.asp-magazine.com/fr/asp/exemples/
et
http://www.asp-magazine.com/aspressources/fiches/F626.asp

Pour la 3ème voie, je serais heureux de vous aider, mais ceci fait
partie d'un gros projet, assez complexe. Il faudrait pas mal de temps
pour extraire juste la partie qui vous intéresserait. En revanche, je
peux expliquer la méthode générale et essayer de faire un mini exemple.
Je ne peut rien promettre cependant car ça demande quand même un peu de
temps.

Voici toujours l'explication du principe. C'est volontairement très
simplifié, et en particulier je passe ici sous silence les trucs joyeux
du genre accès concurrents, interlocks, etc...

Le principe général
================== Prérequis
---------
Il vous faut installer une machine dédiée, qui va servir de serveur de
données. Cette machine devra être connectée à Internet en permanence,
afin que la base soit toujours disponible. Il faudra également qu'elle
ait une IP fixe, sinon il faudra utiliser un service du type DynDns,
qui permet (gratuitement) de faire pointer en permanence un nom de
domaine vers une IP dynamique.
Voir le site de dyndns: http://www.dyndns.com/
J'utilise leur service pour mon serveur HTTP, ça fonctionne très bien.

Principe
--------

Les échanges clients/serveur se font en TCP/IP, avec des sockets
classiques (Winsocks et/ou APIs).


Sur la machine serveur, se trouve la DB et une application serveur.
Cette application se met à l'écoute sur un port donné et traite les
requêtes des clients. Les clients envoient leurs requêtes sous une
forme déterminée, par exemple comme ceci:
(exemple simplifié mais possible)

<message>
<demandeur>TOTO</demandeur>
<type>requete</type>
<donnees>SELECT NOM, PRENOM FROM EMPLOYES WHERE ID LIKE '123%'
</donnees>
</message>

Le serveur reçoit cela, fait les éventuels vérifications de sécurité,
etc, puis il exécute la requête sur la base de donnée (qui pour lui est
locale, pas de soucis). Puis il formalise la réponse pour le client,
par exemple comme cela:

(exemple simplifié mais possible)

<message>
<type>reponse</type>
<donnees>
<enregistrements>
<enregistrement id="1">
<NOM>DUPONT</NOM>
<PRENOM>JACQUES</PRENOM>
</enregistrement>
<enregistrement id="2">
<NOM>DURAND</NOM>
<PRENOM>PIERRE</PRENOM>
</enregistrement>
</enregistrements>
</donnee>
</message>

Le client n'a plus qu'à décoder cela et le tour est joué. Note: j'ai
utilisé ici du XML parce que c'est commode, mais on peut utiliser le
formalisme de son choix (il y a des gens à qui XML donne des boutons).

Adaptation d'une application existante
--------------------------------------
Evidemment, ca impose de réécrire les éventuels traitements que l'on
faisait avec l'utilisation directe des recordsets mais si l'application
est bien écrite et bien modulaire, ce ne doit pas être un trop gros
boulot.

Plus ennuyeux, si l'application utilise des controles liés à la base,
Genre les TextBox liés ou des DbGrid ou ce genre de choses, la il faut
recoder pour faire une gestion manuelle.



Conclusion
----------
Si l'application n'utilise pas trop de controles liés et si elle est
suffisamment modulaire, ça se fait encore assez bien. La partie pure
Client/Serveur est sans difficultés. Après, l'idée est de développer
des API suffisament souples pour que pour le programmeur, l'utilisation
soit aussi proche que possible de celle d'un classique recordse, du
genre connect, close, Count, MoveFirst, MoveNext, EOF, etc. Ainsi, le
travail d'adaptation devrait être limité.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;







"pierre.rivet" a écrit dans le message de
news:43b813bf$0$20184$
Merci de votre réponse,

malheureusement, le lien que vous m'indiquez est "mort", pour je ne


sais
quelle raison....
Je serais tenté par ce que vous appelez la 3ème voie, mais je suis


"sec".
Dans l'application à laquelle je pense, j'ai des tas de requêtes....
Comment envoyer une requête au serveur ?
Peut-être un petit exemple de code si vous avez encore des traces ?

Merci encore,

Pierre


"Jean-Marc" a écrit dans le message de


news:
43b80ebe$0$652$
> "pierre.rivet" a écrit dans le message de
> news:43b78935$0$19691$
>> Bonjour,
>>
>> Est-il possible d'utiliser VB6 avec la base de données sur Internet


,
> par
>> exemple, sur un site d'un particulier qui souhaiterait utiliser un
> logiciel
>> un réseau à partir de deux endroits différents.
>>
>> Quand je rajoute une ADODC dans une feuille, j'ai le chemin de la


base
> de
>> données: C:Program FilesBase.mdb (par exemple)
>> Pourrait on avoir un chemin avec ftp quelque chose .....
>>
>> Merci, et bonne année à tous,
>
> Hello,
>
> non, on ne peut pas, en tout cas pas comme ça. On peut en revanche


le
> faire avec ASP, voir
> par exemple un petit tutorial:
>


http://www.asp-magazine.com/aspressources/articles/asp/base_de_donnees/
>
> On peut aussi utiliser une base distante directement depuis une


appli
> VB6, mais
> pas une base Access. Il faut utiliser un vrai serveur de base de


données
> comme
> Oracle ou DB2 (peut être aussi MySQL et SQL Server, mais je ne suis


pas
> compétent
> pour ces 2 dernières).
>
> Enfin, 3eme voie, on peut placer sa base access sur une machine


dédiée
> et écrire
> un petit serveur dont le boulot est de résupérer les requêtes des
> clients et de
> renvoyer les résultats (par TCP/IP ou autre) sous une forme


quelconque
> (en XML
> par exemple, ça marche bien). Il suffit alors de fournir à


l'application
> cliente
> les API nécessaires pour se connecter au serveur, passer les


requêtes et
> récupérer
> les résultats. J'ai fait cela une fois car les contraintes du projet


m'y
> obligeait.
> Pas très simple, pas si dur non plus une fois le modèle bien fait.
>
> 3 pistes à explorer, donc!
>
> --
> Jean-marc
> Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
> "There are only 10 kind of people
> those who understand binary and those who don't."
> mailto: remove '_no_spam_' ;
>




Avatar
pierre.rivet
Bonjour Jean Marc, et merci de tous vos efforts,

Malheureusement, je crois que je vais laisser tomber pour l'instant, et ceci
pour de multiples raisons (les lignes sans >)

Je le recolle ici avec 2 autres, par acquis de conscience:
http://www.asp-magazine.com/aspressources/articles/asp/base_de_donnees/
et
http://www.asp-magazine.com/fr/asp/exemples/
et
http://www.asp-magazine.com/aspressources/fiches/F626.asp



Je réussis bien en effet à ouvrir ces pages, mais sur la page F626, il y a
une inscription très nette: du style "les liens de cette page sont
invalides" ou quelque chose comme cela.
Quand je clique sur le lien "voir le site", je suis renvoyé à Wanadoo via un
message d'erreur

Voici toujours l'explication du principe. C'est volontairement très
simplifié, et en particulier je passe ici sous silence les trucs joyeux
du genre accès concurrents, interlocks, etc...

Le principe général
================== > Prérequis
---------
Il vous faut installer une machine dédiée, qui va servir de serveur de
données. Cette machine devra être connectée à Internet en permanence,
afin que la base soit toujours disponible. Il faudra également qu'elle
ait une IP fixe, sinon il faudra utiliser un service du type DynDns,
qui permet (gratuitement) de faire pointer en permanence un nom de
domaine vers une IP dynamique.



Pour moi, ce serait possible, car j'ai effectivement un nom de domaine, mais
la personne qui m'a demandé cela n'a pas de domaine !



Principe
--------

Les échanges clients/serveur se font en TCP/IP, avec des sockets
classiques (Winsocks et/ou APIs).

Sur la machine serveur, se trouve la DB et une application serveur.
Cette application se met à l'écoute sur un port donné et traite les
requêtes des clients.
<message>
<demandeur>TOTO</demandeur>
<type>requete</type>
<donnees>SELECT NOM, PRENOM FROM EMPLOYES WHERE ID LIKE '123%'
</donnees>
</message>



J'ai fait des essais avec des Winsocks. c'est bien si on envoie une seule
information, mais si on envoie par exemple tous les éléments d'une fiche
patient,avec une quarantaine de champs, dont au moins 15 champs mémo, c'est
une autre paire de manches !!

Le serveur reçoit cela, fait les éventuels vérifications de sécurité,
etc, puis il exécute la requête sur la base de donnée (qui pour lui est
locale, pas de soucis). Puis il formalise la réponse pour le client,
par exemple comme cela:

(exemple simplifié mais possible)

<message>
<type>reponse</type>
<donnees>
<enregistrements>
<enregistrement id="1">
<NOM>DUPONT</NOM>
<PRENOM>JACQUES</PRENOM>
</enregistrement>
<enregistrement id="2">
<NOM>DURAND</NOM>
<PRENOM>PIERRE</PRENOM>
</enregistrement>
</enregistrements>
</donnee>
</message>

Le client n'a plus qu'à décoder cela et le tour est joué. Note: j'ai
utilisé ici du XML parce que c'est commode, mais on peut utiliser le
formalisme de son choix (il y a des gens à qui XML donne des boutons).



XML: encore un nouveau langage ?

Adaptation d'une application existante
--------------------------------------
Evidemment, ca impose de réécrire les éventuels traitements que l'on
faisait avec l'utilisation directe des recordsets mais si l'application
est bien écrite et bien modulaire, ce ne doit pas être un trop gros
boulot.



Mon application doit comporter une quarantaine de pages *.frm ..... et
l'exécutable fait environ 9 Mo

Plus ennuyeux, si l'application utilise des controles liés à la base,
Genre les TextBox liés ou des DbGrid ou ce genre de choses, là il faut
recoder pour faire une gestion manuelle.



Quasiment à chaque page j'ai un ou plusieurs contrôles Adodc avec un dbGrid
associé...
En outre, les requêtes sont un peu plus compliquées. Par exemple, pour une
facture, je fais appel à au moins 4 tables: Patients, Praticiens,
Consultations, Règlements, etc....


Conclusion
----------


Je crois malheureusement qu'elle est claire pour moi.....

--


Pierre
Avatar
Jean-Marc
Hello Pierre,

je réponds aussi entre les lignes:

Je réussis bien en effet à ouvrir ces pages, mais sur la page F626, il


y a
une inscription très nette: du style "les liens de cette page sont
invalides" ou quelque chose comme cela.
Quand je clique sur le lien "voir le site", je suis renvoyé à Wanadoo


via un
message d'erreur



Ok, mais en googlant un peu, tu trouverais d'autres liens vers asp. Ceci
dit,
vu la suite, je ne pense pas que ce soit une solution à court terme.

J'ai fait des essais avec des Winsocks. c'est bien si on envoie une


seule
information, mais si on envoie par exemple tous les éléments d'une


fiche
patient,avec une quarantaine de champs, dont au moins 15 champs mémo,


c'est
une autre paire de manches !!



Non non, ça ce n'est pas un problème. Avec Rabbit, qui utilise un
mélange de
Winsocks et d'APIs, je peux servir des pages de plusiers megas sans
aucun
problème. La taille de ce que tu dois envoyer n'est pas un souci du
tout.

XML: encore un nouveau langage ?



Non, c'est juste un formalisme d'échange de données. Voir Google. On
peut
envoyer les requetes et les resultats en choisissant sa présentation,
XML
n'est qu'une façon de faire.

Mon application doit comporter une quarantaine de pages *.frm ..... et
l'exécutable fait environ 9 Mo



Oui.

Quasiment à chaque page j'ai un ou plusieurs contrôles Adodc avec un


dbGrid
associé...



Ca c'est un énorme problème. Sans solutions à part réécriture complète.

En outre, les requêtes sont un peu plus compliquées. Par exemple, pour


une
facture, je fais appel à au moins 4 tables: Patients, Praticiens,
Consultations, Règlements, etc....



Ca ce n'est pas un problème du tout. Un serveur de base de données peut
traiter n'importe quel requête et retourner n'importe quels résultats.
Comme
on passe les queries au moteur Jet d'Access, il n'y a aucune limite à la
complexité des requêtes.


Le GROS problème, c'est les dbGrid; une illustration parfaite des soucis
que l'on rencontre tot ou tard quand l'interface est mélangée avec le
fonctionnel. Tu aurais fait une gestion manuelle (MsFlexGrid rempli à la
main depuis ta source de données, à coup de boucles dans les recorset
et dans les champs), le portage aurait été aisé. Evidemmment, c'est 1000
fois
plus embêtant à faire que d'utiliser le sympathique dbGrid :-)

En cela, les controles du genre dbGrid et autres (pourtant si pratiques)
sont
un vrai piège.


Note: comme ce problème m'a amusé, j'ai modifié Rabbit pour qu'il puisse
servir
de serveur de base de données. Mes premiers essais sont concluants, je
posterais
qq choses à ce sujet dans les jours à venir! Je ne pense cependant pas
que ce soit
une solution pour ton problème, à cause de l'interface.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;