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
[RESOLU] Question sur OpenDataBase()
[RESOLU] Question sur OpenDataBase()
Dernière modification par omega le sam. 19/déc./2015 0:20, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Re: Question sur OpenDataBase()
Je lis dans la doc :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 ?
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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Question sur OpenDataBase()
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
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
Work at Centre Spatial de Liège
(RESOLU)
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...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.
Merci à tous et merci à ARS pour sa meilleure réponse.
Win7 (x64) 64 bits Pb 5.72
Re: Question sur OpenDataBase()
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.
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 !
Un homme doit être poli, mais il doit aussi être libre !
Re: Question sur OpenDataBase()
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.