OVH Cloud OVH Cloud

manipulation sur Recordset

5 réponses
Avatar
Eric
bonjour
voila mon petit problème, je voudrais faire des suppressions d'enreg sur un
recordset après avoir effectué une premiere sélection de données. exemple :

rstcommande = select * from Commande
-> jusque là pas de problème. je voudrais maintenant savoir si la commande
est facturée et je dois passer par d'autres tables pour avoir l'info (je ne
peux faire la requete complète pour des questions de temps d'accès)

pour cela je voudrais lire chaque enreg de rstcommande (movenext jusqu'à
eof. pas de prob) sur chaque enreg faire un :
SELECT numfact from facture where rstcommande.numcom = facture.numcom. si
la requete est vide, je voudrais supprimer l'enreg encours du rstcommande.
Après avoir traité toute les commandes, je me retrouverais donc uniquement
avec les commandes facturées.

cela est t'il possible ? peut-on après le eof du rst revenir au debut de
celui-ci est enchainer d'autres manipulations sur le rst lui même.

si vous pouvez m'indiquer quelques lignes de code ça serait sympa.
merci
cordiales salutations

5 réponses

Avatar
Eric
> J'ai pas tout bien compris,
1) avec quel objet d'accès aux données travailles-tu ? (ADO, DAO etc ...)




Effectivement c'est pas simple à expliquer mais dans le principe c'est simple.
je travaille avec ADO

en fait mon but est de savoir si la commande est facturée mais dans la base
odbc dont je dispose, je dois passer par les tables suivantes pour avoir
l'info :
entetecommande -> specifcommande -> entetefacture.
donc si je fais une requete englobant tous les critères, j'arrive sur une
usine à gaz et les temps de reponse sont deplorable.
donc je voudrais :
créer un rst entetecommande (dans lequel je retrouve les commandes)
pour chaque commande, faire une requete pour rechercher
entetefacture.numfact en passant par specifcommande. à ce stade je saurais
si la commande est facturée, si oui je la garde, sinon je la vire du rst en
cours.

voir pour resumer. ma question est : peut on virer des enreg du rst tout en
continuant à lire les enreg suivant de ce meme rst. ne risque t'il pas d'y
avoir des problèmes dans les pointeurs d'enreg ?


2)

SELECT numfact from facture where rstcommande.numcom = facture.numcom. ??
ne serait-ce pas plutôt
SELECT numfact from facture where facture.numcom = rstcommande.numcom



Oui j'ai inversé le critère.



Avatar
Eric a écrit :

bonjour
voila mon petit problème, je voudrais faire des suppressions d'enreg sur un
recordset après avoir effectué une premiere sélection de données. exemple :

rstcommande = select * from Commande
-> jusque là pas de problème. je voudrais maintenant savoir si la commande
est facturée et je dois passer par d'autres tables pour avoir l'info (je ne
peux faire la requete complète pour des questions de temps d'accès)

pour cela je voudrais lire chaque enreg de rstcommande (movenext jusqu'à
eof. pas de prob) sur chaque enreg faire un :
SELECT numfact from facture where rstcommande.numcom = facture.numcom. si
la requete est vide, je voudrais supprimer l'enreg encours du rstcommande.
Après avoir traité toute les commandes, je me retrouverais donc uniquement
avec les commandes facturées.

cela est t'il possible ? peut-on après le eof du rst revenir au debut de
celui-ci est enchainer d'autres manipulations sur le rst lui même.

si vous pouvez m'indiquer quelques lignes de code ça serait sympa.
merci
cordiales salutations




Bonjour,

J'ai pas tout bien compris,
1) avec quel objet d'accès aux données travailles-tu ? (ADO, DAO etc ...)

2)

SELECT numfact from facture where rstcommande.numcom = facture.numcom. ??
ne serait-ce pas plutôt
SELECT numfact from facture where facture.numcom = rstcommande.numcom


peut-on après le eof du rst revenir au debut de
celui-ci est enchainer d'autres manipulations sur le rst lui même.

A priori oui.

A+

Christophe
Avatar
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Eric a écrit :<br>
<blockquote cite=""
type="cite">
<blockquote type="cite">
<pre wrap="">J'ai pas tout bien compris,
1) avec quel objet d'accès aux données travailles-tu ? (ADO, DAO etc ...)

</pre>
</blockquote>
<pre wrap=""><!---->
Effectivement c'est pas simple à expliquer mais dans le principe c'est simple.
je travaille avec ADO

en fait mon but est de savoir si la commande est facturée mais dans la base
odbc dont je dispose, je dois passer par les tables suivantes pour avoir
l'info :
entetecommande -&gt; specifcommande -&gt; entetefacture.
donc si je fais une requete englobant tous les critères, j'arrive sur une
usine à gaz et les temps de reponse sont deplorable.
donc je voudrais :
créer un rst entetecommande (dans lequel je retrouve les commandes)
pour chaque commande, faire une requete pour rechercher
entetefacture.numfact en passant par specifcommande. à ce stade je saurais
si la commande est facturée, si oui je la garde, sinon je la vire du rst en
cours.

voir pour resumer. ma question est : peut on virer des enreg du rst tout en
continuant à lire les enreg suivant de ce meme rst. ne risque t'il pas d'y
avoir des problèmes dans les pointeurs d'enreg ?


</pre>
<blockquote type="cite">
<pre wrap="">2)

SELECT numfact from facture where rstcommande.numcom = facture.numcom. ??
ne serait-ce pas plutôt
SELECT numfact from facture where facture.numcom = rstcommande.numcom

</pre>
</blockquote>
<pre wrap=""><!---->Oui j'ai inversé le critère.
</pre>
<pre wrap=""><!---->
</pre>
</blockquote>
<br>
RE,<br>
<br>
Pour ma part j'utilise DAO donc je suis pas sur à 100% de ma réponse.<br>
Mais après relecture de la MSDN, je pense qu'il n'y a pas de soucis.<br>
Après il te faut savoir si tu es en mise à jour immédiate ou pas.<br>
<br>
De fait quand tu fais un delete sur un recordset, il est marqué comme
étant à supprimer mais il demeure l'enregistrement en cours tant que tu
ne passes pas à l'enregistrement suivant., il devient inaccessible
après.<br>
<br>
Par précaution je procèderais autrement:, création d'un objet<br>
OBJCommande , et de la liste associée.<br>
Cet OBJ à pour propriétés les champs qui t'interressent + 1 champ
boolean: facturee <br>
Je rempli la liste avec la première requête <br>
Je parcours ma liste et pour chaque membre je défini la valeur de
facturee en fonction d'une nouvelle requête<br>
J'envoie une requête de suppression générale de tous les OBJcommande
avec factureeúlse.<br>
<br>
A+<br>
<br>
Christophe<br>
<br>
<br>
<br>
</body>
</html>
Avatar
Eric
Ok je vais essayer cette solution par une commande.

tu devrais essayer de migrer tes applic vers ADO car DAO commence à dater et
microsoft incite à passer sur ADO j'ai eu pas mal de problème avec ODBC via
DAO sur les bases SAGE notamment et avec ADO ça marche tres bien
cordialement

"<pas-despam> @Bwanadoo.fr>" <" a écrit :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Eric a écrit :<br>
<blockquote cite=""
type="cite">
<blockquote type="cite">
<pre wrap="">J'ai pas tout bien compris,
1) avec quel objet d'accès aux données travailles-tu ? (ADO, DAO etc ...)

</pre>
</blockquote>
<pre wrap=""><!---->
Effectivement c'est pas simple à expliquer mais dans le principe c'est simple.
je travaille avec ADO

en fait mon but est de savoir si la commande est facturée mais dans la base
odbc dont je dispose, je dois passer par les tables suivantes pour avoir
l'info :
entetecommande -> specifcommande -> entetefacture.
donc si je fais une requete englobant tous les critères, j'arrive sur une
usine à gaz et les temps de reponse sont deplorable.
donc je voudrais :
créer un rst entetecommande (dans lequel je retrouve les commandes)
pour chaque commande, faire une requete pour rechercher
entetefacture.numfact en passant par specifcommande. à ce stade je saurais
si la commande est facturée, si oui je la garde, sinon je la vire du rst en
cours.

voir pour resumer. ma question est : peut on virer des enreg du rst tout en
continuant à lire les enreg suivant de ce meme rst. ne risque t'il pas d'y
avoir des problèmes dans les pointeurs d'enreg ?


</pre>
<blockquote type="cite">
<pre wrap="">2)

SELECT numfact from facture where rstcommande.numcom = facture.numcom. ??
ne serait-ce pas plutôt
SELECT numfact from facture where facture.numcom = rstcommande.numcom

</pre>
</blockquote>
<pre wrap=""><!---->Oui j'ai inversé le critère.
</pre>
<pre wrap=""><!---->
</pre>
</blockquote>
<br>
RE,<br>
<br>
Pour ma part j'utilise DAO donc je suis pas sur à 100% de ma réponse.<br>
Mais après relecture de la MSDN, je pense qu'il n'y a pas de soucis.<br>
Après il te faut savoir si tu es en mise à jour immédiate ou pas.<br>
<br>
De fait quand tu fais un delete sur un recordset, il est marqué comme
étant à supprimer mais il demeure l'enregistrement en cours tant que tu
ne passes pas à l'enregistrement suivant., il devient inaccessible
après.<br>
<br>
Par précaution je procèderais autrement:, création d'un objet<br>
OBJCommande , et de la liste associée.<br>
Cet OBJ à pour propriétés les champs qui t'interressent + 1 champ
boolean: facturee <br>
Je rempli la liste avec la première requête <br>
Je parcours ma liste et pour chaque membre je défini la valeur de
facturee en fonction d'une nouvelle requête<br>
J'envoie une requête de suppression générale de tous les OBJcommande
avec factureeúlse.<br>
<br>
A+<br>
<br>
Christophe<br>
<br>
<br>
<br>
</body>
</html>



Avatar
Eric a écrit :

Ok je vais essayer cette solution par une commande.

tu devrais essayer de migrer tes applic vers ADO car DAO commence à dater et
microsoft incite à passer sur ADO j'ai eu pas mal de problème avec ODBC via
DAO sur les bases SAGE notamment et avec ADO ça marche tres bien
cordialement






Je sais (MDAC) mais pour mes besoins DAO est très bien et très optimisé,
j'utilise en fait DAO pour créer des fichiers de données qui vont avec
les applis,
c'est donc ACCESS97 et monoutilisateur.

A+

Christophe