Vraagjes

Status
Niet open voor verdere reacties.

maniac2003

Terugkerende gebruiker
Lid geworden
14 dec 2006
Berichten
3.128
Kan iemand mij vertellen hoe ik met een leeg record in een subformulier kan beginnen, want het lukt me niet met onderstaande code:

Private Sub Form_Load()
DoCmd.GoToRecord , , acNewRec
End Sub

Eerder heeft dit volgens mij wel gewerkt maar nu niet. :(

En ook had ik een vraagje over autonummering, hoe krijg ik voor elkaar dat wanneer ik een nieuw record aanmaak de hoogste oude waarde pakt en daar 1 bij op telt.
Ondertussen had ik dit al gevonden:

Private Sub Knop_record_toevoegen_Click()
On Error GoTo Err_Knop_record_toevoegen_Click

y = dmax (veld, tabel, voorwaarde)


DoCmd.GoToRecord , , acNewRec

me.volgnummer = y + 1


Exit_Knop_record_toevoegen_Click:
Exit Sub

Err_Knop_record_toevoegen_Click:
MsgBox Err.Description
Resume Exit_Knop_record_toevoegen_Click

End Sub

Maar wellicht zijn er nog andere manieren. :)

Alvast bedankt voor de hulp.

Groetjes,

maniac2003
 
m.b.t. de nummer reeks werk dmax leuk als je eenmalig een getal in vult en dit telken met een getal ophoogt je kun autonummering gebruiken maar dan telt hij gewoon 1,2,3,4,5,6

ik zou alleen de voorkeur geven aan de volgende opzet:

Een tabel bijvoorbeeld systeem met daarin een veld beginnummer dan een functie maken die standaard deze waarde ophaalt er 1 bij optelt en dan de waarde in zowel de tabel systeem als de tabel waar je hem gebruikt aanpast naar de nieuw waarde zo kun je namelijk als je dit wil elk jaar beginnen met een mooi rond nummer bijvoorbeeld ik begin dit jaar met het nummer 2007100000 op 31 december 2007 heb ik als laatste nummer 2007153356 dan kan ik dmv de instelling te veranderen in 2008 weer beginnen met
20081000000
 
@zRowixik,

zou alleen de voorkeur geven aan de volgende opzet

Even een paar kanttekeningen bij je persoonlijke voorkeur.
Ten eerste, volgnummers zijn in de regel onafhankelijk van datums.
Als ze dat in de praktijk niet zijn, dan hadden ze dat wel moeten wezen.
Er is namelijk geen enkele reden waaom je volgnummers af zou willen laten hangen van datums.
Datums lef je namelijk in de reden vast bij je volgnummer.

Ten tweede, als je dan toch je nummering aan het begin van het jaar opnieuw wilt starten, kun je dat prima via een stukje VBA code regelen.
Hoef je niet een op zich overbodige tabel aan te maken, en hoef je niet in je tabellen te gaan liggen wijzigen.

Tardis
 
@zRowixik,



Even een paar kanttekeningen bij je persoonlijke voorkeur.
Ten eerste, volgnummers zijn in de regel onafhankelijk van datums.
Als ze dat in de praktijk niet zijn, dan hadden ze dat wel moeten wezen.
Er is namelijk geen enkele reden waaom je volgnummers af zou willen laten hangen van datums.
Datums lef je namelijk in de reden vast bij je volgnummer.

Ten tweede, als je dan toch je nummering aan het begin van het jaar opnieuw wilt starten, kun je dat prima via een stukje VBA code regelen.
Hoef je niet een op zich overbodige tabel aan te maken, en hoef je niet in je tabellen te gaan liggen wijzigen.

Tardis

Misschien is het voorbeeld niet goed gekozen met de data maar ik ken namelijk uit het verleden het probleem dat opvattingen m.b.t. nummerreeksen nog al verschillend zijn.
Op deze manier blijft je flexibel voor de mensen die ermee moeten werken. verder ben ik het met je eens en is dit als je je niet flexibel wil opstellen veel beter maar gezien ik vaak mdb maak die multifunctioneel moeten zijn ben ik liever flexibel en neem ik het verlies van 1 tabel op de koop toe.
 
Het gaat dus hierom:
Er is een formulier met knoppen die verwijzen naar formulieren.
Het 1e formulier is om een nieuwe passagier aan te maken.
De standaard code is als volgt:
Private Sub KnopNieuwePassagier_Click()
On Error GoTo Err_KnopNieuwePassagier_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "Nieuwe Passagier Toevoegen"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_KnopNieuwePassagier_Click:
Exit Sub

