Comment accéder à une base de données Access distante?

cs_JGD Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 décembre 2012 - 30 août 2012 à 08:45
cs_JGD Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 décembre 2012 - 16 sept. 2012 à 09:34
Bonjour,

Après une journée entière passée à chercher sur les forums, je n'ai pas trouvé de solution à mon problème.
Pour le moment, mon programme accède à une base de données Access 2007 située sur mon poste, mais pour des raisons pratiques et afin que d'autres personnes puissent aussi accéder à cette base de données de chez eux, j'aurais voulu rendre ma base de données accessible à distance par le programme mais je ne trouve pas la solution. J'ai bien réussi à trouver comment ouvrir une base de données Access protégée par un mot de passe, mais je n'ai pas trouvé comment accéder à une base de données située par exemple sur un cloud (type SkyDrive) avec un identifiant et un mot de passe pour se connecter au cloud. Je ne fais pas de fixation sur le cloud, toute autre solution d'accès à distance de ma base de données est la bienvenue.

La solution à mon problème est peut-être très simple, mais étant relativement débutant je suis vraiment perdu.
Merci d'avance pour vos réponses.


GIGADEP

37 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
30 août 2012 à 12:59
Bonjour,

Si tu cherches une base de données multiclient sur réseau, soit tu utilises un partage Windows pour partager ta base de données, soit tu te tournes vers MySql & co pour permettre une meilleure gestion.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
0
cs_JGD Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 décembre 2012
30 août 2012 à 13:52
Merci pour cette réponse rapide.

Je ne m'y connais absolument pas en MySql. Je sais juste que la clé de connexion change: est-ce que ça change quelque chose à la syntaxe de mes requêtes?
Ensuite, je suppose que ma base de données doit être transformée en SQL server par exemple, mais comment se connecter à distance sur cette base de données? Cette base de données doit certainement être déposée sur un serveur. Comment accéder à cette base? Faut-il indiquer l'identifiant et le mot de passe dans la clé de connexion? Si oui, comment?
Je suis vraiment perdu.
Merci de m'aider.

GIGADEP
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 août 2012 à 15:07
Salut

Oui, tes requètes SQL sont compatibles à 90% quelque soit le moteur de base de données. Les Access ou autres mySQL ayant des fonctions propres qui ne seront pas compatibles, mais si tu as fait du SQL pur, pas de souci, juste la chaine de connexion à modifier.

Oui, passer par SQLServer (même Express gratuit) serait une solution, à condition que ton PC soit accessible depuis le Net; cela veut dire configurer des règles NAT dans ton routeur pour orienter les demandes venant de l'extérieur.
Il en sera de même si tu dois héberger un mySQL sur ta machine.

Quant au fichier Access pur, j'ai des doutes sur la "remotabilité".
Si tu conserves le fichier Access, il faudra modifier ses paramètres pour autoriser un accès à plusieurs (par défaut mono-utilisateur)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
30 août 2012 à 16:56
Un fichier Access peut être utilisé par plusieurs users en réseau, mais tu commenceras à avoir des problèmes
à partir du moment où des écritures seront faites dans la base. Il a tendance à locker de trop grandes zones
du fichier, et donc quand on est à plusieurs à éditer des lignes voisines ça commence à déconner. Pour faire
simple, c'est nickel en lecture mais ça s'arrête là.

Dans ton cas, c'est impossible vu la lenteur de ce type de stockage (ça fonctionne encore bien sur un disque réseau,
mais il existe des FAI qui bloquent le port pour des raisons de sécurité...)

Ce que tu peux faire c'est une façade en Access et une base MySQL (ou MSSQL) qui stockera effectivement les données
(tables liées). Le bon côté de cette solution c'est que tu utilises alors des requêtes Access, et c'est lui qui
s'arrangera pour que ça fonctionne avec le serveur. Tu peux ainsi utiliser l'éditeur de requêtes intégré, très pratique
quand tu as par exemple des SQL sur plusieurs tables avec des liaisons parfois tordues
Pour MySQL, il faut juste penser à installer le driver ODBC (dispo sur leur site Web).

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JGD Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 décembre 2012
30 août 2012 à 17:50
Merci à Jack et à ghuysmans99 pour vos réponses.
Je ne sais pas du tout comment faire une façade en Access et une base MySQL comme le suggère ghuysmans99.
Je pense donc m'orienter vers une base SQL déposée chez un FAI.
Première question: quels fournisseurs d'accès permettent cette fonction facilement?
Ensuite, pour transformer ma base Access en SQL, j'utilise l'assistant de migration SQL Server d'Access 2007. Il me demande quel serveur SQL je souhaite utiliser pour cette base de données: Est-ce que je dois mettre l'adresse Internet où sera déposée ma base sur le FAI même si, pour le moment, cette base de données ne s'y trouve pas encore?


GIGADEP
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
30 août 2012 à 20:04
Pour Access en façade et MySQL en serveur :
* Installe MySQL sur une machine
* Fais l'import de ta base Access
* Crée un utilisateur via le Workbench qui a seulement des droits sur cette base
* Installe le connecteur ODBC
* Crée un DSN qui utilise le driver, avec les bonnes infos de connexion
* Dans la liste de tables d'Access, clique droit -> Lier les tables -> Type de fichier : ODBC (tout en bas)
Sélectionne dans Machine data sources le DSN que tu viens de créer. Clique sur Sélectionner tout puis OK.

Ensuite, tu peux faire tes forms/requêtes/états comme d'habitude

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
31 août 2012 à 00:49
Re

A propos de ce que disait Ghuysmans99 sur les lenteurs.
A partir du moment où l'on travaille à plusieurs sur une DB, il faut impérativement utiliser les Transactions (Begin, Commit, Revoke).
De cette manière, les actions sont buffurisées (à partir du BeginTrans) et exécutées toutes en même temps (au moment du CommitTrans), limitant ainsi la période de blocage des tables.

Base de données chez les FAI : Éclaircis ton idée; tu parles de quoi ?
D'héberger la base chez toi ou bien de faire héberger sur les serveur d'un FAI ?
Blocage de port par les FAI : Je ne vois que Free pour faire cela. Chez les autres FAI, l'abonné est maitre de la config de son routeur.
Reste à trouver quels ports sont utilisés.
Voir <ce lien> à propos de SQL Server : ports 1433 TCP, 1434 TCP, 4022 TCP et 135 TCP (à lire, tu n'as pas forcément besoin de tous ces canaux)
<Ce lien> là pour Access.
Pour mySQL, cela semble se limiter au port 3306 - à détailler.

Héberger ta base chez toi pose un petit problème lié au débit montant (chez toi vers l'extérieur) qui ne dépasse guère plus de 100ko/s. Vois si c'est suffisant.
Sinon, moyennant une 50aine d'euros par an, tu peux te créer ton nom de domaine et faire héberger ta base mySQL (plus répandue) chez un hébergeur mutualisé. Par contre, il doit falloir demander l'accès extérieur à la DB qui est fermé par défaut puisque ces bases sont en général utilisées directement par les pages php hébergées aussi.
0
cs_JGD Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 décembre 2012
31 août 2012 à 07:16
Merci encore à tous les deux.
Vos explications deviennent plus techniques (je suis novice en réseau et en SQL) et je n'ai pas compris certains termes (Workbench, DSN) mais je vais faire des recherches.
Concernant les transactions dont parle jack, à quel endroit dois-je les faire apparaître dans ma programmation?
Je pensais faire héberger ma BDD sur les serveurs d'un FAI, mais je suis chez Free et pour le moment je ne peux pas mettre 50 euros pour faire héberger ma base chez un hébergeur mutualisé. Je suppose qu'il n'existe pas de solution gratuite et que l'accès via le cloud n'est pas possible...


GIGADEP
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
31 août 2012 à 09:10
@jack : Le problème c'est qu'Access lui-même dans ses forms ne semble pas utiliser les transactions...
Ce n'est pas la BDD qui est chez le FAI mais tu passes par lui si tu l'héberges chez toi.
Par exemple, en Belgique, Belgacom bloque le port Samba donc on ne peut pas utiliser des partages réseaux à travers le Net.
(raison : au temps des modems, vu que beaucoup n'avaient ni de firewall ni de mdp, tu tapais l'IP et tu "hackais" un PC...)

Pour les transactions, je ne sais pas si tu peux passer par les méthodes de l'objet ADODB.Connection ou si tu es obligé de le faire en SQL...

Workbench = utilitaire fourni par Oracle pour gérer ses serveurs MySQL, créer des schémas de BDD...

DSN = lien qui stocke les infos de connexion, comme ça, dans ta ConnectionString, tu n'as plus que "DSN=tonDSN"
Ca te permet de centraliser les paramètres de connexion et d'avoir un système multi-utilisateurs facile à maintenir :
sinon, tu ne peux plus te contenter de copier le MDB d'un serveur mais tu dois aussi modifier les tables liées vu que
le nom d'utilisateur/mdp est stocké pour chaque table. Absolument ingérable quand tu as plusieurs machines sur un réseau.

Pour gérer facilement les droits dans MySQL avec des groupes (ce qui n'est pas prévu par défaut), tu peux utiliser ce petit outil.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_JGD Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 décembre 2012
31 août 2012 à 10:26
Merci pour ces explications mais je me sens un peu dépassé par tout ça:
- la BDD qui n'est pas chez le FAI mais que j'héberge chez moi: Où doit-elle se trouver exactement?
- le DSN qui stocke les infos de connexion: Où faut-il les stocker?
- l'outil MyGroupManager: qu'est-ce que je dois en faire?
- J'ai essayé de lancer MySQL Server Instance Configuration, mais j'ai une erreur "Can't create Windows service for MySQL. Error 0". J'ai bien indiqué le port 3306 comme vous m'aviez conseillé et j'ai entré un mot de passe mais il me dit que le port est déjà utilisé.
- J'ai trouvé le site suivant qui semble héberger gratuitement les bases MySQL: http://www.db4free.net/. Est-ce que vous connaissez?
Ne faudrait-il pas que je trouve un tutoriel genre "pour les nuls" pour m'aider à débuter dans l'accès à distance d'une base de données afin de ne pas vous solliciter sans arrêt?


GIGADEP
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
31 août 2012 à 11:36
Guillaume : Si si, les transactions fonctionnent très bien.
Je l'applique depuis les versions 97 des DB de Access.
Même si la DB est locale et que tu as 200 requètes d'insertion à faire, par exemple, les transactions font gagner 50% du temps, garanti.
Les transactions s'appliquent sur l'objet connexion, exemple :
With maConnexion
    .BeginTrans
        .Execute "Insert into ..."
        .Execute "Insert into ..."
        .Execute "Insert into ..."
        .Execute "Insert into ..."
    ' Jusque là, aucune insertion n'a encore eu lieu
    .CommitTrans
    ' Les x insertions viennent d'être faites en 1 fois
End With
Comme tu le vois, c'est une option que tu peux facilement mettre en place même après avoir fait ton programme.

Quant à http://www.db4free.net/ ça ne coute rien d'essayer.
Comme énoncé, il semble s'agir d'un serveur dédié aux programmeurs. Si tu t'exprimes un peu en anglais, tu y trouveras surement des infos intéressantes.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
31 août 2012 à 11:37
PS : c'est un exemple VB6 avec ADODB, mais ADO.NET doit avoir les mêmes attributs.
0
cs_JGD Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 décembre 2012
31 août 2012 à 12:14
Ces transactions n'ont-elles un intérêt qu'à partir du moment où on exécute plusieurs requêtes à la suite ou bien est-il préférable de les utiliser dès qu'une seule requête est nécessaire?


GIGADEP
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
31 août 2012 à 17:27
La BDD, si elle est en Access, se trouve dans un fichier normal. Si c'est du MySQL/MSSQL, elle se trouve dans des fichiers
quelque part sur ton DD mais tu n'as pas besoin de le savoir : tout ce que tu en fais de toute façon, c'est des backups.
Des outils existent pour les deux (perso j'utilise mysqldump et l'outil intégré de MSSQL).

MyGroupManager fonctionnait sous MySQL 5.0.51, pas vu que la structure des tables systèmes de MySQL avait changé entre-temps
Donc à moins que tu n'aies cette version du serveur, ça ne fonctionnera pas. Désolé...

On crée les DSN via l'interface qui se trouve dans Panneau de config. -> Outils d'administration -> Gestionnaire ODBC.
Crée-le sous forme de DSN machine ou utilisateur. La différence entre les deux c'est que si tu le définis
au niveau de la machine, tous les utilisateurs du PC y auront accès. Sinon ça s'utilise de la même manière.

Bizarre, ton problème d'install. On en parle ici, pas testé malheureusement vu que je n'ai pas ce problème...

Aucun problème à ce que tu poses tes questions ici
Si tu veux un petit tuto sur l'administration d'un serveur MySQL, il en existe un sur le SdZ.
Pour le SQL lui-même, suffit de chercher un peu sur Google, c'est +- standard sauf quand tu commences
à manipuler des dates, des coordonnées géographiques...


Pour tes transactions, on vit très bien sans quand on utilise MySQL/MSSQL (vu qu'ils gèrent très bien les locks).
Ca devrait aider quand on l'utilise sur une base partagée (et ouverte sur plusieurs postes en même temps)

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_JGD Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 décembre 2012
31 août 2012 à 18:51
Merci ghuysmans99.
Etonnament, je n'arrivais pas à installer MySQL 5.0 ou 5.1, mais en utilisant le tuto que tu m'as joint j'ai réussi à installer MySQL 5.5 sans message d'erreur. Par contre, ensuite le tuto propose une installation avec la console en tapant les commandes à la main, mais ça ne fonctionne pas pour moi, il m'indique que le répertoire n'existe pas. Et enseuite, je n'arrive plus à revenir à une installation sans console.
Je vais regarder tout ce que tu m'as indiqué à tête reposée en espérant enfin réussir à avancer...


GIGADEP
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
1 sept. 2012 à 01:59
Écrase ton installation du serveur et recommence-la graphiquement, c'est 100x plus simple.
Après, tu peux soit installer phpMyAdmin, soit utiliser MySQL Workbench (ce dernier nécessite Java).

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_JGD Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 décembre 2012
1 sept. 2012 à 10:46
Merci. Ça a marché. Je vais regarder à tête reposée phpMyAdmin et MySQL Workbench.


GIGADEP
0
cs_JGD Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 décembre 2012
2 sept. 2012 à 12:31
Je n'ai pas encore étudié dans le détail le problème, mais je pense que je vais être confronté à un autre problème.
J'aurais voulu qu'un utilisateur puisse utiliser une nouvelle base de données à l'emplacement de son choix. Avec Access, je pense qu'en demandant à l'utilisateur les identifiants et mots de passe du FAI, il serait possible de déposer une nouvelle base de données à cet emplacement et en transférant ces données (en crypté) au programme des autres utilisateurs ceux-ci pourraient accéder à cette nouvelle base de données. Mais j'ai l'impression qu'avec MySQL c'est plus compliqué. Chaque personne qui veut créer une base de données doit passer par Workbench ou équivalent, il n'est pas possible de programmer simplement le dépôt et l'accès à une base MySQL chez un FAI?
Pour être plus clair, je veux faire un programme qui permet à des enseigants de faire des exercices stockés dans une BDD et que les élèves puissent y accéder. Il faudrait que chaque nouveau prof puisse créer et déposer sa BDD où il le souhaite. Est-ce faisable?


GIGADEP
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
2 sept. 2012 à 14:24
Non, tu ne dois pas procéder ainsi. Tu dois créer une table qui contient la liste des profs et les exercices sont tous liés à un enseignant. Quand un élève donné veut voir ses exos, il suffit de ne lui présenter que ceux de ses professeur pour sa classe.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_JGD Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 décembre 2012
2 sept. 2012 à 16:22
Oui, sauf que si je veux faire fonctionner ce programme dans 2 établissements différents, il faudra bien 2 bases de données différentes (ne serait-ce que pour des problèmes de responsabilités, un chef d'établissement refusera d'héberger le contenu d'autres établissements dans une même BDD).

Je ne peux pas faire héberger les exercices de tous les établissements scolaires dans une même base (même si pour le moment je n'en suis pas à exporter mon programme dans d'autres établissements).

Ce problème n'est pas une priorité en soi, mais si jamais ça doit me faire entièrement changer ma gestion de la base de données, je préfère le prévoir avant de créer ma base.

GIGADEP
0
Rejoignez-nous