[RESOLU] Question sur OpenDataBase()

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU] Question sur OpenDataBase()

Message par omega »

Bonjour

Je viens de remarquer, ce jour même, quelque chose qui m'a étonné:

J'ai ouvert (par erreur) deux fois la même base de données mais ce qui ma étonné, c'est que le compilateur n'a signalé aucune erreur. Est-ce normal ?

Logiquement, si une base de données est déjà ouverte, on ne peut pas la ré-ouvrir une seconde fois à ce que je sache sinon une erreur sera signalée.

Merci à vous tous
Dernière modification par omega le sam. 19/déc./2015 0:20, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Question sur OpenDataBase()

Message par Ar-S »

omega a écrit : J'ai ouvert (par erreur) deux fois la même base de données mais ce qui ma étonné, c'est que le compilateur n'a signalé aucune erreur. Est-ce normal ?
Je lis dans la doc :
Si une autre base de données a déjà été ouverte sous le même numéro, la base précédement gérée par ce numéro est automatiquement fermée.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Question sur OpenDataBase()

Message par microdevweb »

Il est tout à fait normal de pouvoir ouvrir une database plusieurs fois, cependant il faut utiliser un identifiant différent ou #Pb_Any. Pourquoi?

Exemple tu parcourt une table Sql et dans ton parcourt tu veux faire une autre requete sur par exemple une autre table. La tu doit faire 2 OpenDataBase

Code : Tout sélectionner

db=OpenDatase(Pb_Any,mabase$,"","")
db2=OpenDatase(Pb_Any,mabase$,"","")
 DatabaseQuery(db,requete$)
While NextDatabaseRow(db)
     ; Parcourt d'une autre table
     DatabaseQuery(db2,requete2$)
    If FirstDatabaseRow(db2)
        ;Code
    Endif
Wend
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

(RESOLU)

Message par omega »

Si une autre base de données a déjà été ouverte sous le même numéro, la base précédemment gérée par ce numéro est automatiquement fermée.
Oui, et dire que je lis la doc très souvent, je suis sûr que mes yeux ont déjà parcouru cette phrase car j'ai l'impression que ce n'est pas nouveau pour moi, c'est certainement ma mémoire qui déconne...

Merci à tous et merci à ARS pour sa meilleure réponse.
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Question sur OpenDataBase()

Message par Micoute »

Bonjour à tous,

une base de données peut être ouverte plusieurs fois par un même utilisateur, mais si elle est déjà ouverte elle, se referme avant de se rouvrir.

Elle peut être ouverte par plusieurs utilisateurs, mais pas en même temps, les autres utilisateurs doivent attendre que la base de données soit fermée.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Question sur OpenDataBase()

Message par Marc56 »

Cela dépend aussi de la base de données à laquelle tu accèdes:
  • SQLite est une base de données mono-utilisateur, c'est à dire qu'elle se comporte comme un seul fichier (comme un vulgaire fichier de traitement de texte). Tant qu'un utilisateur est connecté dessus, les autres ne peuvent plus y accéder.
  • PostgreSQL, MySQL et d'autres, sont des bases de données multi-utilisateurs: Plusieurs utilisateurs peuvent y accéder en même temps, mais toujours sous un ID de connexion différent. Le gestionnaire de connexions (postmaster) se charge de gérer les clients et effectue les lectures, écritures et surtout le verrouillage en modification. Le nombre de "portes" étant limité, on a tout intérêt à refermer le connexion le plus vite possible (CloseDatabase()) pour libérer les ressources serveur sans attendre le timout.
Répondre