Err_KnopNieuwePassagier_Click:
MsgBox Err.Description
Resume Exit_KnopNieuwePassagier_Click

End Sub
--------------------------

Nu wil ik dus dat het veld Passagiernummer al wordt ingevuld, de rest van de velden moet leeg blijven om zelf in te vullen.
Om de passagiernummers automatisch op te laten lopen had ik dus de volgende code hier gevonden.
Origineel gepost door Guess Who Bekijk Bericht
Ik ben niet thuis in VBA

kan ik het dan gewoon schrijven in het volgende VBA-deeltje? of moet ik nog iets anders doen?


Private Sub Knop_record_toevoegen_Click()
On Error GoTo Err_Knop_record_toevoegen_Click

y = dmax (veld, tabel, voorwaarde)


DoCmd.GoToRecord , , acNewRec

me.volgnummer = y + 1


Exit_Knop_record_toevoegen_Click:
Exit Sub

Err_Knop_record_toevoegen_Click:
MsgBox Err.Description
Resume Exit_Knop_record_toevoegen_Click

End Sub

Maar hoe kan ik bijvoorbeeld zelf het nummer bepalen waarbij gestart wordt met tellen ?
En wat moet ik invullen bij voorwaarde, heeft iemand een voorbeeld van zoiets ?
 
Laatst bewerkt:
als je met meerdere mensen tegelijkertijd records aanmaakt, kan het met deze code misgaan. Als 2 personen een record aanmaken wordt 2 keer hetzelfde nummer klaargezet. Degene die als tweede de record op wil slaan zal een foutmelding krijgen als je nummer een unieke key is.

Het nummer zou je pas moeten bepalen als je de record daadwerkelijk opslaat in de database, bv bij het sluiten van een formulier.
 
Dat is in deze niet het geval, er is maar 1 persoon die passagiers beheerd.
Maar wat weet iemand wat ik dan als voorwaarde moet invullen ??
 
een voorwaarde is niet verplicht. Kijk eerst even in help over de functie Dmax.
 
Voorwaarde kon ik inderdaad weglaten, maar die help van access vind ik niet echt duidelijk. Veelal moet ik het hebben van voorbeelden, code in dit geval. Want zelf echt code maken ben ik nog niet aan toe.

Nu ben ik het opnieuw aan het proberen met deze, :
Code:
Private Sub Passagiernummer_Enter()
Me.Passagiernummer = Nz(DMax("[Passagiernummer]", "Test"), 0) + 1
End Sub

Maar dan krijg ik de foutmelding dat de tabel luchthaven niet gevonden kan worden ???
Die tabel heeft er niet mee te maken, het gaat om te tabel Passagier. En die staat ingesteld als recordbron van het formulier.
 
Laatst bewerkt:
Heb je iets met relatie's gedaan ??

Wat je zoekt naar de hoogste waarde van "Passagiernummer" in de tabel "Test" dus al hij dan over iets heel anders begint lijkt mij het iets van een relatie die op speelt.

Ik zou hem als ik jou was nog wel even uitbreiden met het volgende

Code:
Private Sub Passagiernummer_Enter()
if Passagiernummer = 0 then
  Me.Passagiernummer = Nz(DMax("[Passagiernummer]", "Test"), 0) + 1
end if
End Sub

Anders is het namelijk zo dat als je in het veld staat en je scrolt met je muis wiel naar beneden dat alle veldnummers zijn aangepast
 
De relaties waren blijkbaar veranderd. Heb ik zelf niet aan gezeten, maar dat komt wellicht door het importeren en exporteren.
De relaties staan nu weer goed, maar dan nog wordt dezelfde fout weergegeven.
Heb er wat screenshots van gemaakt, dat is denk wat duidelijker.

Screenshot 8: De relaties
9: De foutmelding wanneer je op het veld passagiernummer klikt
10: De code die er achter zit

Wanneer ik jouw aangepaste code gebruik, is de foumelding weg, maar gebeurd er verder ook niets.
 

Bijlagen

  • ScreenHunter_08.jpg
    ScreenHunter_08.jpg
    90 KB · Weergaven: 40
  • ScreenHunter_09.jpg
    ScreenHunter_09.jpg
    18,9 KB · Weergaven: 32
  • ScreenHunter_10.jpg
    ScreenHunter_10.jpg
    12,6 KB · Weergaven: 33
Laatst bewerkt:
Hallo,

je code verwijst naar een kolom Passagiernummer in een tabel Test.
In je relatiediagram kom ik geen tabel Test tegen.
Vervang Test door de tabel waar het om gaat.

