Instellingen tabel/formulier maken

Status
Niet open voor verdere reacties.

jvandervliet

Gebruiker
Lid geworden
23 mrt 2006
Berichten
234
Beste mensen,

In mijn factuur-database wil ik een soort instellingen tabel en formulier maken.

De volgende dingen komen er in te staan:

BTW hoog
BTW laag
BTW nummer
Alle gegevens van het bedrijf.

Nu wil ik dat in die tabel maar 1 record kan worden aangemaakt. Is dit te vergrendelen tot maximaal 1 record, zodat als ik per ongelijk op enter druk dat er geen nieuwe record wordt aangemaakt?

Alvast dank!
 
Nu wil ik dat in die tabel maar 1 record kan worden aangemaakt. Is dit te vergrendelen tot maximaal 1 record, zodat als ik per ongelijk op enter druk dat er geen nieuwe record wordt aangemaakt?
Simpel antwoord: Nee, dat kan niet. Maar dat zou niet uit mogen maken; je kunt sowieso de tabel verbergen en alleen het formulier laten zien. En op dat formulier kun je de beperking wél afdwingen.
 
Ik zou sowieso werken met een niet-gebonden formulier, dat je vult met een Recordset. Je opent dus het formulier, de recordset haalt het eerste record op uit de tabel, en vult de overeenkomende velden op het formulier en that's it. Wil je de gegevens kunnen muteren, dan zet je er nog een <Opslaan> knop bij, die op vergelijkbare manier (met een recordset dus) de data weer wegschrijft.
 
Je wilt een voorbeeldje? Zal ik vanavond even posten.
 
Ik heb jouw db niet, dus ik heb een voorbeeldje in code. Omdat de werkwijze vrij simpel is, moet je dat zo over kunnen nemen. De werkwijze is als volgt: ik heb eerst een formulier gemaakt op basis van de tabel die de data bevat. Dat geeft een gebonden formulier, en dat was nu net niet de bedoeling, dus de volgende stap is om de gegevensbron leeg te maken, en de bij de tekstvelden de eigenschap <Besturingselementbron> ook. De velden zijn dan namelijk ook niet meer gekoppeld aan een veld. Als het formulier 'vrij' is, kun je met de volgende code en declaraties het formulier laden met de beschikbare velden uit de tabel. Omdat de veldnamen nu identiek zijn aan de tabelvelden, is het inlezen een eitje.

Code:
Option Compare Database
Option Explicit
Dim rs As DAO.Recordset
Dim fld As DAO.Field

Code:
Private Sub Form_Load()
    Set rs = CurrentDb.OpenRecordset("sys_Instellingen")
    With rs
        .MoveLast
        .MoveFirst
        If .RecordCount = 1 Then
            For Each fld In rs.Fields
                Me(fld.Name) = fld.Value
            Next fld
        Else
            DoCmd.Close acForm, Me.Form.Name
            Exit Sub
        End If
    End With
End Sub

Als het formulier is ingelezen, kun je de velden aanpassen. De aangepaste waarden worden weggeschreven bij het sluiten van het formulier. Ook nu maak je weer gebruik van de identieke objectnamen en veldnamen.

Code:
Private Sub Form_Close()
    Set rs = CurrentDb.OpenRecordset("sys_Instellingen")
    With rs
        .Edit
        For Each fld In rs.Fields
            fld.Value = Me(fld.Name).Value
        Next fld
        .Update
    End With
End Sub
 
Moet ik in de code nog wat wijzigen?

Als ik het formulier open geeft het de foutmelding: Een door de gebruiker gedefinieerd gegevenstype is niet door de gebruiker gedefinieerd.
 
Dan moet je toch misschien je db erbij doen. Ik kan alleen maar code verzinnen die bij mij werkt :).
 
En zoals verwacht, doet de code het zonder noemenswaardige aanpassingen. :). Wel een paar aanpassingen moeten doen op je formulier. Om te beginnen: ik had gezegd dat je een formulier moest maken op basis van de tabel. Dat heb je maar gedeeltelijk gedaan, want je hebt niet alle velden uit de tabel gebruikt. En dat moet dus wel, anders loopt de code fout op de ontbrekende velden. Desnoods maak je de velden die je niet wilt gebruiken onzichtbaar, maar ze moeten dus wel op het formulier staan. Daarnaast had je noch de Recordbron verwijderd (en dat moet echt) en ook de besturingselementbronnen niet (en dat is net zo noodzakelijk).

De enige reden waarom ik het formulier maak op basis van de tabel, is omdat je dan een formulier krijgt dat 100% identiek is aan de tabel. Want dat moet. Dus je mag later wel tabbladen toevoegen (die doen toch niks) maar zeker geen velden verwijderen! Het laatste dat moest worden aangepast, had ik niet vermeld overigens, is dat je geen Autonummerveld kunt gebruiken in de tabel, want dat kun je niet bijwerken. En dat gebeurt bij afsluiten. Dat ID veld heb je toch al niet nodig, dus dat kan net zo goed weggegooid worden. Ik heb het nummer nu omgezet naar een numeriek veld, dan is het probleem ook opgelost.
 

Bijlagen

  • Factuur.zip
    255,9 KB · Weergaven: 35
Het is gelukt!

Bedankt!

Nu nog het volgende: Die tabblad "Instellingen" wil ik nu weghalen, en daar in de plaats een knop maken om de formulier Instellingen te openen.

Nu heb ik in het tabblad email een paar verborgen velden zitten die verwijzen naar de velden in het formulier Instellingen. Nu wil ik dat die velden gevuld wordt met de inhoud uit het eerste record uit de tabel Instellingen.
 
Ik snap niet helemaal wat je bedoelt. Het formulier is al gebaseerd (dank zij de recordset) op de tabel. Je kunt het tabblad uiteraard zichtbaar en onzichtbaar maken met een knop, als je de instellingen niet wilt zien, maar verder zie ik niet wat daar nu het voordeel van is.
 
In op de tabblad Email heb ik een paar verborgen velden. Die geven de gegevens weer die in de formulier Instellingen staan, om daarna met een druk op de knop als email samengestellen en weg te sturen. Mijn bedoeling is dat de verborgen velden de gegevens uit de tabel Instellingen te halen. De formulier Instellingen wil ik helemaal uit het hoofdformulier halen, om zo de snelheid van de database te bevorderen. Dat merk ik vooral bij het opstarten.
 
Ik snap je opzet niet; die is blijkbaar anders als je voorbeeldje dat je hebt meegepost.
In op de tabblad Email heb ik een paar verborgen velden. Die geven de gegevens weer die in de formulier Instellingen staan
In je voorbeeld heb je één formulier met twee tabbladen: Email en Instellingen. Geen apart formulier voor Instellingen. In je voorbeeld lees je alle velden uit de tabel instellingen in. Die zijn, als de velden zichtbaar zijn, te muteren en op te slaan. Al kun je dat allemaal uitzetten. Maar dan nog:
De formulier Instellingen wil ik helemaal uit het hoofdformulier halen, om zo de snelheid van de database te bevorderen.
Snelheid mag totaal geen verschil maken met een formulier/tabblad dat gegevens uit een tabel haalt met één record. Als één record je database al merkbaar vertraagt, dan zit er iets goed fout lijkt mij. Of je werkt nog op een xp met 512 kb geheugen :). Als je de gegevens uit de instellingen tabel alleen maar nodig hebt in een email, dan hoeven ze niet eens op een formulier te staan; je kunt ze dan ophalen op het moment dat je de email gaat samenstellen en versturen. Ik neem daarbij aan dat de gegevens toch niet gemuteerd mogen worden.
Kortom: ik denk dat je de werkwijze nog niet helemaal correct hebt uitgewerkt, en dat er dus nog wel wat aan te verbeteren valt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan