Page 1 sur 1

[RESOLU] Question sur OpenDataBase()

Publié : mar. 15/déc./2015 21:24
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

Re: Question sur OpenDataBase()

Publié : mar. 15/déc./2015 22:45
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.

Re: Question sur OpenDataBase()

Publié : mar. 15/déc./2015 23:08
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

(RESOLU)

Publié : mar. 15/déc./2015 23:32
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.

Re: Question sur OpenDataBase()

Publié : mer. 16/déc./2015 9:38
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.

Re: Question sur OpenDataBase()

Publié : mer. 16/déc./2015 10:06
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.