Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1972 connectés 

  FORUM HardWare.fr
  Programmation

  [db] question sur le fonctionnement des bases de données

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[db] question sur le fonctionnement des bases de données

n°47283
la viper
Posté le 17-07-2001 à 16:14:58  profilanswer
 

je voudrais savoir si access garde en memoire les precedentes requetes qui ont ete faite ainsi que les resultats de ces requetes.
 
si oui, comment le forcer a ne pas utiliser cette memoire cache?
en d'autre terme, j'utilise une base de données access avec ADO sous visual c++ et quand j'ajoute un element puis que je fais une requete pour recuperer tous les element de ma base, ma base me renvoie des elements obsoletes, si je fais une deuxieme fois l'operation, la base me renvoie les bonnes valeurs ..
 
si qq un à une solution je suis preneur ..
merci d'avance

mood
Publicité
Posté le 17-07-2001 à 16:14:58  profilanswer
 

n°47333
la viper
Posté le 17-07-2001 à 17:34:21  profilanswer
 

up

n°47344
jupiler
Un cousin...
Posté le 17-07-2001 à 18:02:49  profilanswer
 

une requete est conservée afin de pouvoir
la réexécuter rapidement
 
mais si les données changent, le résultat de la requête doit changer
 
est-tu sur d'avoir fait un Commit après ta mise à jour?


---------------
Je ne suis ni pour, ni contre, bien au contraire  
n°47572
la viper
Posté le 18-07-2001 à 14:58:59  profilanswer
 

c koi cette instruction ....??

n°47585
instantdha​rma
Ailleurs c'est ici
Posté le 18-07-2001 à 15:41:55  profilanswer
 

Salut !
une idée en passant... t'as vérifié la valeur du paramètre autocommit dans le profil de conenxion à ta base ?


---------------
di. / www.diredaredare.org - Ailes de la ville
n°47669
la viper
Posté le 18-07-2001 à 18:30:29  profilanswer
 

voici comment je me connecte :
 
HRESULT CConnectID::ConnectToDB(CString Path)
{
 // Chaine de Connexion
 HRESULT Result;
 CString tmp;
 tmp = IDS_STRCONNECTION;
 str_Connection.Format("%s%s%s" ,tmp
         ,Path
         ,";" );
 // -----------------------------
 // Tentative de connexion
 try{
  // Connection à la source de données
  Result = pConn->Open( _bstr_t(str_Connection),"","",NULL);
 }
 // -----------------------------
 // Traitement des erreurs
 catch(_com_error &err){
  // Affichage du message d' erreur
  CATCH_COM_ERROR(err);
 }
 return Result;
}

n°47670
la viper
Posté le 18-07-2001 à 18:31:38  profilanswer
 

il me manque une methode à un endroit precis ???

n°47736
instantdha​rma
Ailleurs c'est ici
Posté le 19-07-2001 à 08:29:50  profilanswer
 

Citation :


est-tu sur d'avoir fait un Commit après ta mise à jour?  
 
la viper c koi cette instruction ....??  

 
 
On dirait que tu connais pas les transactions, & il semble que ton pb soit un pb de transaction...
Une transaction, c'est une unité de mise à jour dans la base. Elle commence par une instruction du type

Code :
  1. begin tran


Les maj sont validées par une commande  

Code :
  1. commit


ou annulée par une commande

Code :
  1. rollback

.
 
L'idée est qu'il y a une situation avant maj, une situation après, mais pas d'état intermédiaire, et ce pour tous les utilisateurs de la base.
 
Donc, situation :
1. tu fais un update quelconque ds la base
2. tu refais un select & tu obtiens les données avant mise à jour.
 
Première possiblité : tu relis pas, ou bien tu relis & tu affiches pas les bonnes données ; à vérifier dans ton code C ; peu probable.
 
Seconde possibilité : tu as pas terminé de transaction après ton update & tu es à un niveau de transaction 2 ou 3 : tant que ta transaction est pas terminée, tu relis les données non modifiées.
Dans ce cas, il te faut valider une transaction par un commit après ton update (le + probable) ; si tu gères déjà tes transactions & que tu as toujours le problème, il se peut que dans les paramètres de connexion à ta base, tu aies un autocommit à false. Si autocommit est à false, un commit explicite doit être effectué pour valider les majs (- probable).
 
Mais avant tout, pour que ton appli tienne la route, il te faut définir tes unités de maj, & donc tes transactions...


---------------
di. / www.diredaredare.org - Ailes de la ville
n°47773
la viper
Posté le 19-07-2001 à 10:29:30  profilanswer
 

okk .. merci .. je crois bien que le probleme vient de la (seconde possibilité)
 
qqu'un aurait il un bout de code à me montrer sur ce type de transaction ??
 
merci d'avance

n°47805
instantdha​rma
Ailleurs c'est ici
Posté le 19-07-2001 à 11:21:36  profilanswer
 

Ben, la syntaxe dépend de ton sgbd...
Exemple sur sybase sql server :

Code :
  1. begin tran
  2. update ma_table
  3. set ma_col = 12
  4. where ma_cle = "tagadaTsoinTsoin"
  5. if @@error = 0
  6.   commit
  7. else
  8.   rollback


 
En annexe, les notes que j'ai compilées concernant les transaction et les niveaux d'isolement (isolation level) :
 :sol:  
Les niveaux d’isolement ANSI
Le standard ANSI SQl92 définit quatre niveaux d’isolement pour les transactions. Chacun de ces niveaux établit la liste des actions qui ne sont pas permises durant des transactions concurrentes. Chaque niveau inclut les restrictions des niveaux précédents :
 - Le niveau 0 permet a lecture de données modifiées. Il empêche que d’autres transactions ne changent des données qui ont déjà été modifiées par une transaction non encore terminée : les autres transactions sont bloquées tant que dure la transaction. Ces autres transactions peuvent cependant toujours lire les données, ce qui provoque des lectures sales (dirty reads).
 - Le niveau 1 empêche les lectures sales. De telles lectures se produisent lorsqu’une transaction modifie une ligne, puis qu’une seconde transaction lit cette ligne avant que la première transaction n’ait validé ses modifications. Si la première transaction est annulée, la donnée lue par la seconde transaction n’est plus correcte. Le niveau 1 garantit qu’une valeur lue à un instant donné dans une transaction est une valeur réelle qui ne peut être annulée.
 - Le niveau 2 empêche les lectures non répétables. De telles lectures se produisent lorsqu’une transaction lit une ligne et qu’une seconde transaction modifie cette ligne. Si la seconde transaction est validée, les lectures effectuées par la première transaction après cette validation donnent un résultat différents de celui de la lecture initiale. Le niveau 2 garantit que deux lectures de la même ligne au sein d’une transaction renvoient les mêmes données.
- Le niveau 3 empêche les lignes fantômes. Les fantômes se produisent lorsqu’une transaction lit un ensemble de lignes répondant à un critère de sélection, puis qu’une seconde transaction modifie les données. Si la première transaction réitère la lecture avec les mêmes critères, elle obtient un ensemble de lignes différent du premier. Le niveau 3 garantit que deux lectures d’un ensemble de lignes avec un critère de sélection au sein d’une transactions renvoient les mêmes ensembles de lignes. :sol:


---------------
di. / www.diredaredare.org - Ailes de la ville
mood
Publicité
Posté le 19-07-2001 à 11:21:36  profilanswer
 

n°47814
instantdha​rma
Ailleurs c'est ici
Posté le 19-07-2001 à 11:49:53  profilanswer
 

Quelques précisions supplémentaires :
 
Le niveau d'isolement par défaut de ton sgbd est normalement un paramètre fourni lors de la connexion.
Il doit exister un niveau d'isolement par défaut, & un niveau d'isolement associé aux instructions

Code :
  1. begin tran, commit, rolback

.


---------------
di. / www.diredaredare.org - Ailes de la ville
n°47836
la viper
Posté le 19-07-2001 à 13:10:10  profilanswer
 

ok merci je regarde ca :)
merci de ton aide ... je te tiens au courant

n°47904
la viper
Posté le 19-07-2001 à 17:14:16  profilanswer
 

up
 
j'ai encore besoin d'aide :(
il me faudrait un bout de code pour la connexion avec ADO sous VC++ ..


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [db] question sur le fonctionnement des bases de données

 

Sujets relatifs
[HMTL/CSS] Ma dernière question en CSS : Choisir un css par javascript[HTML / PHP] pb de formulaire /!\ question aux pros !
[xml] - XSL , asp et récupération de donnéesPour les pros de la modélisation de base de données!
[XML] - récupérations de donnéesVB6 : petite questions ; v c++ : ou peut on apprendre les bases ?
une question sur le htaccess[MySQL] Jointure entre 2 tbl de bases différentes mé sur le mem server
Question assembleur[C++] Comment lire les données d'une image ?
Plus de sujets relatifs à : [db] question sur le fonctionnement des bases de données


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR