[VBA] Formulaire continu avec un recordset

Formulaire continu avec un recordset [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 30-06-2010 à 22:11:12    

Bonjour à tous :)
Voilà j'ai un petit problème de conception.
Je dois créer sous Access un formulaire continu pour lequel les modifications n'altèrent pas la base de données. Les modifications ne doivent être prises en compte uniquement lors d'un clic d'un bouton.  
Pour cela, j'avais donc décidé de créer un recordset sur l'action du load de mon formulaire car c'est à priori la façon de faire. J'arrive donc à créer mon recordset (à priori), mais je n'arrive pas du tout à afficher les informations dans mon formulaire. Je n'arrive pas du tout à savoir ce qu'il faut faire avant et après.
L'exemple suivant qui est "simpliste" doit être agrémenté, mais je ne vois pas trop ce que je dois faire de plus surtout au niveau du formulaire.  

Code :
  1. Dim rs As DAO.Recordset
  2.     Set rs = CurrentDb.OpenRecordset("reqTest" )
  3.     Set Me.Recordset = rs
  4.     If Not rs.BOF And Not rs.EOF Then
  5.         rs.MoveFirst
  6.         While Not rs.EOF
  7.             DoCmd.GoToRecord , , acNewRec
  8.             Me.Nom = rs!Nom
  9.             rs.MoveNext
  10.         Wend
  11.     End If
  12.     rs.Close


 
Si vous pouviez m'aider, ca serait bien cool. Merci :)  

Reply

Marsh Posté le 30-06-2010 à 22:11:12   

Reply

Marsh Posté le 02-07-2010 à 16:04:50    

Hello
 
Deja sous access (et Cie) on ne donne pas "Nom" pour un nom de champ, derriere ca fou le caca...
 
A titre perso je passe comme ca :

Code :
  1. DoCmd.OpenForm "Formulaire2"
  2.     Set Rs = New ADODB.Recordset
  3.     Rs.Open "Select * From reqTest", _
  4.     CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  5.     Set Forms("Formulaire2" ).Recordset = Rs


Dans la source on a bien une requete Select * From reqTest et donc nos controles TextBox etc. sont liés aux champs du recordset.


Message édité par SuppotDeSaTante le 02-07-2010 à 16:05:49

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 02-07-2010 à 23:04:38    

D'accord, mais soit je me trompe de voie, soit j'ai pas capté un truc. Le recordset fonctionne. J'ai testé comme tu me l'as dit, et comme je l'avais fait un peu avant, mais le problème est que les champs restent liés à la BD (les changements faits se font directement sur la BD).
 
Donc en gros ce que je souhaite faire :
- Ce que mon recordset me renvoie, je l'affiche dans un formulaire continu
- Ces mêmes lignes sont modifiables par l'utilisateur, mais n'altèrent en aucun cas la BD (juste visuel)
- L'utilisateur peut valider ses modifications par l'appui d'un bouton. Seulement dans ce cas là, les modifications seront enregistrés dans la base de données. Cela induit le parcours du recordset modifié (ça aussi, je n'arrive pas trop à l'imaginer).
 
Merci pour votre aide :)
 

Reply

Marsh Posté le 02-07-2010 à 23:32:29    

Bah avec Access, si ce n'est passé par des tables temporaires, vides pour la création, alimentées pour la modification, il n'y a pas de solution a la connaissance...
Du moment que ton contrôle est lié a un champ, ça le modifie.
Sinon, passer par des contrôles indépendants et jouer avec des requêtes ajouts et mise a jour.


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 03-07-2010 à 12:15:05    

Merci de m'aider dje69r.
Si je récapitule l'idée :
1. Créer une table
2. Mettre les infos que je veux afficher (dans mon formulaire) dans cette table
3. Mettre la source de mon formulaire sur cette table temporaire (comment faire ça ?)
4. Si le bouton est cliqué, je parcours la table temporaire en effectuant les update sur la table valide

 

C'est ça ?


Message édité par Genuine le 03-07-2010 à 12:17:17
Reply

Marsh Posté le 03-07-2010 à 18:10:07    

Pour ceux que ca intéresserait voilà à peu prêt le code brouillon auquel j'arrive. Il reste plus qu'à effectuer les update sur la vrai table à partir de la table temporaire (ça devrait pas poser de problèmes).

Code :
  1. Private Sub Commande6_Click()
  2.     'Enregistrement de la table temporaire dans la "vrai" table
  3.    
  4.     DoCmd.RunCommand acCmdSaveRecord
  5.     Dim cnx As ADODB.Connection
  6.     Dim rst As ADODB.Recordset
  7.     Set cnx = CurrentProject.Connection
  8.     Set rst = New ADODB.Recordset
  9.     rst.Open "SELECT * FROM testbis", cnx
  10.     Dim Nom As String
  11.     Dim prenom As String
  12.     Do Until rst.EOF
  13.         MsgBox rst![Prénom]
  14.         rst.MoveNext
  15.     Loop
  16.     cnx.Close
  17. End Sub
  18. Private Sub Form_Load()
  19.     'Creation de la table temporaire qui va récupérer les informations lors des modifications
  20.     Dim cnx As New ADODB.Connection
  21.     Set cnx = CurrentProject.Connection
  22.    
  23.     cnx.Execute "SELECT * INTO testbis FROM test where Prénom = 'Romain'"
  24.     Me.RecordSource = "testbis"
  25.     cnx.Close
  26. End Sub


 
 
Merci, sans toi j'aurais mis du temps à trouver cette idée :)

Reply

Marsh Posté le 03-07-2010 à 22:07:00    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed