automatisch nieuwe record aanmaken bij openen form

Status
Niet open voor verdere reacties.

pol4962

Gebruiker
Lid geworden
30 mei 2009
Berichten
5
Hallo,

Ik heb een form 'offerte'. Op deze form heb ik een command button 'bestelling maken', waarop ik een aantal gegevens van deze form kopieer naar een form 'bestelling'.
Nu heb ik het probleem dat de gegevens op de form 'bestelling' overschreven worden elke keer ik op de button klik.
Het is dus de bedoeling dat er elke keer een nieuwe record aangemaakt wordt als ik op de button klik.
Kan iemand heplen?
 
acNewRec

Ik neem aan dat je bij de knop "bestelling maken" een stuk VBA code hebt staan?!?
Hier zal dan waarschijnlijk iets staan als:

Code:
stDocName = "Bestelling"
DoCmd.OpenForm stDocName

De regel die je hieraan moet toevoegen is:
Code:
DoCmd.GoToRecord , , acNewRec

Geeft dit antwoord op je vraag?
 
Hallo,

ik heb deze regel toegevoegd, maar het werkt nog niet zoals het moet.
Hieronder de code

Private Sub addcontract_Click()
Dim stDocName As String
Dim stLinkCriteria As String
stLinkCriteria = Me.Naam & "|" & Me.bedrag & "|" & Me.btw


DoCmd.Close
stDocName = "contract maken"
DoCmd.OpenForm stDocName, , , , , , stLinkCriteria
DoCmd.GoToRecord , , acNewRec

End Sub

Hij maakt wel ene nieuw record aan, maar overschrijft de gegevens in de vorige record.
 
Wat bedoel je hiermee precies? Als je een nieuw record hebt, staan daar nog geen gegevens in ;) De knop die je hebt, zoekt een bestellingsrecord op, en laat dan de daarin aanwezige gegevens zien.
Ik vermoed, dat je een nieuw record wilt maken vanuit het formulier Offerte, en gegevens mee wilt nemen naar Bestelling. Dat kun je doen met het OpenArgs element van het fomulier.

Hoe werkt het?
Om te beginnen: maak een apart formulier, kan uiteraard een kopie zijn van het huidige formulier, en zet daar de eigenschappen van op <Eigenschappen>, <Gegevens>,<Gegevensinvoer>=Ja. Hiermee wordt dit formulier altijd gebruikt om nieuwe records te maken, en dat is uiteraard wat je wilt.

Er zijn twee dingen die je moet regelen als je gegevens wilt meenemen van formulierA naar een nieuw record op formulierB. Ten eerste: je moet een string vastleggen in een variabele, die je meegeeft aan het commando waarmee je formulierB opent. Een beetje vergelijkbaar met het commando
DoCmd.OpenForm stDocName, , , , , , stLinkCriteria
In de string stLinkCriteria leg je de waarden uit de formuliervelden vast die je mee wilt nemen naar het nieuwe record op formulierB, waarbij je een string maakt met een specifiek scheidingsteken.

Voorbeeldje:
Ik heb de velden [KlantID], [OfferteID]; [OfferteDatum] die in het nieuwe record moeten komen.
De string wordt dan:

Code:
stLinkCriteria=Me.[KlantID].Value & "|" & Me.[OfferteID].Value & "|" & Me.[OfferteDatum].Value

De opdracht om het formulier te openen luidt nu:

Code:
DoCmd.OpenForm stDocName, , , , , , stLinkCriteria

In Formulier moeten de gegevens uiteraard weer worden 'ontleed', en op het formulier gezet. Dat doe je bij het OnLoad event van het formulier. Dat ziet er ongeveer zo uit:

Code:
Private Sub Form_Load()
'------------------------------------------------------------------------------------------------
'Inlezen van de variabelen
'------------------------------------------------------------------------------------------------
If Not IsNull(Me.OpenArgs) Then
    Dim strLijst() As String
    On Error Resume Next
    strLijst = Split(Me.OpenArgs, "|", -1)
    Me.[KlantID]= strLijst(0)
    Me.OfferteID= strLijst(1)
    Me.OfferteDatum= strLijst(2)
End If

De bedoeling is als volgt: je kunt aan een formulier maar één variabele meegeven, dus als je meer velden wilt vullen, zul je een variabele moeten maken waar alle variabelen inzitten. Dat hebben we gedaan door tussen alle variabelen het teken | te zetten.
Op het tweede formulier moet de variabele gesplitst worden; dat doe je met de opdracht Split. De regel strLijst = Split(Me.OpenArgs, "|", -1) wijst alle elementen in de OpenArgs variabele toe aan een matrix variabele, op basis van het scheidingsteken. In het voorbeeld is de waarde van de eerste variabele geplaatst in strLijst(0), de tweede in strLijst(1) en zo verder.
Als laatste stap zet je de variabelen op het formulier, met bijv. Me.KlantID=strLijst(0).

Volgens mij is dit wat je ongeveer wilt...

Michel
 
Laatst bewerkt:
Dag Michel,

Ik wil inderdaad gegevens meenemen van mijn formulier offerte naar mijn formulier bestelling. Het is de bedoeling , door op de commando button 'addcontract' te klikken, dat het formulier bestelling geopend wordt en dat de gegevens automatisch in een nieuwe record komen.
ik heb de volgende code als het formulier geladen wordt:

Private Sub Form_Load()
'------------------------------------------------------------------------------------------------
'Inlezen van de variabelen
'------------------------------------------------------------------------------------------------
If Not IsNull(Me.OpenArgs) Then
Dim strLijst() As String

On Error Resume Next
strLijst = Split(Me.OpenArgs, "|", -1)
Me.Naam = strLijst(0)
Me.bedrag = strLijst(1)
Me.btw = strLijst(2)


End If
'------------------------------------------------------------------------------------------------

End Sub

Kan je me vertellen wat er bij moet om elke keer automatisch een record toe te voegen?
 
Tijd is toch een leuke factor... blijkt dat je het principe al kent. Da's uiteraard alleen maar prima!
Wat je dan overhoudt uit mijn verhaal, is dan waarschijnlijk het gebruiken van een speciaal formulier dat op Gegevensinvoer staat; op het moment dat je een formulier eerst opent, zet hij de variabelen uit het OpenArgs element namelijk direct op het formulier, en dat wil je uiteraard nog niet, je wilt eerst een nieuw record maken.
Je kunt overigens vanuit het uitgangsformulier de eigenschap van het tweede formulier ook wel veranderen, maar persoonlijk werk ik liever met een apart invoerformulier.

Michel
 
Dag Michel,

Kan je nog eens uitleggen wat je bedoelt met een speciaal formulier dat op gegevensinvoer staat?
Ik heb op mijn form Bestelling de eigenschappen aangepast zodat <gegevensinvoer> goed staat, maar er wordt nog steeds geen nieuw record aangemaakt als ik op mijn commando buton klik.
 
Als je het formulier rechtstreeks opent, krijg je dan een nieuw record te zien? dan staat hij normaal gesproken goed, en zou het moeten werken.
Het zou kunnen, dat je het formulier m.b.v. de Open string opent in gegevensweergave. Je kunt dit dus nog proberen:

DoCmd.OpenForm stDocName, , , , acAdd, acDialog, stLinkCriteria

Hiermee zou het formulier onageacht de eigen instellingen in toevoegmodus moeten worden geopend.

Michel
 
Ik heb de code aangepast en alle data komt netjes in mijn tabel 'bestellingen' terecht.
Mijn origineel idee was om op de form zelf automatisch een record bij te maken zodat ik daar door de records zou kunnen bladeren, maar ik heb nu een extra form 'overzicht bestellingen' aangemaakt waardoor de bestellingen veel overzichtelijker op mijn scherm komen.
Moet nog een beetje prutsen aan de layout, maar dit komt ook wel in orde.

Bedankt voor de hulp!!!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan