Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

permuter recordset

14 réponses
Avatar
Pascal
bonsoir,
je pensais m'en être sortis mais bon je patauge un peu
je cherche toujours à déplacer les enregistrements avec ce code
je ne vois pas comment se déplacer directement sur un recordset, il n'y a
que moveNext, Previous , first et Last
merci de jeter un oeil a ce code et me donner vos avis éclairé
Pascal

'**************************************************************************
Private Sub cmdSuivant_Click()
Dim NewNom As String
Dim NewPrix As String
Dim NewRow As Integer
Dim OldNom As String
Dim OldPrix As String
Dim oldRow As Integer


'prend le recordset en cours
OldNom = Data1.Recordset.Fields("Nom")
OldPrix = Data1.Recordset.Fields("PrixDeVente")
oldRow = DBGrid1.Row

If Not Data1.Recordset.EOF Then
'prend le suivant
Data1.Recordset.MoveNext
Else
'passe sur le premier
Data1.Recordset.MoveFirst
End If

'prend le recordset en cours
NewNom = Data1.Recordset.Fields("Nom")
NewPrix = Data1.Recordset.Fields("PrixDeVente")
NewRow = DBGrid1.Row

'permute les deux
'inscrit à la nouvelle position l'ancien record
DBGrid1.Columns(0) = OldNom
DBGrid1.Columns(1) = OldPrix 'JUSQUE ICI OK-----------------

'inscrit à l'ancienne position le record de la position encours
BON ICI JE M'EMMELES LES PINCEAUX -------------------------
je ne sais comment indiquer oldRow ----- ------------------------------

DBGrid1.Columns(0) = NewNom
DBGrid1.Columns(1) = NewPrix


'rafraichi le dbgrid
DBGrid1.Refresh

'remet le focus
DBGrid1.SetFocus
End Sub

'**************************************************************************

4 réponses

1 2
Avatar
Jean-marc
Pascal wrote:
hello jacques,
grand merci pour le lien
cela va beaucoup m'aider avec AbsolutePosition
je vais réécrire differement



Hello,

MoveNext et MovePrevious ne fonctionnent pas comme tu le
penses.

Le EOF n'est atteint que quand, ETANT DEJA SUR LE DERNIER,
tu fais un moveNext.

Idem dans l'autre sens avec BOF.

Voici du code qui fonctionne:

' en arrière
Private Sub Command1_Click()

Data1.Recordset.MovePrevious
If Data1.Recordset.BOF Then
Data1.Recordset.MoveLast
End If
End Sub

' en avant
Private Sub Command2_Click()

Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then
Data1.Recordset.MoveFirst
End If
End Sub

Pour t'en convaincre, place un data control sur une forme,
relié à une DB et un champ de ton choix.

Place ensuite 2 boutons, et hop.

Tu verras que d'un simple clic sur le bouton "en avant", on passe
du dernier au premier.

Idem en arrière, ou on passera du premier au dernier, en un clic.

Je resume:

Quand on est sur dernier record, on est PAS ENCORE EOF.
C'est seulement quand on avance un de plus !

Il faut donc tester si on est EOF APRES avoir fait
MoveNext.

Voila voila :-)

Bonne soirée


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Pascal
bonsoir jean-marc,
je suis très heureux d'avoir reçu réponse et je comprend bien mieux
maintenant
bien différent de ce que je faisais
Nous pouvons clore ce poste à présent
merci à tous de votre dévouement
Pascal

"Jean-marc" a écrit dans le message
de news: 473b4e52$0$22321$
Pascal wrote:
hello jacques,
grand merci pour le lien
cela va beaucoup m'aider avec AbsolutePosition
je vais réécrire differement



Hello,

MoveNext et MovePrevious ne fonctionnent pas comme tu le
penses.

Le EOF n'est atteint que quand, ETANT DEJA SUR LE DERNIER,
tu fais un moveNext.

Idem dans l'autre sens avec BOF.

Voici du code qui fonctionne:

' en arrière
Private Sub Command1_Click()

Data1.Recordset.MovePrevious
If Data1.Recordset.BOF Then
Data1.Recordset.MoveLast
End If
End Sub

' en avant
Private Sub Command2_Click()

Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then
Data1.Recordset.MoveFirst
End If
End Sub

Pour t'en convaincre, place un data control sur une forme,
relié à une DB et un champ de ton choix.

Place ensuite 2 boutons, et hop.

Tu verras que d'un simple clic sur le bouton "en avant", on passe
du dernier au premier.

Idem en arrière, ou on passera du premier au dernier, en un clic.

Je resume:

Quand on est sur dernier record, on est PAS ENCORE EOF.
C'est seulement quand on avance un de plus !

Il faut donc tester si on est EOF APRES avoir fait
MoveNext.

Voila voila :-)

Bonne soirée


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
Pascal
re jean-marc,
curieux tout de même cette méthode qui ne provoque pas d'erreur
d'abord move next
et ensuite tester si EOF
je pensais que le moveNext aurait forcement généré une erreur puisque sur le
dernier et rien après!
je ne trouve pas cela logique!
merci encore


"Jean-marc" a écrit dans le message
de news: 473b4e52$0$22321$
Pascal wrote:
hello jacques,
grand merci pour le lien
cela va beaucoup m'aider avec AbsolutePosition
je vais réécrire differement



Hello,

MoveNext et MovePrevious ne fonctionnent pas comme tu le
penses.

Le EOF n'est atteint que quand, ETANT DEJA SUR LE DERNIER,
tu fais un moveNext.

Idem dans l'autre sens avec BOF.

Voici du code qui fonctionne:

' en arrière
Private Sub Command1_Click()

Data1.Recordset.MovePrevious
If Data1.Recordset.BOF Then
Data1.Recordset.MoveLast
End If
End Sub

' en avant
Private Sub Command2_Click()

Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then
Data1.Recordset.MoveFirst
End If
End Sub

Pour t'en convaincre, place un data control sur une forme,
relié à une DB et un champ de ton choix.

Place ensuite 2 boutons, et hop.

Tu verras que d'un simple clic sur le bouton "en avant", on passe
du dernier au premier.

Idem en arrière, ou on passera du premier au dernier, en un clic.

Je resume:

Quand on est sur dernier record, on est PAS ENCORE EOF.
C'est seulement quand on avance un de plus !

Il faut donc tester si on est EOF APRES avoir fait
MoveNext.

Voila voila :-)

Bonne soirée


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
jean-marc
"Pascal" wrote in message
news:
re jean-marc,
curieux tout de même cette méthode qui ne provoque pas d'erreur
d'abord move next
et ensuite tester si EOF
je pensais que le moveNext aurait forcement généré une erreur puisque sur
le dernier et rien après!
je ne trouve pas cela logique!
merci encore



Hello,

C'est vrai que ça peut paraitre un peu curieux.
Mais ce comportement est général en programmation,
tous langages confondus. Par exemple, quand on lit
un fichier en C, le eof ne se déclenche aussi que
lorsqu'on essaie de lire APRES avoir le le dernier
enregistrement ou byte ou line.

Bonne suite :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
1 2