Absoluteposition en VB.net./ ADO.net [Résolu]

Signaler
Messages postés
63
Date d'inscription
lundi 6 octobre 2003
Statut
Membre
Dernière intervention
25 juin 2013
-
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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


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.

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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
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.
Messages postés
63
Date d'inscription
lundi 6 octobre 2003
Statut
Membre
Dernière intervention
25 juin 2013

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
Messages postés
63
Date d'inscription
lundi 6 octobre 2003
Statut
Membre
Dernière intervention
25 juin 2013

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