PS je tabellen, staan die toevallig in een niet-Access database?

Groet,

Tardis
 
Ik heb "Test" vervangen door "Passagier", passagier is de tabel waar het echt om gaat.
Test had ik gebruikt omdat ik dacht dat ik daar het formuliernaam in moest vullen.
Echter dan komt er geen foutmelding maar er gebeurd ook weer niets, wanneer ik op het veld klik.
De tabellen zijn gecreëerd, met de query analyzer van MS SQL Server. Daarna zijn ze geïmporteerd in Access.
 
In je relatiediagram heet je tabel dbo_Passagier...

Tardis
 
Het formulier Passagierbeheer wordt inmiddels leeg geopend doormiddel van:
Code:
Private Sub Form_Load()
DoCmd.GoToRecord , , acNewRec
End Sub

En het stukje voor de passagiernummers ziet er nu zo uit:
Code:
Private Sub Passagiernummer_Click()
If Passagiernummer = 0 Then
  Me.Passagiernummer = Nz(DMax("[Passagiernummer]", "dbo_Passagier"), 0) + 1
End If
End Sub

Maar dan nog niets, het passagiernummer blijft leeg. Ook geprobeerd om 0 in NULL te veranderen maar dat gaf hetzelfde resultaat.

Wel zag ik bij de relaties, dat er een nieuwe relatie wordt gelegd tussen een tabel genaamd dbo_Vlucht_1 en de oorspronkelijke tabel db0_Vlucht. Geen idee waar dat vandaan komt.
Telkens als ik relaties open staat die er bij, kan hem verwijderen, maar de volgende keer is die er weer.
 
Is het in sql misschien een "varchar" veld dan is het namelijk tekst en volgens mij werkt dmax dan niet zo lekker maar als je de if en de end if regel weg laat doet hij het dan wel ?

Dan zal het namelijk ,voor als het een varchar is, =0 of is Null maar ="" of tewel leeg moeten zijn.
 
Hij lijkt het nu wel te doen:
Code:
 Private Sub Passagiernummer_Click()
Passagiernummer = 0
  Me.Passagiernummer = Nz(DMax("[Passagiernummer]", "dbo_Passagier"), 0) + 1
End Sub

De waarde van passagiernummer is numeric.
Heel erg bedankt voor je hulp. :thumb: :thumb:

Alleen heb ik nog een ander probleempje. Wanneer ik een nieuwe passagier wil toevoegen, geeft de database een foutmelding op vluchtnummer (zie screenshot).
Wat de foutmelding probeert te zeggen snap ik: Dat het vluchtnummer ingevuld moet worden.
Maar die is ingevult, zoals te zien is. Zou dit met een update verholpen kunnen worden ??
Want met een vlucht aanmaken heb ik dit probleem niet, en dat werkt hetzelfde.
 

Bijlagen

  • ScreenHunter_14.jpg
    ScreenHunter_14.jpg
    95 KB · Weergaven: 33
Blijkbaar staan je tabellen niet in acces maar in sql blijkbaar en ondanks dat op het form een vlucht nummer staat heeft hij de waarde Null verzonden dus probeer je via koppelings beheer even alles goed te sync. en controleer even de afhankelijke kolom van je pulldown van je vlucht nummer wat als de afhankelijke kolom leeg is verzend hij deze waarde

Ik weet natuurlijk niet waarom je zo begonnen ben maar als ik jou was en je wil het in sql laten werken zou ik als ik jou was de basis maken in access en dan de upsize te doen dat scheelt een hoop rare foutmeldingen tijdens het ontwikkellen.
 
Dat is de opzet van de hedendaagse hogescholen blijkbaar.
Zelf vind ik het ook niet erg overzichtelijk. Je maakt tabellen met de query analyzer, je maakt een lege database in access en dan gooi je je tabellen in de access database.
En dan zie je dus totaal niet meer wat er gebeurd. Veel liever zou ik met 1 programma werken wat alles kan, dan kun je ook geen problemen krijgen tussen de verschillende progs. Maar ja de wereld is MS based, dus je kunt bijna niet anders.

Krijg nu zo'n zelfde foutmelding bij een passagier toevoegen, als je besluit hem toch niet toe te voegen. Ik denk dat hem zit in het feit dat access de records automatisch 'probeert' op te slaan, en dat werkt niet aangezien bepaalde waarde (in dit geval) niet was ingevuld.
 
Laatst bewerkt:
Post anders je db zonder je sql eens misschien kan ik er wat aan zien.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan