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

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

10 réponses

1 2
Avatar
jean-marc
"Pascal" wrote in message
news:
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é



Hello,

Le plus facile (et le plus sain) est de faire les
changements dans la base, avec un Edit et un Update.

Comment permuter 2 variables a et b ?

Soit a et b, 2 variables. A=2, B=3

1. c = a
2. a = b
3. b = c

Et voila, maintenant A=3 et B=2

D'accord?

Et bien tu fais pareil avec tes records:

' on se place sur le record N
' et on stocke les 2 valeurs courantes (OLD)
OldNom = Data1.Recordset.Fields("Nom")
OldPrix = Data1.Recordset.Fields("PrixDeVente")

' Puis On avance
Data1.Recordset.MoveNext

' puis on stocke les 2 Nouvelles valeurs (NEW)
NewNom = Data1.Recordset.Fields("Nom")
NewPrix = Data1.Recordset.Fields("PrixDeVente")

' Maintenant on édite le record
' et on met dedans les valeurs OLD
Data1.Recordset.Edit
Data1.Recordset.Fields("Nom") = OldNom
Data1.Recordset.Fields("PrixDeVente") = OldPrix
Data1.Update

' Puis on recule sur le précédent (qui contient les OLD)
' et on update et on met les valeurs NEW
Data1.Recordset.MovePrevious

Data1.Recordset.Edit
Data1.Recordset.Fields("Nom") = NewNom
Data1.Recordset.Fields("PrixDeVente") = NewPrix
Data1.RecordSet.Update

' Il ne reste plus qu'à avancer du bon nombre de records
' en fonction de ce que tu veux faire (probablement 2 en avant).

Et voila.

Note: Ceci fonctionne, MAIS c'est tout ce qu'il y a
de dangereux, à moins que tu sois parfaitement sur
du contenu de ta base de données.

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Pascal
salut jean-marc,
ben EDIT et UPDATE j'y pensais plus! ah ces amateurs...
oui je suis tout à fait certain du contenu
c'est une BDD qui contient seulement 25 records
à l'ouverture du prog la base est lue le le 'NOM" est mis sur le caption
d'un groupe de 25 boutons
d'ou l'importance pour moi de pouvoir "organiser" la BDD pour qu'à
l'ouverture les noms soient groupés(visuel)

je pensais qu'il était plus facile de récupérer le pointeur
d'enregistrement!

merci 1000 fois
Pascal



"jean-marc" a écrit dans le message de news:
473993bc$0$22302$
"Pascal" wrote in message
news:
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é



Hello,

Le plus facile (et le plus sain) est de faire les
changements dans la base, avec un Edit et un Update.

Comment permuter 2 variables a et b ?

Soit a et b, 2 variables. A=2, B=3

1. c = a
2. a = b
3. b = c

Et voila, maintenant A=3 et B=2

D'accord?

Et bien tu fais pareil avec tes records:

' on se place sur le record N
' et on stocke les 2 valeurs courantes (OLD)
OldNom = Data1.Recordset.Fields("Nom")
OldPrix = Data1.Recordset.Fields("PrixDeVente")

' Puis On avance
Data1.Recordset.MoveNext

' puis on stocke les 2 Nouvelles valeurs (NEW)
NewNom = Data1.Recordset.Fields("Nom")
NewPrix = Data1.Recordset.Fields("PrixDeVente")

' Maintenant on édite le record
' et on met dedans les valeurs OLD
Data1.Recordset.Edit
Data1.Recordset.Fields("Nom") = OldNom
Data1.Recordset.Fields("PrixDeVente") = OldPrix
Data1.Update

' Puis on recule sur le précédent (qui contient les OLD)
' et on update et on met les valeurs NEW
Data1.Recordset.MovePrevious

Data1.Recordset.Edit
Data1.Recordset.Fields("Nom") = NewNom
Data1.Recordset.Fields("PrixDeVente") = NewPrix
Data1.RecordSet.Update

' Il ne reste plus qu'à avancer du bon nombre de records
' en fonction de ce que tu veux faire (probablement 2 en avant).

Et voila.

Note: Ceci fonctionne, MAIS c'est tout ce qu'il y a
de dangereux, à moins que tu sois parfaitement sur
du contenu de ta base de données.

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








Avatar
Pascal
hello jean -marc,
un petit soucis lorsqu'i-on est positionner sur le dERNIER enregistrement,
cela passe malgré tout à l'enregistrement suivant, un paramètre oublié?
merci d'avance
Pascal
'*****************************************************
'prend le recordset en cours
OldNom = Data1.Recordset.Fields("Nom")
OldPrix = Data1.Recordset.Fields("PrixDeVente")
'on efface le contenu (risque de doublons)
Data1.Recordset.Edit
Data1.Recordset.Fields("nom") = ""
Data1.Recordset.Update

'on avance sur les enregistrements
If Not Data1.Recordset.EOF Then
'prend le suivant
Data1.Recordset.MoveNext
Else
'prend le premier
Data1.Recordset.MoveFirst
End If
'****************************************************
"jean-marc" a écrit dans le message de news:
473993bc$0$22302$
"Pascal" wrote in message
news:
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é



Hello,

Le plus facile (et le plus sain) est de faire les
changements dans la base, avec un Edit et un Update.

Comment permuter 2 variables a et b ?

Soit a et b, 2 variables. A=2, B=3

1. c = a
2. a = b
3. b = c

Et voila, maintenant A=3 et B=2

D'accord?

Et bien tu fais pareil avec tes records:

' on se place sur le record N
' et on stocke les 2 valeurs courantes (OLD)
OldNom = Data1.Recordset.Fields("Nom")
OldPrix = Data1.Recordset.Fields("PrixDeVente")

' Puis On avance
Data1.Recordset.MoveNext

' puis on stocke les 2 Nouvelles valeurs (NEW)
NewNom = Data1.Recordset.Fields("Nom")
NewPrix = Data1.Recordset.Fields("PrixDeVente")

' Maintenant on édite le record
' et on met dedans les valeurs OLD
Data1.Recordset.Edit
Data1.Recordset.Fields("Nom") = OldNom
Data1.Recordset.Fields("PrixDeVente") = OldPrix
Data1.Update

' Puis on recule sur le précédent (qui contient les OLD)
' et on update et on met les valeurs NEW
Data1.Recordset.MovePrevious

Data1.Recordset.Edit
Data1.Recordset.Fields("Nom") = NewNom
Data1.Recordset.Fields("PrixDeVente") = NewPrix
Data1.RecordSet.Update

' Il ne reste plus qu'à avancer du bon nombre de records
' en fonction de ce que tu veux faire (probablement 2 en avant).

Et voila.

Note: Ceci fonctionne, MAIS c'est tout ce qu'il y a
de dangereux, à moins que tu sois parfaitement sur
du contenu de ta base de données.

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








Avatar
Pascal
je voulais dire:
quand on est positionner sur dernier record, plustôt que de passer à
moveFirst ca passe à MoveNext
pascal

"Pascal" a écrit dans le message de news:

hello jean -marc,
un petit soucis lorsqu'i-on est positionner sur le dERNIER enregistrement,
cela passe malgré tout à l'enregistrement suivant, un paramètre oublié?
merci d'avance
Pascal
'*****************************************************
'prend le recordset en cours
OldNom = Data1.Recordset.Fields("Nom")
OldPrix = Data1.Recordset.Fields("PrixDeVente")
'on efface le contenu (risque de doublons)
Data1.Recordset.Edit
Data1.Recordset.Fields("nom") = ""
Data1.Recordset.Update

'on avance sur les enregistrements
If Not Data1.Recordset.EOF Then
'prend le suivant
Data1.Recordset.MoveNext
Else
'prend le premier
Data1.Recordset.MoveFirst
End If
'****************************************************
"jean-marc" a écrit dans le message de
news: 473993bc$0$22302$
"Pascal" wrote in message
news:
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é



Hello,

Le plus facile (et le plus sain) est de faire les
changements dans la base, avec un Edit et un Update.

Comment permuter 2 variables a et b ?

Soit a et b, 2 variables. A=2, B=3

1. c = a
2. a = b
3. b = c

Et voila, maintenant A=3 et B=2

D'accord?

Et bien tu fais pareil avec tes records:

' on se place sur le record N
' et on stocke les 2 valeurs courantes (OLD)
OldNom = Data1.Recordset.Fields("Nom")
OldPrix = Data1.Recordset.Fields("PrixDeVente")

' Puis On avance
Data1.Recordset.MoveNext

' puis on stocke les 2 Nouvelles valeurs (NEW)
NewNom = Data1.Recordset.Fields("Nom")
NewPrix = Data1.Recordset.Fields("PrixDeVente")

' Maintenant on édite le record
' et on met dedans les valeurs OLD
Data1.Recordset.Edit
Data1.Recordset.Fields("Nom") = OldNom
Data1.Recordset.Fields("PrixDeVente") = OldPrix
Data1.Update

' Puis on recule sur le précédent (qui contient les OLD)
' et on update et on met les valeurs NEW
Data1.Recordset.MovePrevious

Data1.Recordset.Edit
Data1.Recordset.Fields("Nom") = NewNom
Data1.Recordset.Fields("PrixDeVente") = NewPrix
Data1.RecordSet.Update

' Il ne reste plus qu'à avancer du bon nombre de records
' en fonction de ce que tu veux faire (probablement 2 en avant).

Et voila.

Note: Ceci fonctionne, MAIS c'est tout ce qu'il y a
de dangereux, à moins que tu sois parfaitement sur
du contenu de ta base de données.

--
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:
je voulais dire:
quand on est positionner sur dernier record, plustôt que de passer à
moveFirst ca passe à MoveNext



Hello,

pas de magie : exécute ton code en pas à pas en mettant
un point d'arrêt. Tu verras bien la ou ça disfonctionne
et tu trouveras tout naturellement la solution.

VB dispose d'un IDE hyper performant et excessivement
pratique pour débugger, il faut en profiter.

Il y a 20 ans quand on devait débugger en aveugle à coups
de printf() à l'écran, on aurait tué pour avoir un IDE comme
celui de VB !

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Pascal
hello Jean-marc,
merci pour ta réponse mais je sais exactement ou cela pose problème
ma base est limité à 25 records par le RecordSource du controlData ou
j'indique SELECT TOP 25 * FROM Produits
lorsque je suis positionné sur le dernier record dans mon dbgrid et que
j'excecute
'------------------------------------------
private sub cmdSuivant_click()
if Not Data1.Recordset.EOF Then
'prend le suivant
Data1.Recordset.MoveNext
Else
'prend le premier
Data1.Recordset.MoveFirst
End If
end sub
'-----------------------------------------
je suis pourtant sur le dernier mais il passe au suivant comme s'il y avait
un enregistrement supplémentaire
une action suppléménatire sur le bouton me fais passer ensuite à Movefirst
donc sur le dernier record il me faut cliquer 2 fois pour passer au premier
bizarre bizarre
b à toi
Pascal

"Jean-marc" a écrit dans le message
de news: 4739fd9e$0$29246$
Pascal wrote:
je voulais dire:
quand on est positionner sur dernier record, plustôt que de passer à
moveFirst ca passe à MoveNext



Hello,

pas de magie : exécute ton code en pas à pas en mettant
un point d'arrêt. Tu verras bien la ou ça disfonctionne
et tu trouveras tout naturellement la solution.

VB dispose d'un IDE hyper performant et excessivement
pratique pour débugger, il faut en profiter.

Il y a 20 ans quand on devait débugger en aveugle à coups
de printf() à l'écran, on aurait tué pour avoir un IDE comme
celui de VB !

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






Avatar
Patrice Henrio
Pascal a écrit :
hello Jean-marc,
merci pour ta réponse mais je sais exactement ou cela pose problème
ma base est limité à 25 records par le RecordSource du controlData ou
j'indique SELECT TOP 25 * FROM Produits
lorsque je suis positionné sur le dernier record dans mon dbgrid et que
j'excecute
'------------------------------------------
private sub cmdSuivant_click()
if Not Data1.Recordset.EOF Then
'prend le suivant
Data1.Recordset.MoveNext
Else
'prend le premier
Data1.Recordset.MoveFirst
End If
end sub
'-----------------------------------------
je suis pourtant sur le dernier mais il passe au suivant comme s'il y
avait un enregistrement supplémentaire
une action suppléménatire sur le bouton me fais passer ensuite à Movefirst
donc sur le dernier record il me faut cliquer 2 fois pour passer au premier
bizarre bizarre
b à toi
Pascal

"Jean-marc" a écrit dans le
message de news: 4739fd9e$0$29246$
Pascal wrote:
je voulais dire:
quand on est positionner sur dernier record, plustôt que de passer à
moveFirst ca passe à MoveNext



Hello,

pas de magie : exécute ton code en pas à pas en mettant
un point d'arrêt. Tu verras bien la ou ça disfonctionne
et tu trouveras tout naturellement la solution.

VB dispose d'un IDE hyper performant et excessivement
pratique pour débugger, il faut en profiter.

Il y a 20 ans quand on devait débugger en aveugle à coups
de printf() à l'écran, on aurait tué pour avoir un IDE comme
celui de VB !

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









Une base de données me parait un outil disproportionné pour 25 articles
(sauf s'il s'agit seulement d'une phase de test et qu'à la fin la base
fera 15000 articles). Un bête fichier texte lu en une fois sous la forme
d'un tableau de trois colonnes et 25 lignes devrait faire l'affaire. Le
traitement en sera d'autant plus facile.
Avatar
Pascal
Bonjour aussi,
merci pour cette remarque certe pertinente mais qui ne résoud en rien mon
problème
le problème est de comprendre le pourquoi de la chose, un paramètre dans les
propriétés du data ou dbgrid à changer ?
dans ce cas de figure la propriété EOF vaut 1 de plus?? je ne me l'explique
pas
bien à vous


"Patrice Henrio" a écrit dans le message de
news: %
Pascal a écrit :
hello Jean-marc,
merci pour ta réponse mais je sais exactement ou cela pose problème
ma base est limité à 25 records par le RecordSource du controlData ou
j'indique SELECT TOP 25 * FROM Produits
lorsque je suis positionné sur le dernier record dans mon dbgrid et que
j'excecute
'------------------------------------------
private sub cmdSuivant_click()
if Not Data1.Recordset.EOF Then
'prend le suivant
Data1.Recordset.MoveNext
Else
'prend le premier
Data1.Recordset.MoveFirst
End If
end sub
'-----------------------------------------
je suis pourtant sur le dernier mais il passe au suivant comme s'il y
avait un enregistrement supplémentaire
une action suppléménatire sur le bouton me fais passer ensuite à
Movefirst
donc sur le dernier record il me faut cliquer 2 fois pour passer au
premier
bizarre bizarre
b à toi
Pascal

"Jean-marc" a écrit dans le
message de news: 4739fd9e$0$29246$
Pascal wrote:
je voulais dire:
quand on est positionner sur dernier record, plustôt que de passer à
moveFirst ca passe à MoveNext



Hello,

pas de magie : exécute ton code en pas à pas en mettant
un point d'arrêt. Tu verras bien la ou ça disfonctionne
et tu trouveras tout naturellement la solution.

VB dispose d'un IDE hyper performant et excessivement
pratique pour débugger, il faut en profiter.

Il y a 20 ans quand on devait débugger en aveugle à coups
de printf() à l'écran, on aurait tué pour avoir un IDE comme
celui de VB !

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









Une base de données me parait un outil disproportionné pour 25 articles
(sauf s'il s'agit seulement d'une phase de test et qu'à la fin la base
fera 15000 articles). Un bête fichier texte lu en une fois sous la forme
d'un tableau de trois colonnes et 25 lignes devrait faire l'affaire. Le
traitement en sera d'autant plus facile.


Avatar
Jacques93
Bonjour Pascal,
Pascal a écrit :
Bonjour aussi,
merci pour cette remarque certe pertinente mais qui ne résoud en rien
mon problème
le problème est de comprendre le pourquoi de la chose, un paramètre dans
les propriétés du data ou dbgrid à changer ?
dans ce cas de figure la propriété EOF vaut 1 de plus?? je ne me
l'explique pas
bien à vous





Je ne suis pas du tout spécialiste des BD, mais cela ne pourrait il pas
être lié au type de recordset ?

<http://www.info-3000.com/access/daorecordset.php>

--
Cordialement,

Jacques.
Avatar
Pascal
hello jacques,
grand merci pour le lien
cela va beaucoup m'aider avec AbsolutePosition
je vais réécrire differement
j'avais essayé aussi avec succès une façon moins propre (travailler avec
dbgrid) Nickel
je cherche, je cherche !
merci à toi

Pascal

"Jacques93" a écrit dans le message de news:

Bonjour Pascal,
Pascal a écrit :
Bonjour aussi,
merci pour cette remarque certe pertinente mais qui ne résoud en rien mon
problème
le problème est de comprendre le pourquoi de la chose, un paramètre dans
les propriétés du data ou dbgrid à changer ?
dans ce cas de figure la propriété EOF vaut 1 de plus?? je ne me
l'explique pas
bien à vous





Je ne suis pas du tout spécialiste des BD, mais cela ne pourrait il pas
être lié au type de recordset ?

<http://www.info-3000.com/access/daorecordset.php>

--
Cordialement,

Jacques.


1 2