Records toevoegen met Formulier, maar hoe?

Status
Niet open voor verdere reacties.

bergjes

Gebruiker
Lid geworden
13 apr 2010
Berichten
18
Hallo,

Ik moet een heel stel nieuwe records invoeren in een tabel. Graag zou ik dit willen automatiseren met een (voor ingevuld) formulier. Hopelijk is dat mogelijk.

De records die ik moet invoeren zijn als volgt ingedeeld:
klantnummer - boekjaar - rekeningnummer - bedrag

Per klant moeten er altijd 10 vaste rekeningnummers, met verschillende bedragen ingevuld worden.

Het handigst zou zijn als ik 1 formulier per klant heb, waarop ik eenmalig het klantnummer en boekjaar invul, en vervolgens alleen de bedragen hoef in te vullen bij de 10 vaste rekeningnummers.

Feitelijk worden er dus op het formulier 10 records vastgelegd.

Maar ik heb geen flauw idee hoe ik dit op 1 formulier kan doen

Ik heb de gegevens nodig om in een kruistabel te analyseren.

Ik hoop dat de bedoeling duidelijk is, en dat er iemand is die mij de goede kant op kan helpen.

Alvast bedankt,
Erik
 
Je kunt het met deze code proberen:

Code:
iKlant = [B][COLOR="blue"]Me.txtKlantnummer[/COLOR][/B]
iBoekjaar = [B][COLOR="blue"]Me.txtBoekjaar[/COLOR][/B]

For Each ctl In Controls
    With ctl
        Select Case .ControlType
            Case acTextBox
                If Left(.Name, 5) = "Tekst" Or Left(.Name, 4) = "text" Then
                    sVeld = .Tag
                    sWaarde = Nz(Me(sVeld).Value)
                    With CurrentDb.OpenRecordset("SELECT * FROM [B][COLOR="Blue"]TabelNaam[/COLOR][/B]")
                        .AddNew
                        ![B][COLOR="blue"]Klantnr [/COLOR][/B]= iKlant
                        ![B][COLOR="blue"]Boekjaar [/COLOR][/B]= iBoekjaar
                        ![B][COLOR="blue"]Datum [/COLOR][/B]= Date
                        ![B][COLOR="blue"]Tijd[/COLOR][/B].Value = TimeSerial(Hour(Now()), Minute(Now()), 0)
                        ![B][COLOR="blue"]Rekeningnr [/COLOR][/B]= sVeld
                        ![B][COLOR="blue"]Bedrag [/COLOR][/B]= sWaarde
                        .Update
                        .Close
                    End With
                    If Me.Dirty Then Me.Dirty = False
                End If
        End Select
    End With
Next ctl
Je moet wel een paar dingen goed instellen, anders gaat het uiteraard niet werken...
Om te beginnen: alle blauw teksten. Die verwijzen naar formuliervelden, dan wel tabellen.
Verder heb je een aantal rekeningvelden op je formulier staan. Daarvan moet de naam met tekst of text beginnen. Alle andere tekstvakken moet je een ander voorvoegsel geven, bijvoorbeeld txt, zoals bij Boekjaar in mijn voorbeeld.
De volgende aanpassing: Bij de Eigenschap <Extra Info> (Tag in het engels) typ je het rekeningnummer dat je wilt opslaan in het veld Rekeningnummer.

Hoe werkt het verder? Eerst worden de vaste gegevens (klantnummer en boekjaar) opgehaald uit het formulier. De code loopt daarna door alle tekstvakken heen, en haalt uit de tekstvakken met de juiste naam (tekst of text) het rekeningnummer op, en het ingetypte bedrag.
vervolgens worden alle gegevens aan de aangegeven tabel toegevoegd.
Succes ermee...
 
Bedankt voor de snelle reactie.

Ga het eens proberen.

Laat het wel weten of ik het aan de praat krijg.

Erik
 
Ik wacht af....
 
Hoi Michel.

Ik ben geen crack met het gebruik van Access dus vergeef me als de vragen te voor de hand lijken te liggen.

Ik heb je code in het VBA gedeelte van "Details" geplakt? is dat goed?

Want het formulier werkt nog niet zoals ik het graag zou willen.
Ik neem aan dat de besturingselementen gewoon de database velden zijn?

Als ik nu het formulier invul dan wordt er slecht 1 record aangemaakt, met het laatst ingevuld bedrag, en het veld rekeningnr wordt niet gevuld.

Als ik een bedrag invul dan verschijnt dit bedrag direct ook in de andere velden "bedrag".

Groetjes,
Erik
 
De code die ik heb gemaakt moet je aan een knop hangen, en niet op de Detailsectie. Het maakt daarbij niet uit hoe de knop heet; je hoeft alleen maar de code tussen Private Sub.... en'... End Sub te plakken, dan zou het in beginsel moeten werken.
Da's één.
De Besturingselementbron van een tekstvak is doorgaans het Tabelveld dat je gebruikt om een waarde in op te slaan. Als je de tabelstructuur zodanig hebt ingericht dat je voor elk rekeningnummer een eigen veld hebt, dan hoef je (denk ik) niet zo'n ingewikkelde constructie te gebruiken, want dan hang je alle formuliervelden aan een tabelveld, en dan ben je gelijk klaar. Als je een nieuwe waarde toevoegt, wordt-ie gelijk in de tabel opgeslagen. Gebruik je (zoals ik denk) één rekeningveld, en één waardeveld, waar je met verschillende records verschillende rekeningen en waarden wilt opslaan, dan heb je de constructie dus nodig. In dat geval hoef je geen Besturingselementbron te gebruiken, want daar kijk ik verder niet naar. De tekstvakken zijn dan niet-gebonden.
Een (groot) voordeel van het werken met Tags (Extra Info veld) is dat je een tekstveld kunt instellen met de tag, en vervolgens tig keer kunt kopieren. Het tekstveld krijgt dan de naam Tekst#### met een willekeurig nummer, en de tag wordt keurig mee gekopieerd. En aangezien de tag de Veldnaam bevat, kan die netjes worden uitgelezen door de procedure!
Omdat elk veld apart wordt uitgelezen en opgeslagen, krijg je, als het goed is, bij 10 rekeningnummers dus 10 records. Loop anders met een Onderbrekingspunt door de code als je op de knop klikt; dan zie je gauw genoeg of hij het doet...
Kom je er niet uit: zet dan een voorbeeldje neer, met testgegevens, dan kijk ik er wel even naar.
 
Je bent super.

Ga nog even aan de slag, en laat het je morgen weten of het gelukt is.

Erik
 
Hoi Michel,

ik ben gisterenavond bezig geweest.
Heb van alles geprobeerd, maar krijg het niet aan de gang.

Ik hoop dat jij zo vriendelijk wil zijn om er even naar te kijken.

Zoals ik het nu heb ingericht krijg ik steeds een foutmelding bij het "opslaan" van de records.

Misschien dat je ook je mening kan geven over de opzet van het hele gebeuren?

De bedoeling is dat ik van ons klanten bestand een statistiek maak van de "Winst en Verliesrekening".

Er moet uiteindelijk een "gemiddelde" uitkomen in bedragen en procenten, deze gemiddelde moeten gepresenteerd worden met daarnaast de cijfers van de klant.

Mijn eerste opzet was per Klant 1 record, met daarin de V&W gegevens, maar dan krijg ik het niet voor elkaar om gemiddelde te berekenen met behulp van een kruistabel.

In ieder geval alvast bedankt voor je moeite.

Erik
 

Bijlagen

Als je mijn posts een beetje volgt, zou je kunnen weten dat ik met een grote boog om 2007 heenloop :) ... Heb je 'm ook in 2003 format?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan