DMax +1 werkt niet

Status
Niet open voor verdere reacties.

remcop1989

Gebruiker
Lid geworden
29 mrt 2012
Berichten
492
- Ik heb een tabel Offertes met primaire sleutels: Offertenummer en GebruikerID
Iedere gebruiker heeft zijn eigen reeks offertenummers. Dus het komt voor dat er 3 gebruikers zijn met ieder offertenummer 13, maar (uiteraard) een andere gebruikerID

- Ik heb een formulier met het tekstvak "offertenummer" dat middels "besturingselementbron" is gekoppeld aan het veld offertenummer in de tabel offertes. Op dit formulier bevind zich ook een tekstvak "GebruikerID" waar de gebruiker zijn ID selecteert.
Ik wil nu dat dit tekstvak voor het huidige gebruikerID het hoogste offertenummer opzoekt in de tabel offertes en hier "1" bij optelt. Deze nieuwe waarde (hoogste offertenummer + 1) wordt dan opgeslagen in het veld offertenummer van de tabel offertes als nieuw record. Ik probeer dit middels de code hieronder, maar dit retourneert alleen de hoogste waarde voor het huidige gebruikerID en telt hier NIET "1" bij op. Het veld staat in de tabel als "numeriek".

Code:
=DMax("[Offertenummer]";"[Offertes]";"[Offertes].[GebruikerID]=" & [Formulieren]![Offertes]![GebruikerID])+1
 
Laatst bewerkt:
Ik ben erachter hoe dit kan, maar het probleem is niet opgelost:

Ik heb in de eigenschap "standaardwaarde", bovenstaande code ingevoerd. Als ik verder "besturingselementbron" leeg laat, dan werkt het probleemloos. Ik wil echter dat de waarde in het vak "offertenummer" naar het veld "offertenummer" in de tabel "offertes" wordt weggeschreven.

Hoe doe ik dit?
 
Gebruik de Bij Aanwijzen gebeurtenis (On Current) om een nieuw ordernummer uit te geven.
Via de eigenschap NeRecord kun je dan checken of het om een nieuwe order gaat.
Voorzetje:

Code:
If Me.NewRecord Then
Me.Ordernummer = DMax(.....) + 1
Else
End If

PS waarom een ordernummerreeks per gebruiker?
Dat is nergens voor nodig, onlogisch en ongewenst.

Tardis
 
Tsja....het bedrijf werkt zo. Kan ik die code ook bij het openen van het formulier instellen?

Wat is 'de eigenschap new record'? De vertaling ervan lukt me nog wel maar de inhoud is me onbekend...

Ps. De moeite wellicht waard om het offertenummer te bespreken met de opdrachtgever
 
Of het ongewenst is, maakt het bedrijf uit, lijkt mij. En onlogisch ook :) Je moet het veld koppelen aan je veld Offertenummer, anders wordt het niet weggeschreven. Een niet-gebonden tekstvak sla je namelijk nooit op die manier op. Dus koppelen aan een veld. Zelf gebruik ik DMax etc. ook wel als formule bij Standaardwaarde, en het moet daar gewoon werken.
 
Tsja, en als het niet werkt? Als ik 'besturingselementbron (ofzoiets)' weghaal en de formule bij standaardwaarde laat staan dan werkt het. Vul ik het veld waar het heen weggeschreven moet dan werkt het niet. Hoe is dit op te lossen?
 
Ik vind je formule veel te ingewikkeld; probeer deze variant eens:
Code:
=Val(DMax("[Offertenummer]";"[Offertes]";"[GebruikerID]=" & [GebruikerID]))+1
Of, als je te maken hebt met een tekstveld als gebruikerID:
Code:
=Val(DMax("[Offertenummer]";"[Offertes]";"[GebruikerID]='" & [GebruikerID] & "'"))+1
 
Ga ik morgen proberen.

Ik zie het verschil in code. Wat houdt het verschil in?
 
Ik heb alleen een db van een andere draad, zonder gegevens. Geen idee dus hoe je volgnummer er uitziet. 10 tegen 1 dat het een tekststring is (technisch dan) gezien de vraag. Dus: hoe ziet je volgnummer er uit?
 
Volgnummer voor offertenummer is "0000" waarbij de nullen wisselen voor andere cijfers. De 20ste offerte is dus 0020, de 239ste is 0239 etc.

Feitelijk, met mijn tabelle etc. zou dit moeten gebeuren:
Tekstvak 'offertenummer' (gekoppeld aan tabel 'offertes') op formulier 'nieuwe offerte' zoekt het hoogste offertenummer op in tabel 'offertes' waar in de tabel het veld gebruikerID gelijk is aan het tekstvak 'gebruikerID' op het formulier. Bij dat hoogste offertenummer wordt vervolgens '+1' gedaan. Hoogste waarde = 0003 bijvoorbeeld, dus nieuwe waarde in vak 'offertenummer' op het formulier wordt 0004.

Dit is wat ik theoretisch wil laten gebeuren.
 
En dat is een mooi verhaal, maar nog steeds niet compleet :) want zo ziet een volledig volgnummer er dus niet uit...
Ik zat net nog in de oude db te kijken, en daar zag ik dat je voor het veld [Offertenummer] een tekstvak gebruikt (van 255 tekens; wat ben je van plan ?). En op dat moment valt je hele DMax plan volledig in het water.
 
Hmm...dat klinkt best wel dom van mezelf...haha

Wat is mijn beste alternatief voor het tekstvak dan?

Waarom werkt het in een tekstvak wel zónder 'besturingselementbron' ingevuld (dus niet gebonden) en met een tekstvak mét 'besturingselementbron' ingevuld (dus wel gebonden) niet?
 
Sluit even je bestand bij, gezipt, met testgegevens.

Tardis
 
En vertel nou eindelijk eens hoe je offertenummer er uit gaat zien.... de spanning is niet meer te houden :)
 
Ik upload morgen mijn file.

Mijn offertenummer wil ik uiteindelijk uit hebben zien als bijvoorbeeld 0020 voor de 20ste offerte of 0163 voor de 163ste offerte.
 
Dat is het nummer; maar waar zit nu dat UserID?
 
UserID is in de tabel gebruikers gekoppeld aan een gebruikersnaam. Hier staat het ingesteld als autonummer.
In de tabel offertes verwijst userID naar de gebruiker bij een offertenummer
In het formulier is gebruikerID vastgelegd in een tekstvak (en vanaf het inloggen in een algemene waarde.)
 
Bijgevoegd de (voor het forum aangepaste) database. Alleen producten en prijzen en klanten etc. zijn aangepast.

Uitlegt:
In tabel gebruikers worden gebruikerID en gebruikersnaam vastgelegd.
Op formulier "nieuwe offerte" kan een gebruikerID geselecteerd worden. Dit tabblad is gekoppeld aan de tabel "offertes"
In tabel "offertes" is het gebruikerID gekoppeld aan de offertes.
Aan de hand daarvan wil ik dat Access in het tekstvak offertenummer op formulier nieuwe offerte kijkt naar het huidige gebruikerID (ook aanwezig op het formulier) en vervolgens in de tabel offertes het hoogste offertenummer voor het huidige gebruikerID opzoekt en hier 1 bij optelt.
Het vak offertenummers op het formulier moet gebonden zijn aan het veld offertenummer in de tabel "offertes"
 

Bijlagen

Middels deze code op het formulier "Nieuwe offerte" werkt het:

Code:
Private Sub Form_Current()
   Me.Datum = Date
   Me.Offertenummer = Val(DMax("[Offertenummer]", "[Offertes]", "[GebruikerID]=" & [GebruikerID])) + 1
   Me.GebruikerID = UserID
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan