OVH Cloud OVH Cloud

PB recordset!!!!!

18 réponses
Avatar
fabrizio-r
Hello a tous,

Quelqu'un peut il me dire comment je peut recuperer=20
l'=E9tat actif de mon recordset muni d'une table de=20
plusieurs champs, dans une variable???
De quel type doit etre cette variable???

Merci d 'avance,

Fabrice.

8 réponses

1 2
Avatar
Eric
re,
Bizarre, car AbsolutePosition retourne la position de l'enregistrement lu
mais il faut utiliser un curseur coté client :

La proc suivante m'affiche les rangs des enregistrements du recordset.

Private Sub Form_Load()
Dim conn1 As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
Dim AccessConnect As String

AccessConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=E:ZZZManipulationADOPlumier2003.mdb"

conn1.ConnectionString = AccessConnect
conn1.Open
rs.CursorLocation = adUseClient
sql = "select * from tclient"

rs.Open sql, conn1, adOpenForwardOnly, adLockReadOnly, adCmdText
Do While Not rs.EOF
List1.AddItem rs.AbsolutePosition & vbTab & rs.Fields
("Societe_client")
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
conn1.Close
Set conn1 = Nothing
End Sub

A+
Eric

"fabrizio-r" écrivait
news:2bd901c4286f$0cc0cf60$:

oui j ai essayé mais cela ne marche pas non plus, cela me
revoi toujour tous mes enregistrements et pas celui dont
je sui entrain de faire la lecture.

Fabrice.

-----Message d'origine----- re, sur ton post initial (Question pour
Clive ou autre) je t'ai proposé de tester la valeur de la propriété
AbsolutePosition de ton jeu d'enregistrements. As tu essayé ?

A+
Eric

"fabrizio-r" écrivait
news:2a7001c42868$d7638570$:

Oui voila, il faut que je sois sur d'etre positionné sur la bonne
ligne pour pouvoir effectivement, archiver cette ligne dans une
autre table, qui possède exactement les mêmes champs que la table
d'origine.

Fabrice.

-----Message d'origine-----

"fabrizio-r" a écrit dans le
message de news:2b5801c42865$f8eb61c0 $ je doi te
paraitre chiant mai le pb c que mes données ne


Euuh ... un peu

sont pas dans un data grid, elles sont dans différents textbox et
datacombobox....



Pas de problème. Il suffit d'être sûr d'être positionné sur la
bonne ligne. Donc tu cherches comment l'enregistrement à archiver ?


-----Message d'origine-----
Voici comment je le fais (j'ai horreur du SQL donc je le fait
manuellement) Dim rsField As adodb.Field
Dim OKForDel As Boolean
Dim RSFIELDS As adodb.Fields
Suite à un clique droite sur le sélecteur d'un datagrid, je mets
dans SearchStr
SearchStr = "Ref_etude = " & "'" & grdDataGrid.Columns (0).Text &
"'" Puis j'ouvre un msgbox demandant confirmation, résultat dans
OKForDel

If OKForDel Then
Attente.Show



DataEnvironment1.Archive_Etudes 'J'utilise le
dataenvironment, mais ADO c'est pareil ' J'ai donc deux recordsets
ouvert, les archives et l'original (fordelete) en mode Read/Write
With DataEnvironment1 .rsArchive_Etudes.AddNew
.rsForDelete.MoveFirst
.rsForDelete.Find (SearchStr)
Set RSFIELDS = .rsForDelete.Fields
For Each rsField In RSFIELDS
.rsArchive_Etudes (rsField.Name) =
rsField.Value Next rsField
.rsArchive_Etudes.Update .rsForDelete.Delete
.rsForDele te.UpdateBatch
End With



DataEnvironment1.rsArchive_Etudes.Close
End If
DataEnvironment1.rsForDelete.Close
Set RSFIELDS = Nothing


"fabrizio-r" a écrit dans le
message de news:29f001c4285f$4e57af30 $ J ai bien
essayé avec le bookmark mais vb me génère l'erreur suivante :

"Le moteur de la base de données Microsoft Jet ne reconnait pas
'task_manager.*' en tant que nom de champ ou expression correcte"

mon code est le suivant :

If btn.Key = "CLOSETASK" Then
Set monrs4 = New ADODB.Recordset

monrs4.Open "INSERT INTO taches_closes SELECT
task_manager.* FROM task_manager WHERE" &
Adodc1.Recordset.Bookmark, cnn1, adOpenKeyset, adLockOptimistic

Adodc2.Refresh

monrs4.Open "SELECT * FROM taches_closes", cnn1, adOpenKeyset,
adLockOptimistic

Timer2.Enabled = True

End If

peut etre est ce un problème de synthaxe, en tout cas le bookmark
se positionne bien sur l'enregistrement que je veu quand je me
déplace dans ma table.

Fabrice.



-----Message d'origine-----
Hello Fabrice,

Ce que tu cherches c'est le Bookmark (c'est un long je crois).
Recordset.bookmark rend une valeur unique qui correspond à la
ligne sur laquelle on se trouve0.
Exemple
rs.find "Nom = 'fabrice'"
MyBM =rs.bookmark rs.movefirst
Debug.print rs.fields("Nom")
---------> Clive rs.bookmark=MyBM
Debug.print rs.fields("Nom")
---------> Fabrice

Notons que le Datagrid a lui une collection de Bookmarks, ce qui
permet de marquer plusieurs lignes (pour effacement par exemple)
Grosso modo on fait
'Effacer les bookmarks
If (DataGrid1.SelBookmarks.Count <> 0) Then
DataGrid1.SelBookmarks.Remove 0
End If
'Ajouter un bookmark
DataGrid1.SelBookmarks.Add rs.Bookmark



"fabrizio-r" a écrit dans le
message de news:2a3d01c42851$60fc5c70 $ Hello a
tous,

Quelqu'un peut il me dire comment je peut recuperer
l'état actif de mon recordset muni d'une table de
plusieurs champs, dans une variable???
De quel type doit etre cette variable???

Merci d 'avance,

Fabrice.


.





.





.







.






Avatar
fabrizio-r
Oui, moi aussi ton bout de code, m affiche le rang de mes
enregistrement , cependant je ne vois pas comment l
utiliser pour ce que je souhaite.

Fabrice.

-----Message d'origine-----
re,
Bizarre, car AbsolutePosition retourne la position de


l'enregistrement lu
mais il faut utiliser un curseur coté client :

La proc suivante m'affiche les rangs des enregistrements


du recordset.

Private Sub Form_Load()
Dim conn1 As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
Dim AccessConnect As String

AccessConnect = "Provider=Microsoft.Jet.OLEDB.4.0;"


& _
"Data


Source=E:ZZZManipulationADOPlumier2003.mdb"

conn1.ConnectionString = AccessConnect
conn1.Open
rs.CursorLocation = adUseClient
sql = "select * from tclient"

rs.Open sql, conn1, adOpenForwardOnly,


adLockReadOnly, adCmdText
Do While Not rs.EOF
List1.AddItem rs.AbsolutePosition & vbTab &


rs.Fields
("Societe_client")
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
conn1.Close
Set conn1 = Nothing
End Sub

A+
Eric

"fabrizio-r"


écrivait
news:2bd901c4286f$0cc0cf60$:

oui j ai essayé mais cela ne marche pas non plus, cela




me
revoi toujour tous mes enregistrements et pas celui




dont
je sui entrain de faire la lecture.

Fabrice.

-----Message d'origine----- re, sur ton post initial






(Question pour
Clive ou autre) je t'ai proposé de tester la valeur






de la propriété
AbsolutePosition de ton jeu d'enregistrements. As tu






essayé ?

A+
Eric

"fabrizio-r"






écrivait
news:2a7001c42868$d7638570$:

Oui voila, il faut que je sois sur d'etre








positionné sur la bonne
ligne pour pouvoir effectivement, archiver cette








ligne dans une
autre table, qui possède exactement les mêmes champs








que la table
d'origine.

Fabrice.

-----Message d'origine-----

"fabrizio-r"












a écrit dans le
message de news:2b5801c42865$f8eb61c0












$ je doi te
paraitre chiant mai le pb c que mes données ne


Euuh ... un peu

sont pas dans un data grid, elles sont dans












différents textbox et
datacombobox....



Pas de problème. Il suffit d'être sûr d'être










positionné sur la
bonne ligne. Donc tu cherches comment










l'enregistrement à archiver ?


-----Message d'origine-----
Voici comment je le fais (j'ai horreur du SQL donc












je le fait
manuellement) Dim rsField As adodb.Field
Dim OKForDel As Boolean
Dim RSFIELDS As adodb.Fields
Suite à un clique droite sur le sélecteur d'un












datagrid, je mets
dans SearchStr
SearchStr = "Ref_etude = " & "'" &












grdDataGrid.Columns (0).Text &
"'" Puis j'ouvre un msgbox demandant confirmation,












résultat dans
OKForDel

If OKForDel Then
Attente.Show



DataEnvironment1.Archive_Etudes 'J'utilise le
dataenvironment, mais ADO c'est pareil ' J'ai donc












deux recordsets
ouvert, les archives et l'original (fordelete) en












mode Read/Write
With












DataEnvironment1 .rsArchive_Etudes.AddNew
.rsForDelete.MoveFirst
.rsForDelete.Find












(SearchStr)
Set RSFIELDS












= .rsForDelete.Fields
For Each rsField In












RSFIELDS
.rsArchive_Etudes












(rsField.Name) =
rsField.Value Next rsField
.rsArchive_Etudes.Update .rs












ForDelete.Delete
.rsForDele te.UpdateBatch
End With



DataEnvironment1.rsArchive_Etudes.Close
End If
DataEnvironment1.rsForDelete.Close
Set RSFIELDS = Nothing


"fabrizio-r"












a écrit dans le
message de news:29f001c4285f$4e57af30












$ J ai bien
essayé avec le bookmark mais vb me génère l'erreur












suivante :

"Le moteur de la base de données Microsoft Jet ne












reconnait pas
'task_manager.*' en tant que nom de champ ou












expression correcte"

mon code est le suivant :

If btn.Key = "CLOSETASK" Then
Set monrs4 = New ADODB.Recordset

monrs4.Open "INSERT INTO taches_closes SELECT
task_manager.* FROM task_manager WHERE" &
Adodc1.Recordset.Bookmark, cnn1, adOpenKeyset,












adLockOptimistic

Adodc2.Refresh

monrs4.Open "SELECT * FROM taches_closes", cnn1,












adOpenKeyset,
adLockOptimistic

Timer2.Enabled = True

End If

peut etre est ce un problème de synthaxe, en tout












cas le bookmark
se positionne bien sur l'enregistrement que je veu












quand je me
déplace dans ma table.

Fabrice.



-----Message d'origine-----
Hello Fabrice,

Ce que tu cherches c'est le Bookmark (c'est un














long je crois).
Recordset.bookmark rend une valeur unique qui














correspond à la
ligne sur laquelle on se trouve0.
Exemple
rs.find "Nom = 'fabrice'"
MyBM =rs.bookmark rs.movefirst
Debug.print rs.fields("Nom")
---------> Clive rs.bookmark=MyBM
Debug.print rs.fields("Nom")
---------> Fabrice

Notons que le Datagrid a lui une collection de














Bookmarks, ce qui
permet de marquer plusieurs lignes (pour














effacement par exemple)
Grosso modo on fait
'Effacer les bookmarks
If (DataGrid1.SelBookmarks.Count <> 0) Then
DataGrid1.SelBookmarks.Remove 0
End If
'Ajouter un bookmark
DataGrid1.SelBookmarks.Add rs.Bookmark



"fabrizio-r"














a écrit dans le
message de news:2a3d01c42851$60fc5c70














$ Hello a
tous,

Quelqu'un peut il me dire comment je peut recuperer
l'état actif de mon recordset muni d'une table de
plusieurs champs, dans une variable???
De quel type doit etre cette variable???

Merci d 'avance,

Fabrice.


.





.





.







.







.



Avatar
Eric
Si tu mets ca dans un controle Adodc, en cliquant sur une ligne du controle
tu récuperes la position de l'enregistrement via l'instruction
Adodc1.Recordset.AbsolutePosition et donc tu peux mettre dans ton sql pour
l'insertion une clause where
"Insert Into Tache_close Select * from Task_manager where Id_Tache =" &
Rang & ";" où Rang a reçu la valeur de Adodc1.Recordset.AbsolutePosition

et apres tu fais un execute le sql

Eric

"fabrizio-r" écrivait
news:2d6801c4287c$86ef9340$:

Oui, moi aussi ton bout de code, m affiche le rang de mes
enregistrement , cependant je ne vois pas comment l
utiliser pour ce que je souhaite.

Fabrice.

-----Message d'origine-----
re,
Bizarre, car AbsolutePosition retourne la position de


l'enregistrement lu
mais il faut utiliser un curseur coté client :

La proc suivante m'affiche les rangs des enregistrements


du recordset.

Private Sub Form_Load()
Dim conn1 As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
Dim AccessConnect As String

AccessConnect = "Provider=Microsoft.Jet.OLEDB.4.0;"


& _
"Data


Source=E:ZZZManipulationADOPlumier2003.mdb"

conn1.ConnectionString = AccessConnect
conn1.Open
rs.CursorLocation = adUseClient
sql = "select * from tclient"

rs.Open sql, conn1, adOpenForwardOnly,


adLockReadOnly, adCmdText
Do While Not rs.EOF
List1.AddItem rs.AbsolutePosition & vbTab &


rs.Fields
("Societe_client")
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
conn1.Close
Set conn1 = Nothing
End Sub

A+
Eric

"fabrizio-r"


écrivait
news:2bd901c4286f$0cc0cf60$:

oui j ai essayé mais cela ne marche pas non plus, cela




me
revoi toujour tous mes enregistrements et pas celui




dont
je sui entrain de faire la lecture.

Fabrice.

-----Message d'origine----- re, sur ton post initial






(Question pour
Clive ou autre) je t'ai proposé de tester la valeur






de la propriété
AbsolutePosition de ton jeu d'enregistrements. As tu






essayé ?

A+
Eric

"fabrizio-r"






écrivait
news:2a7001c42868$d7638570$:

Oui voila, il faut que je sois sur d'etre








positionné sur la bonne
ligne pour pouvoir effectivement, archiver cette








ligne dans une
autre table, qui possède exactement les mêmes champs








que la table
d'origine.

Fabrice.

-----Message d'origine-----

"fabrizio-r"












a écrit dans le
message de news:2b5801c42865$f8eb61c0












$ je doi te
paraitre chiant mai le pb c que mes données ne


Euuh ... un peu

sont pas dans un data grid, elles sont dans












différents textbox et
datacombobox....



Pas de problème. Il suffit d'être sûr d'être










positionné sur la
bonne ligne. Donc tu cherches comment










l'enregistrement à archiver ?


-----Message d'origine-----
Voici comment je le fais (j'ai horreur du SQL donc












je le fait
manuellement) Dim rsField As adodb.Field
Dim OKForDel As Boolean
Dim RSFIELDS As adodb.Fields
Suite à un clique droite sur le sélecteur d'un












datagrid, je mets
dans SearchStr
SearchStr = "Ref_etude = " & "'" &












grdDataGrid.Columns (0).Text &
"'" Puis j'ouvre un msgbox demandant confirmation,












résultat dans
OKForDel

If OKForDel Then
Attente.Show



DataEnvironment1.Archive_Etudes 'J'utilise le
dataenvironment, mais ADO c'est pareil ' J'ai donc












deux recordsets
ouvert, les archives et l'original (fordelete) en












mode Read/Write
With












DataEnvironment1 .rsArchive_Etudes.AddNew
.rsForDelete.MoveFirst
.rsForDelete.Find












(SearchStr)
Set RSFIELDS












= .rsForDelete.Fields
For Each rsField In












RSFIELDS
.rsArchive_Etudes












(rsField.Name) =
rsField.Value Next rsField
.rsArchive_Etudes.Update .rs












ForDelete.Delete
.rsForDele te.UpdateBatch
End With



DataEnvironment1.rsArchive_Etudes.Close
End If
DataEnvironment1.rsForDelete.Close
Set RSFIELDS = Nothing


"fabrizio-r"












a écrit dans le
message de news:29f001c4285f$4e57af30












$ J ai bien
essayé avec le bookmark mais vb me génère l'erreur












suivante :

"Le moteur de la base de données Microsoft Jet ne












reconnait pas
'task_manager.*' en tant que nom de champ ou












expression correcte"

mon code est le suivant :

If btn.Key = "CLOSETASK" Then
Set monrs4 = New ADODB.Recordset

monrs4.Open "INSERT INTO taches_closes SELECT
task_manager.* FROM task_manager WHERE" &
Adodc1.Recordset.Bookmark, cnn1, adOpenKeyset,












adLockOptimistic

Adodc2.Refresh

monrs4.Open "SELECT * FROM taches_closes", cnn1,












adOpenKeyset,
adLockOptimistic

Timer2.Enabled = True

End If

peut etre est ce un problème de synthaxe, en tout












cas le bookmark
se positionne bien sur l'enregistrement que je veu












quand je me
déplace dans ma table.

Fabrice.



-----Message d'origine-----
Hello Fabrice,

Ce que tu cherches c'est le Bookmark (c'est un














long je crois).
Recordset.bookmark rend une valeur unique qui














correspond à la
ligne sur laquelle on se trouve0.
Exemple
rs.find "Nom = 'fabrice'"
MyBM =rs.bookmark rs.movefirst
Debug.print rs.fields("Nom")
---------> Clive rs.bookmark=MyBM
Debug.print rs.fields("Nom")
---------> Fabrice

Notons que le Datagrid a lui une collection de














Bookmarks, ce qui
permet de marquer plusieurs lignes (pour














effacement par exemple)
Grosso modo on fait
'Effacer les bookmarks
If (DataGrid1.SelBookmarks.Count <> 0) Then
DataGrid1.SelBookmarks.Remove 0
End If
'Ajouter un bookmark
DataGrid1.SelBookmarks.Add rs.Bookmark



"fabrizio-r"














a écrit dans le
message de news:2a3d01c42851$60fc5c70














$ Hello a
tous,

Quelqu'un peut il me dire comment je peut recuperer
l'état actif de mon recordset muni d'une table de
plusieurs champs, dans une variable???
De quel type doit etre cette variable???

Merci d 'avance,

Fabrice.


.





.





.







.







.






Avatar
fabrizio-r
je v essayer ca, je te dirai quoi demain car la je dois
partir.

je te remercie pour ton aide.

bonne soirée,

Fabrice.

-----Message d'origine-----
Si tu mets ca dans un controle Adodc, en cliquant sur


une ligne du controle
tu récuperes la position de l'enregistrement via


l'instruction
Adodc1.Recordset.AbsolutePosition et donc tu peux mettre


dans ton sql pour
l'insertion une clause where
"Insert Into Tache_close Select * from Task_manager


where Id_Tache =" &
Rang & ";" où Rang a reçu la valeur de


Adodc1.Recordset.AbsolutePosition

et apres tu fais un execute le sql

Eric

"fabrizio-r"


écrivait
news:2d6801c4287c$86ef9340$:

Oui, moi aussi ton bout de code, m affiche le rang de




mes
enregistrement , cependant je ne vois pas comment l
utiliser pour ce que je souhaite.

Fabrice.

-----Message d'origine-----
re,
Bizarre, car AbsolutePosition retourne la position de


l'enregistrement lu
mais il faut utiliser un curseur coté client :

La proc suivante m'affiche les rangs des






enregistrements
du recordset.

Private Sub Form_Load()
Dim conn1 As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
Dim AccessConnect As String

AccessConnect






= "Provider=Microsoft.Jet.OLEDB.4.0;"
& _
"Data


Source=E:ZZZManipulationADOPlumier2003.mdb"

conn1.ConnectionString = AccessConnect
conn1.Open
rs.CursorLocation = adUseClient
sql = "select * from tclient"

rs.Open sql, conn1, adOpenForwardOnly,


adLockReadOnly, adCmdText
Do While Not rs.EOF
List1.AddItem rs.AbsolutePosition & vbTab &


