Voorraadtelling in Access

Status
Niet open voor verdere reacties.
Tuurljk.... Je kunt met een loopje door alle controls heenlopen, en ze leegmaken bijvoorbeeld. Die hang je dan (bij voorkeur) bij de opdracht waarmee je een nieuwe mutatie doorvoert. Want dan wil je neem ik aan met een schone lei beginnen.
Zoiets bijvoorbeeld:

Code:
Function LeegMaken()

    For Each ctl In Controls
        With ctl
            Select Case .ControlType
                Case acComboBox
                    If Left(.name, 3) = "cbo" Then
                        .Value = ""
                    End If
                Case acListBox
                    If Left(.name, 3) = "lst"  Then
                     .RowSource = ""
                    .Requery
                Case acTextBox
                    If Left(.name, 3) = "txt"  Then
                        .Value = ""
                    End If
                Case acCheckBox
                    If Left(.name, 3) = "chk"  Then
                        .Value = 0
                    End If
            End Select
        End With
    Next ctl
 
Michel,

Heb onderstaande regels toegevoegd aan jouw functie, maar hier klopt dus iets niet denk ik.

Function LeegMaken()

Dim ctl As Object
Dim Controls As Form
Set Controls = Forms!Mutatieform
For Each ctl In Controls
enz.

Vraag 1: Klopt dit?
Vraag 2: Hoeven er geen argumenten in deze functie? Hoe start ik deze functie dan aan in de knop "Bijwerken"
Vraag 3: Wat geeft deze functie eigenlijk terug?

Ik had het "leegmaakprobleem" zelf opgelost met:

Me.gebruikersID = 0
Me.ArtID = 0
Me.OVnr = ""
Me.LeveranciersID = 0
Me.Aantal = 0
Me.Mutatievraagbox = 0


Dit maakt wel de velden schoon, maar ik krijg bij de volgende mutatie, waar ik bv geen OV-nr invul (omdat het een levering betreft) dan de melding:
Kan geen record toevoegen omdat een gerelateerd record is vereist in de tabel "de volledige leerlinglijst"of
Kan geen record toevoegen omdat een gerelateerd record is vereist in de tabel in de tabel "leveranciersID" als het een uitgave betreft en geen leveranciersID wordt ingevuld.

Wat is hier dan fout??

Ik voeg een kopie van de volledige Form_Mutatieform code als Word-file bij.

Pierre
 

Bijlagen

  • Code bijwerken uit voorraad 6.docx
    16,2 KB · Weergaven: 40
Laatst bewerkt:
Vraag 1: Nee
Vraag 2: Hangt er van af; met een commando Call
Vraag 3: Niets...

Dat is het korte antwoord. Nu de foutjes die je maakt: om te beginnen declareer je een verkeerde variabele. Daarmee is de functie al gelijk onwerkbaar, want de rest zal dan nooit werken. Mijn code gebruikte ik op het formulier zelf, en dan roep je hem met één commando aan. (Call, of gelijk de functienaam). Dus onder een knop ziet het er dan zo uit:

Code:
Private Sub cmdLeegmaken_Click()
    Call LeegMaken
End Sub


Als je de functie algemeen wilt kunnen inzetten, moet hij weten op welk formulier hij moet werken. Die formuliereigenschap moet je dan meegeven in de aanroep. Dat vereist een aanpassing in de functie. Die ziet er dan zo uit:

Code:
Function FormLeegMaken(Formulier As Form)
Dim ctl As Control

    For Each ctl In Formulier.Controls
        With ctl
            Select Case .ControlType
                Case acComboBox
                    If Left(.name, 3) = "cbo" Then
                        .Value = ""
                    End If
                Case acTextBox
                    If Left(.name, 3) = "txt" Then
                        .Value = ""
                    End If
                Case acListBox
                    If Left(.name, 3) = "lst" Then
                        .RowSource = ""
                        .Requery
                    End If
            End Select
        End With
    Next ctl

End Function

En op het formulier gebruik je deze code op de knop:

Code:
Private Sub cmdLeegmaken_Click()
    Call FormLeegMaken(Me)
End Sub
 
Nog even

Michel,

De applicatie begint langzaamaan heel mooi te worden, dankzij jouw geweldige hulp.
Ik hoor straks wel waar de bloemen heen moeten.

Nog een ding (of eigenlijk 2)

Als ik met een knop en jouw algemene functie de velden heb leeggemaakt, krijg ik in twee gevallen een foutmelding.

1. Als ik het veld OVnr leeg laat (bij een levering of een bestelling moet dat eigenlijk) krijg ik de melding "Kan geen record toevoegen omdat een gerelateerd record is vereist in de tabel de volledige leerlinglijst"
2. Als ik het veld leveranciersID leegl laat (bij een uitgave aan een leerling moet dat eigenlijk) krijg ik de melding "Fout bij gegevenstype conversie"
Als ik beide velden invul, wordt er gewoon goed gerekend.

Weet jij wat dit kan zijn of in ieder geval hoe ik dit kan oplossen?

Pierre
 
Ik kan het probleem niet reproduceren; in welk formulier/tabel krijg je deze problemen?
 
In het formulier waar de mutaties worden ingevoerd "Mutatieform"
Ik stuur je een kopie van code in Word hierbij. Jammer genoeg kan ik geen voorbeeld van de database sturen, die is ondertussen groter dan 1 MB.
 

Bijlagen

  • Code bijwerken uit voorraad 6.docx
    16,2 KB · Weergaven: 44
Nee. Probleem blijft bestaan.
Ik voeg hierbij een versie bij waarin alleen het mutatieformulier is opgenomen. Als je deze importeert in de laatste vorige versie van jou, moet hij werken. Alleen de knop "sluiten" op dit formulier werkt niet naar behoren. Daar ben ik op dit moment mee bezig. (Mag je ook afmaken als je wil.)

Pierre
 

Bijlagen

  • Vorraad 7 alleen mutatieformulier.zip
    87,8 KB · Weergaven: 106
Ik heb nog steeds geen problemen.... Wel constateer ik dat in jouw formulier de namen van de keuzelijsten en tekstvakken niet overeenkomt met de leegmaakcode. Elke keuzelijst geef ik standaard de naam cbo+veldnaam, tekstvakken txt+veldnaam. In de functie kijkt hij dan naar keuzelijsten diew beginnen met cbo, en tekstvakken met txt. Op die manier kun je nog onderscheid maken tussen objecten die je wel, en niet wilt leegpoetsen.
 
Dat klopt, maar ik had geen zin om alle veldnamen te gaan veranderen. Ik heb daarom de functie aangepast aan de veldnamen, en deze werkt perfect. De functie staat in het eerder gestuurd Word-doc.

Het gaan om het probleem van de tweede of derde keer achterelkaar een mutatie ingeven. Dan ontstaan de beide foutmeldingen.
Kunnen we geen snellere manier van communiceren (voor even) gebruiken?
Ik stuur je per e-mail mijn e-mailadres en mijn telefoonnummer. Als je dat niet wil kan ik dat ook begrijpen.

Pierre
 
Laatst bewerkt:
Is prima. Heb vanmiddag verder geen tijd gehad, maar ik pak 'm vanavond wel weer op.
 
Met deze twee aanpassingen check je beter op de keuzelijsten:

Code:
        If Not Nz(Me.LeveranciersID, 0) = 0 Then .Fields("LeveranciersID").Value = Nz(Me.LeveranciersID)
        If Not Nz(Me.OVnr, 0) = 0 Then .Fields("[OV-nr]").Value = Nz(Me.OVnr)
 
Ja, is allemaal keurig aangekomen :thumb: Ik heb er gisterenmiddag ook nog naar gekeken, maar was gisteravond niet thuis, en dan kan ik uiteraard ook niet zoveel... Probeer het straks nog op te lossen! Het zit ergens niet goed met de leverancierskeuzelijst, maar ik krijg er nog even geen vinger achter.
 
Michel,
Ik heb jouw code in mijn applicatie Ingevoerd, maar hij lost het probleem niet op. Ik kom er niet achter wat de fout is. Heb dus besloten om maar te werken met een “nul-record” in beide tabellen. Dan is het opgelost.
Ik denk dat ik verder stop met het veranderen van de mogelijkheden op de verschillende formulieren en, op de vormgeving na, de applicatie als klaar beschouw.
Wat moet ik trouwens doen om de gebruiker alleen binnen de applicatie te laten werken en het volledige Access-format onzichtbaar te maken. Het liefste zou ik natuur buiten Access om willen functioneren, weet echter niet of dat kan.
Voorlopig mijn laatste vragen. Hartstikke bedankt voor je meedenken en je hulp.


Pierre
 
Stop

Voorraadbeheer is mooi geworden en doet precies wat ik ermee wilde bereiken. Iedereen die meegekeken en meegeholpen heeft, hartstikke bedankt. Extra dank een Michel die veel tijd, kennis en energie gestoken heeft in de hulp aan mij.
Als je een keer in Limburg komt, moet je me mailen. Je hebt nog 5 bier te goed.

Pierre
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan