opzoeken van reeds bestaande waarden bij invoeren

Status
Niet open voor verdere reacties.
het adres van de eigenaar staat in de tabel [eigenaar]. De tabel [adres] bevat de adressen van de panden van de eigenaar (1 eigenaar kan bijvoorbeeld 5 panden hebben)
 
Maar dan nog zou ik niet zoveel informatie opslaan in de tabel. Je wilt voorkomen dat mensen plaatsnamen als 's Hertogenbosch, 's-Hertogenbosch en Den Bosch door elkaar gaan invoeren. Normaliseren die hap, zou ik dus zeggen :).
 
en dat bewijst dus dat ik niet zo goed ben in databases :-) ik dacht dat ik al mn best gedaan had om te 'normaliseren'...
Als ik opnieuw met mn tabellen aan de slag ga moet ik dus ook opnieuw aan de slag met mn formulieren denk ik.
dat het veld 'gemeente' verdwijnt kan ik snappen gezien er een postcode gekend is. "id aangifte" zal inderdaad ook niet moeten. K ben een beetje de kluts kwijt
 
Formulieren moet je pas maken als de tabellenstructuur definitief is :). In beginsel zou het zo moeten zijn dat de combinatie van Postcode+Huisnummer voldoende is voor het vastleggen van een adres. Maar dat werkt alleen als je ook een (externe) Postcode database hebt waarin je de adressen kunt opzoeken/matchen. Daarmee garandeer je wel dat je uniforme adressen hebt. En zelfs als je postcode tabel enigszins out of date is, kun je hem nog wel vullen met je eigen adressen middels de <Bij niet in Lijst> gebeurtenis van je keuzelijsten. Dan vul je de tabellen ad hoc aan met wat je op dat moment nodig hebt.
 
Morgen probeer ik nog eens opnieuw te starten, pas ik de tabellen aan (of doe ik toch een poging tot normaliseren) en probeer ik alles nog eens opnieuw. Hopelijk met iets wat werkt... dat normaliseren heb ik nog nooit gedaan en echt makkelijk vind ik het niet, maar ik doe een poging.
Morgen opnieuw vanaf nul.
 
Normaliseren is vooral een logisch denkproces. Daarbij kijk je naar je gegevens en zoek je patronen. In jouw geval vul je verschillende postcodes in, verschillende huisnummers maar blijk je dan continue dezelfde straatnamen en plaatsnamen in te vullen. Dan moet er een belletje gaan rinkelen: zouden die plaatsnamen en straatnamen die nu zo vaak herhaald worden er niet uit kunnen? Zo ja: dan ben je aan het normaliseren! Zo nee: ben je nog steeds aan het normaliseren, maar heb je de conclusie getrokken dat die gegevens tóch uniek bij het record horen :). Kijk anders nog eens in de eerste hoofdstukken van de Access cursus; die begint namelijk met normaliseren.
 
ik heb mn best gedaan om te normaliseren ;-)

Ok, ik ben even opnieuw begonnen in de hoop dit nog werkende te krijgen. nog even een korte beschrijving van waar ik vast zit.


Nu kan er via het formulier ‘aangifte’ een adres opgezocht worden (bestaat dit al?) en opent een formulier als dit nog niet bestaat (bij niet in lijst ->Macro (ik kan geen vba)). Idem voor de eigenaar.



* Als het adres niet bestaat opent het formulier om een nieuw adres toe te voegen, maar eens toegevoegd en terug gekomen in formulier ‘aangifte’ moet ik op ‘esc’ duwen en ‘alles vernieuwen’ voor hij in de lijst komt. Kan dit niet makkelijker? Idem voor eigenaar

*Bij het veld ‘eigenaar’ zoekt hij nu op voornaam, ik wil dat hij op familienaam zoekt.
Opm: ik kan geen vba schrijven, het stukjes da er in zit om te zoeken naar de postcode / gemeente komt van hier: http://access.xps350.com/ dus het werkt, maar voor mij is het tovenarij. Heel erg bedankt aan de schrijver ervan.

Het voorbeeldbestandje is hier te vinden
http://we.tl/P4H01Y6Ne8
 
Laatst bewerkt:
dat automatisch refreshen moet toch mogelijk zijn? (en die familienaam zeker, ik weet gewoon niet waar aan te passen)
 
Ik heb de code die normaal gesproken goed werkt, maar bij jou niet. Geen idee waarom niet, maar wellicht omdat je een (overbodige) query gebruikt onder je formulier en niet de tabel [Aangifte]. Stoei er maar eens mee. En inderdaad, geen macro :D.

Code:
Private Sub id_adres_NotInList(NewData As String, Response As Integer)
Dim Result As Variant
Dim Msg As String, CR As String

    CR = Chr$(13)
    If NewData = "" Then Exit Sub
    Msg = "'" & NewData & "' staat niet in de lijst." & CR & CR
    Msg = Msg & "Wil je " & NewData & " toevoegen?"
    If MsgBox(Msg, vbQuestion + vbYesNo) = vbYes Then
        DoCmd.OpenForm "Adres", , , , acAdd, acDialog, NewData
    End If
    Me.id_adres.Requery
    
    ' Zoek het nieuwe adres op in de tabel Adresses.
    Result = DLookup("[id adres]", "Adres", "[straat]='" & NewData & "'")
    If IsNull(Result) Then
        ' Als het artikel niet is gemaakt, Response argument op Error message zetten en herstellen.
        Response = acDataErrContinue
        MsgBox "Nog een keer proberen...", vbOKOnly
    Else
        ' Als het adres is gemaakt, het Response argument Added zetten.
        Me.id_adres = Result
        MsgBox "Adres id: " & Result
    End If

End Sub
De msgbox zit er in zodat je kunt zien dat het nieuwe adres wel degelijk wordt gemaakt en ingevuld.

Op het formulier Adres krijg je dan deze code:

Code:
Private Sub Form_Load()
    If Me.OpenArgs & "" <> "" Then
        Me.Straat = Me.OpenArgs
        Me.huisnummer.SetFocus
    End If
End Sub
 
van onder t stof... ik zwier de (overbodige) query er uit, maak een nieuw formulier en ik zoek eens uit waar ik die code kwijt kan, een mens kan maar proberen :-)
 
dan probeer je t ene, werkt t andere niet meer... ik denk dat access zn brein anders ingesteld is dan t mijne...
bon, met de goeie moed er in!:

ik heb t dus zonder query geprobeerd. Het formulier 'aangifte' is nu gebaseerd op de tabel 'aangifte' (en niet langer op de query)
de eerste code van hierboven heb ik geplakt in het eigenschapvenster 'bij niet in lijst' van het veld 'id adres';
- waar moet het tweede deel van die code komen?
- nu krijg ik helemaal niets meer van keuzemogelijkheden die automatisch zouden moeten aanvullen (in het oude formulier 'aangifte_oud' deed hij dit wel deels, maar daar was t op voornaam ipv familienaam)

link naar hoe t nu zit:
http://we.tl/4wCi0Gmdup
 
Laatst bewerkt:
In het formulier <Aangifte> (de nieuwe dus) heb je de keuzelijst Adres gebaseerd op de tabel [Adres] (mag, mag ook een query zijn overigens), maar de instelling is niet helemaal goed. Je hebt maar 1 kolom ingesteld, en met de kolombreedte-instelling van je oude formulier (0cm;4cm;2cm;2cm) heb je die ene kolom ook nog eens verborgen (breedte 0cm). Dus dan zie je ook nog eens niks. Als je het aantal kolommen verhoogt naar 4, doet de keuzelijst het weer. En dan kun je ook de gebeurtenis <Bij niet in lijst> dus triggeren. Daarnaast heb je een stukje code vergeten, want de Form_Load moet op het te openen formulier worden gezet; daar wil je namelijk de nieuwe waarde gebruiken om een nieuw adres toe te voegen.
Ik heb de code aangepast in je voorbeeldje zodat-ie nu goed werkt.
 

Bijlagen

dat is alweer een stuk verder, maar die code, da's echt cantonees voor mij...
maar t is alweer een stukje dichter...
Bij eigenaar zoekt hij nu wel enkel op voornaam, ik vind maar niet hoe ik dat op familienaam kan zetten. en idem al t adres zou ik hier ook de naam willen toevoegen als hij nog niet bestaat. (maar dat doe ik blijkbaar fout als ik t met een macro probeer en het formulier open)
als adres had ik ook graag t voledige adres gezien, nu zie ik enkel de straatnaam. Als ik daar gewoon het veld huisnummer aan toe voeg in een apart veld, werkt de code niet meer want dan krijg ik een foutmelding...

http://we.tl/i8kxp20InY
 
Een keuzelijst kun je maar aan één kolomwaarde hangen als het gaat om gegevens doorzetten naar een ander formulier. Dat is het veld dat je als eerste ziet. Zet je het veld Voornaam vooraan, dan is dat je zoek/sorteerveld. Wil je op Achternaam zoeken, dan moet je dat veld dus vooraan zetten, en het veld Voornaam daarachter.

Cantonees is de code voor mij (gelukkig) al een tijdje niet meer, en met simpel sleuren en pleuren kopieer je de hele code zo naar het veld id_Eigenaar. Moet je daarna natuurlijk nog wel de naam van de keuzelijst en van het formulier aanpassen, anders open je het formulier Adres i.p.v. het formulier Eigenaar. Wat betreft je namen trouwens: die vind ik hoogst ongelukkig. Al jouw objecten hebben dezelfde naam. En dat is niet echt handig. Want verwijst de naam "id_eigenaar" nu naar het veld "id_eigenaar" of naar de keuzelijst "id_eigenaar"? Wie het weet, mag het zeggen.... Hetzelfde geldt voor je tabellen en formulieren: is "eigenaar" een tabel of een formulier? In jouw geval dus beide! Ik zou tabellen een voorvoegsel geven (tblEigenaar, tblAdres) en formulieren ook (frmEigenaar, frmAdres) zodat je in je code altijd refereert naar het correcte object. Hetzelfde geldt voor je velden en objecten. Het veld [id aangifte] zou ik dus txtAangifte noemen, en de keuzelijst cboAdres en cboEigenaar.
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan