Record niet opslaan als leeg

Status
Niet open voor verdere reacties.

spina-2

Gebruiker
Lid geworden
4 aug 2005
Berichten
9
Wie zou mij bij het volgende probleem kunnen helpen??

In het hoofdformulier bevinden zich de basis gegevens van gasten.
Via een knop wordt een popup formulier opgeroepen waarmee aanvullende gegeven kunnen worden ingevoerd voor de geselecteerde gast in het hoofdformulier.

In het popup formulier heb ik de volgende code opgenomen om te voorkomen dat een leeg record wordt opgenomen:

Private Sub Form_Open(Cancel As Integer)
If IsNull(Me![MDO_dtm]) Or Len(Me![MDO_dtm]) <= 1 Then
DoCmd.Close acForm, "frm_invoer", acSaveNo
End If
End Sub

lege records worden echter nog steeds opgenomen!!!
Het lijkt erop dat hij het popup formulier niet meer het actieve formulier is en dat de verwerking van het record reeds heeft plaats gevonden.
De code heb ik ook al ondergebracht bij sub form_close, maar ook dit werkt niet.

Wie kan me zeggen wat ik fout doe of hoe ik een en ander moet benaderen

Alvast bedankt ;)
 
De code bij de knop die het popup formulier oproept is als volgt:

Private Sub Knop119_Click()
On Error GoTo Err_Knop119_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "frm_MDO_invoer"
stLinkCriteria = "[gastnr]=" & Me![gastnr]
DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.GoToRecord , , acNewRec

Exit_Knop119_Click:
Exit Sub

Err_Knop119_Click:
MsgBox Err.Description
Resume Exit_Knop119_Click

End Sub
 
Misschien heb ik op jouw bericht te voorbarig(te snel) gereageerd, aangezien ik al lang niet meer met Access werk.

Wel wil ik het volgende opmerken:

Code:
If IsNull(Me![MDO_dtm]) Or Len(Me![MDO_dtm]) [b]<= 1[/b] Then

<= 1 laat nog steeds één karakter toe, een spatie bijvoorbeeld wat op het eerste oog niet direct opvalt.

<= 1 zou dan in = 0 moeten worden veranderd.

Dennis.
 
Dank je Dennis maar daar ligt het niet aan, moet inder daad wel < 1 in plaats van <=1 zijn
 
Ja, < 1 'is gelijk aan' = 0(negatieve waarden even buiten beschouwing gelaten), maar dat even terzijde aangezien het hoofdformulier ondanks de wijziging toch als een niet leeg formulier wordt opgeslagen.

Je hoofdformulier staat in verbinding met de database, zolang in dat hoofdformulier niets wordt ge-updated en/of iets ge-added in de databse dan wordt er ook geen lege records in die database toegevoegd, dan is zo'n pop-up met als doel om te voorkomen dat een leeg record aan de database wordt toegevoegd toch overbodig?

EDITSorry, in de haast had ik iets niet juist opgeschreven, inmiddels gecorrigeerd.

Dennis.
 
Laatst bewerkt:
Geplaatst door hackerfrans
Moet het geen and statement zijn in plaats van een or?
Nee, dat is niet nodig, zelfs de logische operator or is zinloos. Er hoeft maar slechts aan één voorwaarde worden voldaan, en derhalve heb je geen logische operator nodig.

Dennis.
 
Laatst bewerkt:
Geplaatst door DENNIS90
Je hoofdformulier staat in verbinding met de database, zolang in dat hoofdformulier niets wordt ge-updated en/of iets ge-added in de databse dan wordt er ook geen lege records in die database toegevoegd, dan is zo'n pop-up met als doel om te voorkomen dat een leeg record aan de database wordt toegevoegd toch overbodig?
Maar ik begrijp dat je dat wilt zien te vookomen, en dat is tenslotte ook je hoofdvraag.

Je kunt in ieder geval tijdens de creatie van je database aangeven, dat een null-string(een leeg veld) niet wordt toegestaan en dat is dus ook een manier om te kunnen vermijden dat een leegformulier niet in de database wordt opgenomen/opgeslagen. Alleen heb ik met de tool Visdata(om een database op te zetten) gewerkt en hoe dat bij Access zit weet ik op dit moment niet zo gauw te zeggen.

Dennis.
 
Als je voor je veld of velden die je niet nul wil laten zijn de optie "Allow zero length" uit zet, ben je volgens mij al een heel eind....:)
 
Geplaatst door BartiGoal
Als je voor je veld of velden die je niet nul wil laten zijn de optie "Allow zero length" uit zet, ben je volgens mij al een heel eind....:)
Inderdaad. Deze tekst ("Allow zero length") had ik ook willen vermelden, maar aangezien ik Visdata gebruik, heb ik dat achterwege gelaten.

Dennis.
 
Beste mensen
bedankt voor jullie bijdrage al, maar mijn vraag ligt toch wat anders.
Het popup formulier is echt een formulier waar een nieuwrecord wordt gevuld in een gerelateerde tabel aan de tabel van het hoofdformulier.
De vraag richt zich op het popup invulformulier dat neit als leeg record mag worden weggeschreven. De if voorwaarde is duidelijk naar mijn idee. het gaat meer om de regel die bepaald of een record of neit wordt opgeslagen. waar moet die if - then voorwaarde komen te staan?????:confused
Of maak ik een denk fout!!
 
In een database wordt elke data die je invoert ook meteen opgeslagen, je hoeft dus niet eerst op "Opslaan" oid te drukken. Ik denk dat dat jou probleem is, want als je je pop-up scherm opent, wordt er automatisch een nieuw record aangemaakt. Met de optie Allow zero lenght kan je dit ondervangen, maar door alleen je formulier weer te sluiten voorkom je niet dat er een leeg record wordt weggeschreven.
 
Naar mijn idee moet dit toch wel kunnen, in een simple test database lukt dit namelijk wel, alleen is dit dan neit gerelateerd aan een andere tabel!!!!
 
Ik weet niet zeker, maar onderstaande zou
in zijn geheel moeten komen te vervallen:
Code:
Private Sub Form_Open(Cancel As Integer)
  If IsNull(Me![MDO_dtm]) Or Len(Me![MDO_dtm]) <= 1 Then
     DoCmd.Close acForm, "frm_invoer", acSaveNo
  End If
End Sub
En een deel ervan gebruiken we in die andere code
en moet de regel waar DoCmd.GoToRecord , ,
acNewRec
op die plek komen te staan zoals
hieronder staat aangegeven:
(de wijziging staat vet bedrukt aangegeven)
Code:
Private Sub Knop119_Click()
  On Error GoTo Err_Knop119_Click

  Dim stDocName As String
  Dim stLinkCriteria As String

  stDocName = "frm_MDO_invoer"
  stLinkCriteria = "[gastnr]=" & Me![gastnr]
  DoCmd.OpenForm stDocName, , , stLinkCriteria
  [b]If IsNull(Me![MDO_dtm]) Then
     DoCmd.Close acForm, "frm_invoer", acSaveNo
     Else
     DoCmd.GoToRecord , , acNewRec
  End If[/b]
  Exit_Knop119_Click:
Exit Sub

Err_Knop119_Click:
MsgBox Err.Description
Resume Exit_Knop119_Click

End Sub

Het zou nog makkelijker zijn, als je je project
hier ter download aanbiedt.

edit Met een lege database natuurlijk, want die informatie wat je in je databse hebt is voor ons niet van enig belang.

Dennis.

PS. Moet zo alweer weg, jammer.
 
Laatst bewerkt:
Is het niet zo dat je de gegevensbron voor het formulier leeg moet laten en dan zelf een SQL string op kan bouwen om in te voegen zodra je op de knop drukt. Als ik mij goed herinner maakt Access onderscheid tussen gekoppelde en niet gekoppelde items. Als de popup dus gekoppeld is, dan maakt Access automatisch een record aan. Is dit niet zo, dan heb je zelf de vrije controle om velden op lege invoer te controleren en op basis daarvan een record in te voegen door een SQL instructie op te bouwen.
 
Deze opmerkingen brengen me nog steeds neit veder jammer genoeg
wie heeft nog een oplossing?
 
ok.... ik snap uit je verhaal niet helemaal wat je wil maar ik zal proberen om het opslaan binnen access wat uit te leggen

in ontwerpmodus (opgestart met shift)
hier wordt direct bij het invoeren de waardes gezien als opgeslagen. hierdoor kunnen iif statments over querys die weer met waardes in het formulier te maken hebben gedaan worden.

in de gebruikersmodus. worden de gegevens pas opgeslagen als er na een nieuwe regel wordt gegaan of het formulier afgesloten wordt.
dus als je fouten krijgt bij het afroepen van een iifstatent over data die nieuw is moet je hier even rekening mee houden
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan