Page 1 sur 1
Ouverture db impossible (réseau)
Publié : mer. 05/avr./2017 20:33
par omega
Bonjour à tous,
J'ai 2 pc installés dans le même bureau (un espace de 2 mètres seulement les sépare).
Au niveau du PC N°1:
J'ai un dossier partagé nommé Data qui contient une base de données nommée fiche.db, le lecteur réseau qui désigne ce partage est z:
Au niveau du PC N°2:
J'ai un programme (test.pb) qui devrait utiliser la base de données fiche.db qui se trouve dans le dossier partagé (sur pc1)
Le problème, c'est que je reçois un message d'erreur indiquant que
Ouverture impossible de la base data\fiche.db
Notez que le chemin est récupéré sur un fichier texte nommé fpath.txt.
Où se trouve la source de l'erreur ??
Merci de votre aide
Code : Tout sélectionner
Global Chemin$, Database, Query$, Result
If ReadFile(0, "fpath.txt")
chemin$=ReadString(0)
CloseFile(0)
EndIf
UseSQLiteDatabase()
Dbs$ = chemin$ + "\fiche.db"
If Not OpenDatabase(0, Dbs$, "", "")
MessageRequester("Erreur", "Ouverture " + Dbs$ + " impossible!")
End
EndIf
Re: Ouverture db impossible (réseau)
Publié : mer. 05/avr./2017 22:25
par Mindphazer
Et si tu essaies d'ouvrir ta base de données avec le chemin réseau complet, sans passer par le contenu de ton fichier "fpath.txt", ça donne quoi ?
Re: Ouverture db impossible (réseau)
Publié : mer. 05/avr./2017 23:16
par case
que dit DatabaseError() ?
Re: Ouverture db impossible (réseau)
Publié : jeu. 06/avr./2017 6:11
par Marc56
Quel type de base de données ?
Si c'est une base SQLite, elle est multi-utilisateurs; mais en mode écriture, c'est la totalité de la base qui est verrouillée le temps de l'écriture et non pas juste l'enregistrement, ou le champs concerné.
PS. Préférer PostgreSQL pour une base réseau multiutilisateurs, on n'est pas lié au partage réseau Windows et PB gère nativement la connexion à cette base (sans passer par ODBC)

Re: Ouverture db impossible (réseau)
Publié : jeu. 06/avr./2017 18:18
par omega
Et si tu essaies d'ouvrir ta base de données avec le chemin réseau complet, sans passer par le contenu de ton fichier "fpath.txt", ça donne quoi ?
Normalement, fpath.txt contient z: qui est l'équivalent de : \\MonPc1\Data, je n'ai pas encore essayé d'ouvrir ma base avec le chemin complet du réseau..
que dit DatabaseError() ?
Quelque chose comme : fichier introuvable
Quel type de base de données ?
format Sqlite, nom de la base: fiche.db, chemin complet: \\MonPc1\Data\fiche.db ( \\MonPc1\Data correspond au lecteur réseau z:)
Re: Ouverture db impossible (réseau)
Publié : lun. 10/avr./2017 17:09
par boby
La règle N°1 d'une base SQL : Ca ne s'ouvre QU'EN local !!! Simple question de sécurité de base...
Si ton client doit avoir besoin d'accéder à ta base SQL se trouvant sur un autre PC, cet autre PC est un serveur qui exécutera la requête demandé en local puis enverras le résultat au PC qui le lui a demandé.
Jamais de la vie on se connecte à une base SQL depuis l'extérieur ! (Oui SQLLite le permet mais c'est pas une raison pour le faire !!!)
Re: Ouverture db impossible (réseau)
Publié : lun. 10/avr./2017 17:22
par falsam
Voila un sujet qui as déja abordé en 2014 Omega
Je t'avais répondu que tu pouvais utiliser une base de données PostgreSQL au lieu de SQLite.
Exemple avec ce code qui va consulter une table jeux et lister le contenu.
Code : Tout sélectionner
UsePostgreSQLDatabase()
Enumeration
#Database
EndEnumeration
Global ReqSql.s, Buffer.s
;Connection à la base de données PostgreSQL
If OpenDatabase(#Database, "host=postgresql1.alwaysdata.com port=5432 dbname=falsam_bd01", "falsam_01", "purebasicdemo", #PB_Database_PostgreSQL)
Debug "Connected to PostgreSQL"
;Execution d'une requête de sélection
ReqSql="select * from jeux order by annee asc"
DatabaseQuery(#Database, ReqSql)
;Affichage du résultat
If DatabaseQuery(#Database, ReqSql)
While NextDatabaseRow(#Database)
Buffer = GetDatabaseString(#Database, 1) ; Titre du jeu
Buffer + " (" + GetDatabaseString(#Database, 2) ; Editeur
Buffer + " - " + GetDatabaseLong(#Database, 3) + ")" ;Année
Debug Buffer
Wend
EndIf
;Fermeture de la base de données
CloseDatabase(#Database)
Else
Debug "Connection failed: "+DatabaseError()
EndIf
Le debug devrait donnes ce résultat.
Connected to PostgreSQL
Duke Nukem (3D Realms - 1991)
Doom (id Software - 1993)
World of Warcraft (Blizzard Entertainment - 1994)
Blood (GT Interactive - 1997)
Age of Empires (Microsoft - 1997)
Re: Ouverture db impossible (réseau)
Publié : lun. 10/avr./2017 20:53
par omega
Pourtant, j'ai déjà utilisé cette même méthode dans d'autres logiciels et ça marche très bien. Bon, il se n'agit pas de lecture-écriture en même temps sur 2 pc différents, non, ces opérations je les gère à ma façon, le problème réside uniquement au niveau de l'ouverture de la base de données qui pourtant marche bien sur mes anciens logiciels...
Je ne comprends pas pourquoi ça ne marche pas aujourd'hui...
Re: Ouverture db impossible (réseau)
Publié : mar. 11/avr./2017 6:14
par Marc56
Partage de dossier simple ou partage client/serveur ?
Est-ce que ça marche sur le PC qui héberge la base ?
Si oui, est-ce que les sécurités ET les permissions sont bien réglées sur le dossier ET le fichier base ?
(Pour les débutants: Sécurités = droits locaux; Permissions = Droits de partages. En réseau les deux doivent correspondre. Ex: si Sécurité: lecture/écriture mais permission: lecture, alors pas de possibilité d'écrite depuis poste client)
Mais, même si en théorie, SQLite en réseau ça peut marcher, c'est hautement déconseillé.
https://sqlite.org/whentouse.html
Client/Server Applications
If there are many client programs sending SQL to the same database over a network, then use a client/server database engine instead of SQLite. SQLite will work over a network filesystem, but because of the latency associated with most network filesystems, performance will not be great. Also, file locking logic is buggy in many network filesystem implementations (on both Unix and Windows). If file locking does not work correctly, two or more clients might try to modify the same part of the same database at the same time, resulting in corruption. Because this problem results from bugs in the underlying filesystem implementation, there is nothing SQLite can do to prevent it.
A good rule of thumb is to avoid using SQLite in situations where the same database will be accessed directly (without an intervening application server) and simultaneously from many computers over a network.
