Formulier met meerdere records in één keer

Status
Niet open voor verdere reacties.

JessicaVdb

Gebruiker
Lid geworden
11 jul 2017
Berichten
17
Hallo iedereen

Mijn vraag is of het mogelijk is om een formulier in MS Access te maken waar je meerdere records in één keer kan ingeven. De bedoeling is eigenlijk dat een team member die meerdere opleidingen heeft gekregen, alle opleiding in één keer kunnen ingegeven worden en toch verschillende records zijn.

Bijvoorbeeld:
Team member: Jos
Opleidingen: Basis, gevorderd, Maximum.

Deze opleidingen zouden telkens een nieuwe record moeten zijn, maar het zou handig zijn moest de team member zelf niet elke keer opnieuw worden ingegeven. Is dit mogelijk?

Alvast bedankt!

JessicaVdb
 
Dat kan zeker met een beetje VBA codering maar heb je geen voorbeeld DB waar je dit wilt inbouwen?
 
Dit is een afbeelding van mijn formulier nu. Het is dus mijn bedoeling dat de combo box Station elke keer deze rij (Station, level, Revision) wordt ingegeven, de record opgeslagen wordt en er dus een nieuwe training kan worden ingegeven met dezelfde team member en dergelijke. Ik heb echter al in internet gevonden dat je beter een List box zou gebruiken, maar ik snap niet helemaal hoe deze dan gebruikt moet worden.

Knipsel.PNG
 
Fijn dat je een antwoord hebt gevonden, maar een forum bestaatbij de gratie van uitwisseling van kennis. En de enige kennisverrijking die een lezer nu heeft, is dat jij een oplossing hebt, maar niet wélke. :). Het zou mooi zijn als je de oplossing er nog even bij kan doen.
Overigens heb ik de perfecte oplossing voor dit probleem al een paar jaar geleden uitgewerkt in een voorbeeldje (met listbox), dus mocht je die nog willen hebben, dan zie ik dat wel verschijnen!
 
Fijn dat je een antwoord hebt gevonden, maar een forum bestaatbij de gratie van uitwisseling van kennis. En de enige kennisverrijking die een lezer nu heeft, is dat jij een oplossing hebt, maar niet wélke. :). Het zou mooi zijn als je de oplossing er nog even bij kan doen.
Overigens heb ik de perfecte oplossing voor dit probleem al een paar jaar geleden uitgewerkt in een voorbeeldje (met listbox), dus mocht je die nog willen hebben, dan zie ik dat wel verschijnen!

Ik zou jou oplossing graag alsnog hebben, aangezien dit de eigenlijke bedoeling was.

Ik heb als oplossing gevonden om de verschillende combo boxen die voor elke record apart is leeg te maken nadat de record opgeslagen is. Daarna kan er een nieuwe worden gemaakt, zonder dat de naam en dergelijke verdwijnt.
 
Ik had wat werk om nog wat fouten uit de db te halen. Dat heb ik gisteren afgerond, dus hier de werkende versie. Het gaat om het menu dat je opent met knop 4.
 

Bijlagen

  • Keuzelijsten v2.zip
    128,4 KB · Weergaven: 50
Het is mij gelukt om meerdere rijen aan te maken hiermee, echter maakt hij altijd een lege rij aan en daarna pas alle rijen die nodig zijn.

Ook heb ik nog een probleem met veranderende gegevens. Bij elke rij zijn er twee gegevens die (zo goed als) overal verschillend zijn.

Dit is de code die ik nu heb:
Code:
Dim db As DAO.Database
            Dim rs As DAO.Recordset
            Dim ctl As Control
            Dim varItem As Variant

            Set db = CurrentDb()
            Set rs = db.OpenRecordset("TrainingT", dbOpenDynaset, dbAppendOnly)
  
            Set ctl = Me.StationCB_T
            For Each varItem In ctl.ItemsSelected
                rs.AddNew
                rs!ClockNumber = ClockNumber
                Me.RevID.Requery
                Me.RevID.Selected(0) = True
                Me.txtRevID = Me.RevID
                rs!RevID = txtRevID
                rs!Subject = Subject
                rs!TankType = TankTypeCB
                rs!Station = ctl.ItemData(varItem)
                Me.Revision.Requery
                Me.Revision.Selected(0) = True
                Me.txtRevision = Me.Revision
                rs!Revision = txtRevision
                rs![Level of training] = "ok"
                rs!Trainer = TrainerTCB
                rs!DateTraining = txtDate
                rs.Update
            Next varItem
 
Ik snap die requery opdrachten tussendoor niet; dat zou niet hoeven als de db goed is opgezet. En ik zie ook niet waarom er een lege record wordt aangemaakt, al kan dat er best mee te maken hebben. Dus wellicht dat een voorbeeld van jouw kant, met dummy data uiteraard, e.e.a. duidelijker maakt waar het probleem ligt.
 
Ik heb gevonden hoe ik de variabele items kan laten toevoegen. Echter maakt mijn database van het eerste geselecteerde item twee records. Dit komt volgens mij door dit stuk code dat te vroeg komt 'rs.addNew' echter als ik deze onderaan zet, krijg ik een foutmelding.

Dit is de code:
Code:
            Dim db As DAO.Database
            Dim rs As DAO.Recordset
            Dim ctl As Control
            Dim varItem As Variant
            Dim strSQL As String

            Set db = CurrentDb()
            Set rs = db.OpenRecordset("TrainingT", dbOpenDynaset, dbAppendOnly)
            
            For Each varItem In Me.StationCB_T.ItemsSelected
                Me.txtStation = Me.StationCB_T.Column(0, varItem)
                
                Me.Revision.Requery
                Me.Revision.Selected(0) = True
                
                Me.RevID.Requery
                Me.RevID.Selected(0) = True
    
                Me.txtRevID = RevID.ItemData(RevID.ListIndex)
                Me.txtRevision = Revision.ItemData(Revision.ListIndex)
                
                rs.AddNew
                rs!ClockNumber = ClockNumber
                rs!RevID = txtRevID
                rs!Subject = Subject
                rs!TankType = TankTypeCB
                rs!Station = Me.StationCB_T.Column(0, varItem)
                rs!Revision = txtRevision
                rs![Level of training] = "ok"
                rs!Trainer = TrainerTCB
                rs!DateTraining = txtDate
                rs.Update

            Next varItem

            Set rs = Nothing
            Set db = Nothing
            
            DoCmd.GoToRecord , , acNewRec
            Me.StationCB_T.Visible = False
 
Het is me op een Eigen manier toch gelukt. De code is hetzelfde gebleven. Ik had opgemerkt dat ik in het formulier alle tekstvakken toekende aan een veld uit de tabel. Daardoor kwam de eerste selectie er dus twee keer in.
 
Het kan allemaal een stuk simpeler, maar dat had ik op basis van je code ook wel verwacht. Je hebt inderdaad de fout gemaakt door het formulier te koppelen aan de tabel; dat moet je niet doen want dan gebruik je het formulier al om records aan te maken, niet de knop. Dus het formuiler zelfstandig en de objecten dan automatisch ook niet gekoppeld aan een veld. Verder zou ik de keuzelijst <Clocknumber> correct gebruiken, en die instellen op 2 kolommen en de kolom [Clocknummer] vooraan zetten en verbergen. De kolombreedten worden dan: 0cm;5cm. Je ziet dan de naam, maar slaat het nummer op (en dat moet ook). Je code kan dan zo:

Code:
Private Sub Knop9_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim varItem As Variant

    Set db = CurrentDb()
    Set rs = db.OpenRecordset("TrainingT", dbOpenDynaset, dbAppendOnly)
    With Me.Station
        For Each varItem In .ItemsSelected
            rs.AddNew
            rs!Clocknumber = Me.Clocknumber
            rs!Subject = Me.Subject
            rs!TankType = Me.TankType
            rs!Station = .ItemData(varItem)
            rs!Level = "ok"
            rs.Update
        Next varItem
    End With
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan