OVH Cloud OVH Cloud

odbc : row count delete

6 réponses
Avatar
Christian
Bonjour

Je cherche comment récupérer le nombre de lignes "délétées" dans un ordre ExecuteSQL(" DELETE FROM etc") sous MFC
CDatabase connectée sur un client ODBC. Il y a t il un attribut spécifique ODBC ? Base Informix.

Merci

6 réponses

Avatar
Ambassadeur Kosh
"Christian" a écrit dans le message de news:
4030dc1d$0$28144$
Bonjour

Je cherche comment récupérer le nombre de lignes "délétées" dans un ordre


ExecuteSQL(" DELETE FROM etc") sous MFC
CDatabase connectée sur un client ODBC. Il y a t il un attribut spécifique


ODBC ? Base Informix.

dans un CRecordset (ou un QueryDef, je ne sais plus), il y'a un champ qui
donne le nombre de ligne affecté par la derniere opération. à savoir si
c'est la derniere effectuée par l'appli ou la derniere que vous avez demandé
à executer sur le Recordset, ou la derniere executée par un agent quelconque
du systeme d'information, je ne sais pas.

toujours est il que la seule autre façon de faire juste et bien sans le nb
de lignes affectées, c'est une transaction, un count, et un delete en
assumant que count va correspondre exactement à delete. mais bon, avec
DaubéBC, vous êtes pas sorti. la plupart du temps, les drivers supportent
pas les 9/10eme du minimum de ce qu'il faudrait pour avoir de l'ACID.

<troll motivation="les MFC c'est vraiment de la merde">
vous vous en doutez déja peut être, mais SQL-Server et Visual .Net seraient
une vraie réponse à votre question et à toutes celles que vous devez vous
poser 255468768414 fois par jour.
</troll>

voila voila
Avatar
Christian
Je préfèrerais éviter le COUNT + DELETE

Donc à votre avis, rien avec le ExecuteSQL() direct ? Et avec le SKD de l'ODBC dans la couche en dessous ? J'ai
cherché en vain. Mais la doc est assez grosse, j'ai peut être loupé quelque chose.

Sinon c'est trop tard ... c'est du MFC + Informix. Imposé !

Encore merci pour votre réponse rapide.
Avatar
Ambassadeur Kosh
> Je préfèrerais éviter le COUNT + DELETE


comme tout le monde je crois :)

Donc à votre avis, rien avec le ExecuteSQL() direct ?


stop ExecuteSQL, il provient de quelle classe ?
Avatar
Ambassadeur Kosh
bon, dans la CDatabase, il n'y a rien
dans la CDaoDatabase, il y a Execute , et il y'a ce dont je vous parlais :

"Call the GetRecordsAffected member function of the database object to
determine the number of records affected by the most recent Execute call.
For example, GetRecordsAffected returns information about the number of
records deleted, updated, or inserted when executing an action query. The
count returned will not reflect changes in related tables when cascade
updates or deletes are in effect."

mais lachez ça, et passez à ADO. plus personne ne supporte Dao(developpeurs,
applis, microsoft...), et encore moins ODBC. vous allez droit aux emmerdes
si vous prenez ces APIS. ADO, c'est une gentille lib standard (dans le
module MDAC), c'est du COM, c'est gratuit, c'est 10E54646546 fois plus
rapide et fiable, ça gere tous les formats de base (Excel, text, les drivers
ODBC aussi, SqlServer, Oracle, tout quoi). bref, vous voyez...

et dans ADO, il y a bien mieux. je vous passe une petite ref.

http://www.q-tek.net/Q-Asp/Ref/Comp/Adoframe.htm

bon courage
Avatar
François Müller
"Ambassadeur Kosh" escribió en el mensaje
news:c0qn6e$9n7$ç
| dans un CRecordset (ou un QueryDef, je ne sais plus), il y'a un champ qui
| donne le nombre de ligne affecté par la derniere opération.

Attention cela ne marche pas avec tous les providers. Dans le cas
d'informix, je n'en sais rien.

F.
Avatar
Ambassadeur Kosh
> Attention cela ne marche pas avec tous les providers. Dans le cas
d'informix, je n'en sais rien.



moi non plus. d'experience, dans tous les drivers ODBC que j'ai manipulé,
seule la moitié des fonctionalités étaient implantées et cette moitié était
à moitié foireuse. donc...