Insert into + boucle

Signaler
Messages postés
18
Date d'inscription
mercredi 8 octobre 2008
Statut
Membre
Dernière intervention
2 février 2009
-
Messages postés
18
Date d'inscription
mercredi 8 octobre 2008
Statut
Membre
Dernière intervention
2 février 2009
-
Bonjour,
J'ai créé un formulaire avec trois listes déroulantes. La première contient l'identifiant Relevé terrain (LST_id_RELEVE), la seconde les observateurs disponibles (LST_search_OBS) de la T_OBSERVATEUR et la troisième les observateurs sélectionnés (LSTselectOBS) à partir de la liste des observateurs disponibles qui sont eux stockés dans la table Observateurs_Selectionnes.
Sur click d'un bouton de commande je voudrais insérer l'ensemble les identifiants observateurs sélectionner CONobs avec pour chacun l'identifiant relevé dans une table Constater qui est une table de relation entre relevé et observateur.


CONobs           CONrel
1                     REL-001
4                     REL-001
7                     REL-001
Je pense qu'il convient d'utiliser une boucle.
Voici une ébauche de mon code qui ne donne aucun enregistrement dans ma table Constater. J'ai copié une partie du code et je ne maitrise pas les ItemsSelected et les itemData.


Dim strSql As String
    Dim X As Variant
    Dim f As Form


Set f = Forms!F_SAISIE_Observation_Terrain


With LSTselectOBS
For Each X In .ItemsSelected
strSql = "INSERT INTO Constater(CONobs, CONrel) VALUES('" & (.ItemData(X)) & "', '" & f!LST_ID_RELEVE & "');"
Next
.Requery
End With
DoCmd.SetWarnings False
DoCmd.RunSQL strSql
DoCmd.SetWarnings True


Précision, je ne souhaite pas devoir appuyer un à un les observateurs sélectionnés pour que l'insertion se face. C'est bien l'intérêt de la boucle? Sinon,  n'est -t-il pas préférable d'utiliser le contenant de la table Observateurs_selectionnés plutôt que les values de la liste LSTselectOBS dans mon Insert into?
Bref, toutes vos suggestions sont bonnes!
Merci

2 réponses

Messages postés
18
Date d'inscription
mercredi 8 octobre 2008
Statut
Membre
Dernière intervention
2 février 2009

Bonjour,
Mon problème est résolu, j'avais juste pas penser mettre selection 'étendu' dans propriété de ma liste.
Par contre, j'ai crée un bouton "Annuler la saisie". Comment faire pour que ma liste devienne vierge. J'ai un programme qui supprime la selection de la liste :
With LSTselectOBS
                For Each X In .ItemsSelected
CurrentDb.Execute "DELETE * FROM Observateurs_selectionnes WHERE Observateurs_selectionnes.OBSERVATEUR = " & fCVal(.ItemData(X), "N") & ""
                Next
                .Requery
            End With
            LSTsearchOBS.Requery

Mais j'aimerais que la suppression se fasse pour toute la liste sans sélection. Pas un ItemsSelected mais un AllValues par exemple.
Merci
Messages postés
18
Date d'inscription
mercredi 8 octobre 2008
Statut
Membre
Dernière intervention
2 février 2009

Il faut utiliser la fonction RowSource pour viser le contenu de la liste.
mazonedeliste.rowSource = ""
et pour sélectionner toute ma liste automatiquement:
Dim i as long
For i = 0 To Me.mazonedeliste.ListCount - 1
Me.mazonedeliste.Selected(i) = True
Next i
Bonne journée