Ouverture db impossible (réseau)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Ouverture db impossible (réseau)

Message 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
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
Mindphazer
Messages : 695
Inscription : mer. 24/août/2005 10:42

Re: Ouverture db impossible (réseau)

Message 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 ?
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Ouverture db impossible (réseau)

Message par case »

que dit DatabaseError() ?
ImageImage
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Ouverture db impossible (réseau)

Message 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)

:wink:
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Ouverture db impossible (réseau)

Message 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:)
Win7 (x64) 64 bits Pb 5.72
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: Ouverture db impossible (réseau)

Message 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 !!!)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Ouverture db impossible (réseau)

Message par falsam »

Voila un sujet qui as déja abordé en 2014 Omega :wink:

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)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Ouverture db impossible (réseau)

Message 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...
Win7 (x64) 64 bits Pb 5.72
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Ouverture db impossible (réseau)

Message 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.


:wink:
Répondre