rs.Fields
("Societe_client")
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
conn1.Close
Set conn1 = Nothing
End Sub

A+
Eric

"fabrizio-r"


écrivait
news:2bd901c4286f$0cc0cf60$:

oui j ai essayé mais cela ne marche pas non plus,








cela
me
revoi toujour tous mes enregistrements et pas celui




dont
je sui entrain de faire la lecture.

Fabrice.

-----Message d'origine----- re, sur ton post










initial
(Question pour
Clive ou autre) je t'ai proposé de tester la










valeur
de la propriété
AbsolutePosition de ton jeu d'enregistrements. As










tu
essayé ?

A+
Eric

"fabrizio-r"






écrivait
news:2a7001c42868$d7638570$:

Oui voila, il faut que je sois sur d'etre








positionné sur la bonne
ligne pour pouvoir effectivement, archiver cette








ligne dans une
autre table, qui possède exactement les mêmes












champs
que la table
d'origine.

Fabrice.

-----Message d'origine-----

"fabrizio-r"

















a écrit dans le
message de news:2b5801c42865$f8eb61c0












$ je doi te
paraitre chiant mai le pb c que mes données ne


Euuh ... un peu

sont pas dans un data grid, elles sont dans












différents textbox et
datacombobox....



Pas de problème. Il suffit d'être sûr d'être










positionné sur la
bonne ligne. Donc tu cherches comment










l'enregistrement à archiver ?


-----Message d'origine-----
Voici comment je le fais (j'ai horreur du SQL
















donc
je le fait
manuellement) Dim rsField As adodb.Field
Dim OKForDel As Boolean
Dim RSFIELDS As adodb.Fields
Suite à un clique droite sur le sélecteur d'un












datagrid, je mets
dans SearchStr
SearchStr = "Ref_etude = " & "'" &












grdDataGrid.Columns (0).Text &
"'" Puis j'ouvre un msgbox demandant
















confirmation,
résultat dans
OKForDel

If OKForDel Then
Attente.Show



DataEnvironment1.Archive_Etudes 'J'utilise le
dataenvironment, mais ADO c'est pareil ' J'ai
















donc
deux recordsets
ouvert, les archives et l'original (fordelete)
















en
mode Read/Write
With












DataEnvironment1 .rsArchive_Etudes.AddNew
.rsForDelete.MoveFirst
.rsForDelete.Find












(SearchStr)
Set RSFIELDS












= .rsForDelete.Fields
For Each rsField In












RSFIELDS
.rsArchive_Etudes












(rsField.Name) =
rsField.Value Next
















rsField
.rsArchive_Etudes.Update .
















rs
ForDelete.Delete
.rsForDele te.UpdateBatch
End With



DataEnvironment1.rsArchive_Etudes.Close
End If
DataEnvironment1.rsForDelete.Close
Set RSFIELDS = Nothing


"fabrizio-r"

















a écrit dans le
message de news:29f001c4285f$4e57af30












$ J ai bien
essayé avec le bookmark mais vb me génère
















l'erreur
suivante :

"Le moteur de la base de données Microsoft Jet ne












reconnait pas
'task_manager.*' en tant que nom de champ ou












expression correcte"

mon code est le suivant :

If btn.Key = "CLOSETASK" Then
Set monrs4 = New ADODB.Recordset

monrs4.Open "INSERT INTO taches_closes SELECT
task_manager.* FROM task_manager WHERE" &
Adodc1.Recordset.Bookmark, cnn1, adOpenKeyset,












adLockOptimistic

Adodc2.Refresh

monrs4.Open "SELECT * FROM taches_closes", cnn1,












adOpenKeyset,
adLockOptimistic

Timer2.Enabled = True

End If

peut etre est ce un problème de synthaxe, en tout












cas le bookmark
se positionne bien sur l'enregistrement que je
















veu
quand je me
déplace dans ma table.

Fabrice.



-----Message d'origine-----
Hello Fabrice,

Ce que tu cherches c'est le Bookmark (c'est un














long je crois).
Recordset.bookmark rend une valeur unique qui














correspond à la
ligne sur laquelle on se trouve0.
Exemple
rs.find "Nom = 'fabrice'"
MyBM =rs.bookmark rs.movefirst
Debug.print rs.fields("Nom")
---------> Clive rs.bookmark=MyBM
Debug.print rs.fields("Nom")
---------> Fabrice

Notons que le Datagrid a lui une collection de














Bookmarks, ce qui
permet de marquer plusieurs lignes (pour














effacement par exemple)
Grosso modo on fait
'Effacer les bookmarks
If (DataGrid1.SelBookmarks.Count <> 0)


















Then
DataGrid1.SelBookmarks.Remove 0
End If
'Ajouter un bookmark
DataGrid1.SelBookmarks.Add rs.Bookmark



"fabrizio-r"



















a écrit dans le
message de news:2a3d01c42851$60fc5c70














$ Hello a
tous,

Quelqu'un peut il me dire comment je peut


















recuperer
l'état actif de mon recordset muni d'une table de
plusieurs champs, dans une variable???
De quel type doit etre cette variable???

Merci d 'avance,

Fabrice.


.





.





.







.







.







.



