begin process at 2012 02 14 12:52:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Base de données

 > 

ADO & DAO

 > 

Travailler en asynchrone avec un recordset ADO


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Travailler en asynchrone avec un recordset ADO

jeudi 21 août 2008 à 14:15:16 | Travailler en asynchrone avec un recordset ADO

deathsender

Bonjour à tous,

J'expérimente actuellement l'ouverture générique (requête et arguments d'ouvertures variables) en asynchrone d'un recordset ADO attaquant une base SQL Server (sous VB6).
Tout fonctionne correctement (l'appli n'est pas suspendue pendant le traitement de la requête et le retour des enregistrements par le serveur), mais il me manque une information importante : le nombre d'enregistrements total retournés par la requête, avant même le chargement des enregistrements du coté client.
En effet, j'avais imaginé pouvoir afficher le pourcentage de récupération des enregistrements, histoire d'assurer un minimum de transparence pour l'utilisateur.
J'ai essayé diverses méthodes, mais aucune ne m'a permit de récupérer la précieuse information, à savoir :
- interrogation de RecordCount au premier évènement FetchProgress => provoque le chargement total du recordset en mode synchrone... (ma foi c'est logique)
- concaténation de "; PRINT @@ROWCOUNT" à la suite de la chaine SQL, dans le but de provoquer une erreur voulue, mais cette erreur ne se produit jamais (d'ailleurs, la concaténation de "; PRINT 1/0" ne provoque aucune erreur non plus... j'en conclu donc que la méthode Open s'arrête au premier lot de la chaine SQL contenant une clause SELECT)
- utilisation de la méthode Execute de l'object Connection en asynchrone, à la place de Open du recordset, d'une part pour tenter d'utiliser l'argument par référence RecordsAffected (ne fonctionne pas); et d'autre part de récupérer @@ROWCOUNT part la concaténation de "; SELECT ROWCOUNT" à la fin de la chaine contenant la requête, mais ça ne marche pas non plus.

J'avoue arriver un peu à court de solutions, et apprécierait grandement vos avis experts
jeudi 21 août 2008 à 14:47:45 | Re : Travailler en asynchrone avec un recordset ADO

LIBRE_MAX

Réponse acceptée !
Salut,
Pourquoi pas  Select COUNT(ClePrimaire) from... 
avant le chargement des enregistrements ?

... Y'en a même qui disent qu'ils l'ont vu voler.
jeudi 21 août 2008 à 14:55:52 | Re : Travailler en asynchrone avec un recordset ADO

deathsender

J'y avais pensé, en effet, mais cette solution n'est pas sans inconvénients :
- on a donc deux requêtes exécutées dans deux lots différents, par conséquent le nombre d'enregistrements comptés peut différer entre les deux résultats (accès concurrentiel oblige).
- dans le cas où l'analyse de la requête par le serveur est assez long, on va donc doubler le temps d'attente du coté de l'application cliente.
jeudi 21 août 2008 à 15:16:58 | Re : Travailler en asynchrone avec un recordset ADO

LIBRE_MAX

oui j' ai compris ton soucis ;
Alors il y' a peut être une solution rocambolesque :-)
Elle consiste à passer ta requete selection comme une requete regroupement sur cle primaire en premier et First pour le reste.
Et en dernier Count(ClePrimaire).
Tu auras ainsi combiné les deux:
Retour des enregistrements et et total des enregistrements.
Si ça ne marche pas, retour à la première solution avec execution de la requete (Count)  tout les n secondes.


... Y'en a même qui disent qu'ils l'ont vu voler.
jeudi 21 août 2008 à 16:06:38 | Re : Travailler en asynchrone avec un recordset ADO

deathsender

Hum... tu m'as l'air au moins aussi tordu que moi ^^
Ton idée est intéressante, mais inapplicable dans mon cas, ma fonction devant rester générique au niveau des requêtes, on a pas forcément de clé primaire (certaines requêtes imbriquées, multi-niveaux (MSDataShape)). Et surtout.. le résultat de la requête doit demeurer conforme à ce qui est demandé par la requête d'origine.
Personnellement, j'avais pensé à un moment faire un INSERT dans une table temporaire pour interroger son count, puis renvoyer son contenu à l'aide d'un SELECT, mais cette voie ressemble plus à une usine à gaz qu'à autre chose.
Tout bien réflechi, ce total que je cherche à récupérer est une information simplement indicative pour afficher un pourcentage d'exécution, et étant donné que la plupart du temps il sera exact en utilisant ta première solution, je pense que je vais l'adopter.
En te remerciant encore de ton aide.. :)


Cette discussion est classée dans : ado, recordset, enregistrements, requête, asynchrone


Répondre à ce message

Sujets en rapport avec ce message

recordset ADO (Nombre total d'enregistrements d'un recordset) ?? [ par steph ] je cherche a connaitre les nombre total d'enregistrements que me renvoi un recordset ADOj'essaye MonRecordset.recordCount mais il me renvois toujour e Suppressions d'enregistrements avec ADO [ par lebalrog ] Salut a tous! Je fais une appli qui gere entre autre un base de donnee access, et je voudrais supprimer des enregistrements (ceux ki deviennent inutil ADO Recordset [ par ricomiracle ] Est il possible de faire une requête sur un objet Recordset?Le recordset est initialisé par une requête sur une base de donnée:Select * from MyTableJe Requête ADO en VBA [ par DevConf ] Bonjour,Je développe actuellement un add-in Outlook communiquant avec une base de données Access.J'ai fait une requête SELECT qui marche très bien.Je VB.Net Ado Requête SQL Problème [ par JeffC1977 ] Salut..J'ai un problème avec un requête simple SQL.. J'utilise VB.Net et ADO.Net.Cette requête fonctionnait correctement jadis et je dois avoir un err Recordset ADO pour MYSQL avec vb6 [ par djtrefle ] Bonjour, je gere une table (qui s'appelle "field") qui contiens les champs suivant : Num ID Field1 Field2 Field3 ... Field20 Ce que je voudrais faire Aide enregistrement [ par marthyly ] Salut à tous,Pouvez-vous m'aider en montrant comment enregistrer les données d'une listview dans une table d'une base de données (Sql Server) voici mo VB.Net Requête SQL pour ADO.Net [ par MagDix ] BonjourJe susi entrain d'essayé de faire une Requête SQL toute simple afin de mettre tout les lignes qui contienne un astérix dans une certain colonne


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales