Absoluteposition en VB.net./ ADO.net

Résolu
cs_rlapt Messages postés 63 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 25 juin 2013 - 18 mai 2013 à 13:16
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 20 mai 2013 à 13:10
Bonjour,

Je commence en VB.net/ADO.net et je cherche comment trouver la position absolue de l'enregistrement (ou ligne) en cours dans un DataSet.

En VBA, il est possible de faire
PosEnCours = DS.absoluteposition 
qui fonctionne d'ailleurs dans les deux sens lecture et écriture et je souhaite reproduire ce fonctionnement.

Pour compléter ma question : dans mon code, j'ajoute à un DataSet un enregistrement vide et je voudrais connaitre sa position dans le DataSet.

Merci par avance de votre aide.

RLAPT

7 réponses

Utilisateur anonyme
18 mai 2013 à 20:25
Bonjour,

et je cherche comment trouver la position absolue de l'enregistrement (ou ligne) en cours dans un DataSet.

Pour compléter ma question : dans mon code, j'ajoute à un DataSet un enregistrement vide et je voudrais connaitre sa position dans le DataSet.



Cela n'a aucun sens, Ado.nettement parlant. Le DataSet est essentiellement un conteneur de DataTable(s) et peut-être (je ne suis pas certain) d'autres objets. Cela s'approche beaucoup plus d'un banque de données complète (ou d'un classeur Excel avec ses feuilles) que d'une table de données. D'ailleurs, je ne crois pas qu'ADO.net n'ait d'objet rigoureusement comparable à un RecordSet. L'ajout d'enregistrements doit se faire dans un DataTable.
3
Utilisateur anonyme
19 mai 2013 à 22:25
Bonjour,

Sauf erreur d'observation de ma part, quand ADO.net ajoute un enregistrement à une table, c'est toujours la dernière ligne. Tu peux toujours avoir le numéro de la ligne (mais là j'ai un doute avec VB 2012 (j'en ai parlé dans le Bar, il y a peut-être quelques mois)) avec la propriété RowsCount de la table moins 1. Avec ma réserve pour VB2012, c'est peut-être rowscount tout court. J'avoue que je n'ai pas trop compris à quoi sert un BindingSource.

D'un autre côté, pour retrouver la rangée spécifique qui contient une donnée quelconque tu peux obtenir un tableau de Datarow à une ou plusieurs entrée contenant la (les) rangée(s) qui contient (contiennent) la donnée cherchée en utilisant la méthode Datatable.select(), avec 3 possibilités de recherche, incluant le tri des rangées trouvées. Dans le cas ou tu obtiendrais plus d'une rangée, tu peux boucler sut le tableau.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 mai 2013 à 23:03
Bonjour,
A quelle fin, tout cela ?
Je rappelle à tout hasard que la position absolue d'un enregistrement est volatile et est modifiée par :
- toute suppression d'un enregistrement de position inférieure
- toute insertion d'un autre enregistrement à une position inférieure


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mai 2013 à 11:03
Je viens d'ailleurs de voir que ce que ma mise en garde est clairement exposée par MDSN ici :
Tapez le texte de l'url ici.
prête la plus grande attention au dernier paragraphe (Note).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mai 2013 à 13:10
Je comprends que tu veuilles agiliser les traitements. Mais alors : non avec AbsolutePosition, mais oui, avec des signets, tout en étant conscient du poids ainsi ajouté.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
cs_rlapt Messages postés 63 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 25 juin 2013
19 mai 2013 à 18:16
Bonjour,

J'ai résolu cette difficulté en modifiant la logique de mon programme.

Reste qu'il me semble difficile de croire que Microsoft ne donne pas la possibilité de récupérer le pointeur de position lorsque l'on ajoute un enregistrement. Dans DAO et ADO pour VBA cela existe.

J'ai trouvé sur le net cette fonction :
Dim BindingSource1 As New BindingSource 
BindingSource1.DataSource = MyDataSet 
BindingSource1.DataMember = "Table1" 

rownumber = BindingSource1.Position

Mais je n'ai pas testé
Si quelqu'un peut m'expliquer le fonctionnement, ce serait bienvenu.

Merci d'avance.

Cordialement à tous

RLAPT
0
cs_rlapt Messages postés 63 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 25 juin 2013
20 mai 2013 à 12:21
Bonjour,

Tout d'abord, merci de votre aide.


Pour ce qui concerne la réponse cmarcotte
[list]Je ne suis pas sûr que le dernier enregistrement soit toujours celui inséré. Il me semble avoir lu que dans Jet (Moteur Access) l'ajout d'enregistrement pouvait se faire à la place d'un enregistrement supprimé (je n'en suis pas sûr). /list

Pour ce qui concerne la réponse ucfoutu :
[list]Il me semble toujours utile de maîtriser l'endroit ou l'on travaille dans un DataSet et cela facilite parfois la logique du programme. Bien entendu l'ajout et la suppression d'enregistrement modifie l'organisation du DataSet (et que dire de la base elle-même qui peut être multiutilisateur).
Merci pour le lien. Il semble que l'on puisse remplaacer avantageusement AbsolutePosition par une gestion de signets.
Il faut que j'y passe un peu de temps pour comprendre les subtilités./list

Merci encore.

Cordialement.

RLAPT
0
Rejoignez-nous