Avatar
Clive Lumb
On ve reprendre tout à zéro.

Si j'ai bien compris, tu as un enregistrement affiché à l'écran et tu veux
le transférer dans une table d'archivage ?

Cet enregistrement est dans Table1 (disons) et tu veux le copier dans la
Table2 puis l'effacer de la Table1.

Il y a deux façons de faire (parmi tant d'autres).
Soit on utilise le Recordset qui est ouvert à l'écran (rs1 disons), et qui
est donc forcement positionné sur l'enregistrement que tu veux traiter.
Dans ce cas on utilise du code basé sur l'exemple que j'ai posté plus haut :
Ouvrir un recordset dans la table destination (rs2 surTable2)
rs2.addnew
Copier les infos champ par champ de rs1 vers rs2
For each rsField in rs1.Fields
rs2.fields(rsField.Name).Value = rsField.Value
Next rsField
rs2.Update
Effacer la ligne dans Table1
rs1.Delete
rs1.UpdateBatch
Fermer rs2 etc....

Soit on utilise du SQL. Dans ce cas on recupère l'index unique de ton
enregistrement à l'écran (ID_Tache par exemple)
IDpourEffacement = rs1.fields(ID_Tache).Value
Puis on copie l'enregistrement avec une commande SQL.
SQLcmd= "SELECT Table1.* INTO Table2 FROM Table1 WHERE Table1.ID_Tache="
& IDpourEffacement
rs3.Open SQLcmd
rs3.close
Notons que si ID_Tache est une chaine il faut mettre des ' de part et
d'autre. Si c'est numérique il faut mettre trim$(str$(IDpourEffacement)
Ensuite on efface l'enregistrement
SQLcmd= "DELETE * FROM Table1 WHERE Table1.ID_Tache=" & IDpourEffacement
.....

Voilà, j'espère avoir clarifié
Avatar
fabrizio-r
Salut Clive,

Je te remercie beaucoup pour ton aide. Cela fonctionne
maintenant. Dans mes deux tables, j ai ajouté un
champ "ID_tache" d'identification de la tache puis j ai
utilisé les instructions SQL et récupérer dans VB l'ID
que mon recordset affiche.

mon code :

If btn.Key = "CLOSETASK" Then

Dim ID As Integer
Set monrs4 = New ADODB.Recordset
ID = Adodc1.Recordset.Fields("ID_tache").Value

monrs4.Open "INSERT INTO taches_closes SELECT
task_manager.* FROM task_manager WHERE
task_manager.ID_tache=" & ID, cnn1, adOpenKeyset,
adLockOptimistic

Adodc2.Refresh

Timer2.Enabled = True

monrs4.close
End If

Je te remercie beaucoup et encore désole pour avoir pris
pas mal de ton temps.

Fabrice.

-----Message d'origine-----
On ve reprendre tout à zéro.

Si j'ai bien compris, tu as un enregistrement affiché à


l'écran et tu veux
le transférer dans une table d'archivage ?

Cet enregistrement est dans Table1 (disons) et tu veux


le copier dans la
Table2 puis l'effacer de la Table1.

Il y a deux façons de faire (parmi tant d'autres).
Soit on utilise le Recordset qui est ouvert à l'écran


(rs1 disons), et qui
est donc forcement positionné sur l'enregistrement que


tu veux traiter.
Dans ce cas on utilise du code basé sur l'exemple que


j'ai posté plus haut :
Ouvrir un recordset dans la table destination (rs2


surTable2)
rs2.addnew
Copier les infos champ par champ de rs1 vers rs2
For each rsField in rs1.Fields
rs2.fields(rsField.Name).Value = rsField.Value
Next rsField
rs2.Update
Effacer la ligne dans Table1
rs1.Delete
rs1.UpdateBatch
Fermer rs2 etc....

Soit on utilise du SQL. Dans ce cas on recupère l'index


unique de ton
enregistrement à l'écran (ID_Tache par exemple)
IDpourEffacement = rs1.fields(ID_Tache).Value
Puis on copie l'enregistrement avec une commande SQL.
SQLcmd= "SELECT Table1.* INTO Table2 FROM Table1


WHERE Table1.ID_Tache="
& IDpourEffacement
rs3.Open SQLcmd
rs3.close
Notons que si ID_Tache est une chaine il faut mettre


des ' de part et
d'autre. Si c'est numérique il faut mettre


trim$(str$(IDpourEffacement)
Ensuite on efface l'enregistrement
SQLcmd= "DELETE * FROM Table1 WHERE


Table1.ID_Tache=" & IDpourEffacement
......

Voilà, j'espère avoir clarifié


.



Avatar
fabrizio-r
Je te remercie beaucoup pour ton aide. Cela fonctionne
maintenant, grace a ton aide et celle de Clive. Dans mes
deux tables, j ai ajouté un
champ "ID_tache" d'identification de la tache puis j ai
utilisé les instructions SQL et récupérer dans VB l'ID
que mon recordset affiche.

mon code :

If btn.Key = "CLOSETASK" Then

Dim ID As Integer
Set monrs4 = New ADODB.Recordset
ID = Adodc1.Recordset.Fields("ID_tache").Value

monrs4.Open "INSERT INTO taches_closes SELECT
task_manager.* FROM task_manager WHERE
task_manager.ID_tache=" & ID, cnn1, adOpenKeyset,
adLockOptimistic

Adodc2.Refresh

Timer2.Enabled = True

monrs4.close
End If

Je te remercie beaucoup,

Fabrice.

-----Message d'origine-----
je v essayer ca, je te dirai quoi demain car la je dois
partir.

je te remercie pour ton aide.

bonne soirée,

Fabrice.

-----Message d'origine-----
Si tu mets ca dans un controle Adodc, en cliquant sur


une ligne du controle
tu récuperes la position de l'enregistrement via


l'instruction
Adodc1.Recordset.AbsolutePosition et donc tu peux




mettre
dans ton sql pour
l'insertion une clause where
"Insert Into Tache_close Select * from Task_manager


where Id_Tache =" &
Rang & ";" où Rang a reçu la valeur de


Adodc1.Recordset.AbsolutePosition

et apres tu fais un execute le sql

Eric

"fabrizio-r"


écrivait
news:2d6801c4287c$86ef9340$:

Oui, moi aussi ton bout de code, m affiche le rang de




mes
enregistrement , cependant je ne vois pas comment l
utiliser pour ce que je souhaite.

Fabrice.

-----Message d'origine-----
re,
Bizarre, car AbsolutePosition retourne la position de


l'enregistrement lu
mais il faut utiliser un curseur coté client :

La proc suivante m'affiche les rangs des






enregistrements
du recordset.

Private Sub Form_Load()
Dim conn1 As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
Dim AccessConnect As String

AccessConnect






= "Provider=Microsoft.Jet.OLEDB.4.0;"
& _
"Data


Source=E:ZZZManipulationADOPlumier2003.mdb"

conn1.ConnectionString = AccessConnect
conn1.Open
rs.CursorLocation = adUseClient
sql = "select * from tclient"

rs.Open sql, conn1, adOpenForwardOnly,


adLockReadOnly, adCmdText
Do While Not rs.EOF
List1.AddItem rs.AbsolutePosition & vbTab &


rs.Fields
("Societe_client")
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
conn1.Close
Set conn1 = Nothing
End Sub

A+
Eric

"fabrizio-r"


écrivait
news:2bd901c4286f$0cc0cf60$:

oui j ai essayé mais cela ne marche pas non plus,








cela
me
revoi toujour tous mes enregistrements et pas celui




dont
je sui entrain de faire la lecture.

Fabrice.

-----Message d'origine----- re, sur ton post










initial
(Question pour
Clive ou autre) je t'ai proposé de tester la










valeur
de la propriété
AbsolutePosition de ton jeu d'enregistrements. As










tu
essayé ?

A+
Eric

"fabrizio-r"






écrivait
news:2a7001c42868$d7638570$:

Oui voila, il faut que je sois sur d'etre








positionné sur la bonne
ligne pour pouvoir effectivement, archiver cette








ligne dans une
autre table, qui possède exactement les mêmes












champs
que la table
d'origine.

Fabrice.

-----Message d'origine-----

"fabrizio-r"

















a écrit dans le
message de news:2b5801c42865$f8eb61c0












$ je doi te
paraitre chiant mai le pb c que mes données ne


Euuh ... un peu

sont pas dans un data grid, elles sont dans












différents textbox et
datacombobox....



Pas de problème. Il suffit d'être sûr d'être










positionné sur la
bonne ligne. Donc tu cherches comment










l'enregistrement à archiver ?


-----Message d'origine-----
Voici comment je le fais (j'ai horreur du SQL
















donc
je le fait
manuellement) Dim rsField As adodb.Field
Dim OKForDel As Boolean
Dim RSFIELDS As adodb.Fields
Suite à un clique droite sur le sélecteur d'un












datagrid, je mets
dans SearchStr
SearchStr = "Ref_etude = " & "'" &












grdDataGrid.Columns (0).Text &
"'" Puis j'ouvre un msgbox demandant
















confirmation,
résultat dans
OKForDel

If OKForDel Then
Attente.Show



DataEnvironment1.Archive_Etudes 'J'utilise le
dataenvironment, mais ADO c'est pareil ' J'ai
















donc
deux recordsets
ouvert, les archives et l'original (fordelete)
















en
mode Read/Write
With












DataEnvironment1 .rsArchive_Etudes.AddNew
.rsForDelete.MoveFirst
.rsForDelete.Find












(SearchStr)
Set RSFIELDS












= .rsForDelete.Fields
For Each rsField In












RSFIELDS
.rsArchive_Etudes












(rsField.Name) =
rsField.Value Next
















rsField
.rsArchive_Etudes.Update


















.
rs
ForDelete.Delete
.rsForDele


















te.UpdateBatch
End With



DataEnvironment1.rsArchive_Etudes.Close
End If



















DataEnvironment1.rsForDelete.Close
Set RSFIELDS = Nothing


"fabrizio-r"

















a écrit dans le
message de news:29f001c4285f$4e57af30












$ J ai bien
essayé avec le bookmark mais vb me génère
















l'erreur
suivante :

"Le moteur de la base de données Microsoft Jet


















ne
reconnait pas
'task_manager.*' en tant que nom de champ ou












expression correcte"

mon code est le suivant :

If btn.Key = "CLOSETASK" Then
Set monrs4 = New ADODB.Recordset

monrs4.Open "INSERT INTO taches_closes SELECT
task_manager.* FROM task_manager WHERE" &
Adodc1.Recordset.Bookmark, cnn1, adOpenKeyset,












adLockOptimistic

Adodc2.Refresh

monrs4.Open "SELECT * FROM taches_closes",


















cnn1,
adOpenKeyset,
adLockOptimistic

Timer2.Enabled = True

End If

peut etre est ce un problème de synthaxe, en


















tout
cas le bookmark
se positionne bien sur l'enregistrement que je
















veu
quand je me
déplace dans ma table.

Fabrice.



-----Message d'origine-----
Hello Fabrice,

Ce que tu cherches c'est le Bookmark (c'est un














long je crois).
Recordset.bookmark rend une valeur unique qui














correspond à la
ligne sur laquelle on se trouve0.
Exemple
rs.find "Nom = 'fabrice'"
MyBM =rs.bookmark rs.movefirst
Debug.print rs.fields("Nom")
---------> Clive rs.bookmark=MyBM
Debug.print rs.fields("Nom")
---------> Fabrice

Notons que le Datagrid a lui une collection de














Bookmarks, ce qui
permet de marquer plusieurs lignes (pour














effacement par exemple)
Grosso modo on fait
'Effacer les bookmarks
If (DataGrid1.SelBookmarks.Count <> 0)


















Then
DataGrid1.SelBookmarks.Remove 0
End If
'Ajouter un bookmark
DataGrid1.SelBookmarks.Add rs.Bookmark



"fabrizio-r"



















a écrit dans le
message de news:2a3d01c42851$60fc5c70














$ Hello a
tous,

Quelqu'un peut il me dire comment je peut


















recuperer
l'état actif de mon recordset muni d'une table




















de
plusieurs champs, dans une variable???
De quel type doit etre cette variable???

Merci d 'avance,

Fabrice.


.





.





.







.







.







.



.



Avatar
Clive Lumb
Bravo !
N'oublie pas de détruire ton Recordset à la sortie de la fonction si tu a
fini avec.
Set monrs4=Nothing

Clive

"fabrizio-r" a écrit dans le message
de news:31e901c42907$0dca05f0$
Salut Clive,

Je te remercie beaucoup pour ton aide. Cela fonctionne
maintenant. Dans mes deux tables, j ai ajouté un
champ "ID_tache" d'identification de la tache puis j ai
utilisé les instructions SQL et récupérer dans VB l'ID
que mon recordset affiche.

mon code :

If btn.Key = "CLOSETASK" Then

Dim ID As Integer
Set monrs4 = New ADODB.Recordset
ID = Adodc1.Recordset.Fields("ID_tache").Value

monrs4.Open "INSERT INTO taches_closes SELECT
task_manager.* FROM task_manager WHERE
task_manager.ID_tache=" & ID, cnn1, adOpenKeyset,
adLockOptimistic

Adodc2.Refresh

Timer2.Enabled = True

monrs4.close
End If

Je te remercie beaucoup et encore désole pour avoir pris
pas mal de ton temps.

Fabrice.

-----Message d'origine-----
On ve reprendre tout à zéro.

Si j'ai bien compris, tu as un enregistrement affiché à


l'écran et tu veux
le transférer dans une table d'archivage ?

Cet enregistrement est dans Table1 (disons) et tu veux


le copier dans la
Table2 puis l'effacer de la Table1.

Il y a deux façons de faire (parmi tant d'autres).
Soit on utilise le Recordset qui est ouvert à l'écran


(rs1 disons), et qui
est donc forcement positionné sur l'enregistrement que


tu veux traiter.
Dans ce cas on utilise du code basé sur l'exemple que


j'ai posté plus haut :
Ouvrir un recordset dans la table destination (rs2


surTable2)
rs2.addnew
Copier les infos champ par champ de rs1 vers rs2
For each rsField in rs1.Fields
rs2.fields(rsField.Name).Value = rsField.Value
Next rsField
rs2.Update
Effacer la ligne dans Table1
rs1.Delete
rs1.UpdateBatch
Fermer rs2 etc....

Soit on utilise du SQL. Dans ce cas on recupère l'index


unique de ton
enregistrement à l'écran (ID_Tache par exemple)
IDpourEffacement = rs1.fields(ID_Tache).Value
Puis on copie l'enregistrement avec une commande SQL.
SQLcmd= "SELECT Table1.* INTO Table2 FROM Table1


WHERE Table1.ID_Tache="
& IDpourEffacement
rs3.Open SQLcmd
rs3.close
Notons que si ID_Tache est une chaine il faut mettre


des ' de part et
d'autre. Si c'est numérique il faut mettre


trim$(str$(IDpourEffacement)
Ensuite on efface l'enregistrement
SQLcmd= "DELETE * FROM Table1 WHERE


Table1.ID_Tache=" & IDpourEffacement
......

Voilà, j'espère avoir clarifié


.



1 2