Print side | Luk vindue

IF NOT EXIST THEN OPEN

Udskrevet fra: Dansk Access Forum
Kategori: Hjælp til Access
Forum navn: Generelt
Forum beskrivelse: Spørgsmål til den daglige brug af selve programmet Access
Web-adresse: https://www.accessforum.dk/forum_posts.asp?TID=101
Udskrevet den: 01-05-2024 kl. 06:04


Emne: IF NOT EXIST THEN OPEN
Besked fra: Erhard
Emne: IF NOT EXIST THEN OPEN
Posteringsdato: 02-03-2017 kl. 20:36
Hej!

I gamle dage programmerede jeg meget i DSI database som var i basis
I dag er det så Access man roder med

Hvad hedder det i Access som i DSI hed "IF NOT EXIST THEN OPEN ("Postnummer")
Jeg kan sagtes få adressekartoteket til at hente byen når jeg skrive postnummeret i adressekartoteket, men hvis nu postnummeret ikke findes, skulle jeg gerne kunne komme over i postnummerkartoteket og oprette det, og so komme tilbage til adressekartoteket?

Erhard



Svar:
Besked fra: hkh
Posteringsdato: 03-03-2017 kl. 07:45
Hej Erhard

Jeg benytter en funktion i et modul, her er en forenklet version.
Denne funktion vil returnere true hvis postnummeret er oprettet


Function PostnummerOprettet(PoNr As String)
    Dim data As Recordset
    
    PostnummerOprettet = False
    Set data = CurrentDb.OpenRecordset("SELECT Tab_Postnr.* From Tab_Postnr WHERE (((Tab_Postnr.Postnr)='" & PoNr & "'));")
    If data.EOF = False Then PostnummerOprettet = True
    Set data=Nothing

End Function

Den kan kaldes fra en if..then..else sætning

if PostnummerOprettet("4300")=true then
   hvis postnummeret er oprettet gør et eller andet.
else
   hvis postnummeret ikke er oprettet gør noget andet.
endif






-------------
Hans


Besked fra: Erhard
Posteringsdato: 03-03-2017 kl. 15:16
Tak for det Hans. Den var da noget nemmere i Basis må jeg sige :-)


Besked fra: Erhard
Posteringsdato: 03-03-2017 kl. 15:32
Hvor putter jeg denne programmering ind henne???


Besked fra: hkh
Posteringsdato: 03-03-2017 kl. 20:08
Citat: Erhard Erhard skrev:

Hvor putter jeg denne programmering ind henne???

Det afhænger af hvad du vil have udført, men hvis vi går ud fra at du vil have kontrolleret om postnummeret er oprettet, kan du benytte en hændelsesprocedure for feltet hvor du indtaster dit postnummer!

-------------
Hans


Besked fra: Erhard
Posteringsdato: 07-03-2017 kl. 16:33
Er der ikke noget der hedder før indtastning og efter indtastning i Access? Det som jeg skal bruge er efter indtastning


Besked fra: hkh
Posteringsdato: 08-03-2017 kl. 07:18
Når du markerer et tekstfelt, kan du højreklikke og vælge egenskaber.
Der kan du vælge hændelser.

Så kan du vælge den der passer dig, jeg vil foreslå at du benytter 'Ved udgang'
Det giver den fordel, frem for 'Før update' 'Efter update' at du kan kontrollere inden ændring gemmes i posten.

Det postnr. du skal undersøge finder du [navn på dit tekstfelt].text

Hvis du ikke kan få det til at virke, kan du zippe en kopi af databasen med postnr. tabellen og formularen samt formularens underliggende tabel.
Så skal jeg kikke på det.




-------------
Hans


Besked fra: Erhard
Posteringsdato: 09-03-2017 kl. 17:24
Ikonet til /topic2.html - upload er ikke synligt i min editor


Besked fra: hkh
Posteringsdato: 10-03-2017 kl. 10:13
Citat: Erhard Erhard skrev:

Ikonet til /topic2.html" rel="nofollow - /topic2.html - upload er ikke synligt i min editor

Dette kan skyldes at du benytter hurtigt svar og ikke knappen [Besvar]

Jeg har foretaget nogle ændringer i din database og sendt den retur.

-------------
Hans


Besked fra: hkh
Posteringsdato: 10-03-2017 kl. 10:19
Hvis der er andre der kunne have gavn af funktionen kommer den her:

KontrolNøglefejl kan placeres i et modul eller i en formular.
Her kommer koden til postnummerfeltets kombobox's NotInList

Private Sub Postnummer_NotInList(NewData As String, Response As Integer)
    Dim HuskPostnummer
    Response = Cancel 'ingen visning advarsel
    HuskPostnummer = NewData 'gem det nye postnummer til senere brug
    Postnummer = 0 'sæt postnummer til ukendt
    DoCmd.RunCommand acCmdSaveRecord 'gem post, så der ikke opstår konflikter
    If KontrolNøglefejl("postnumre", "postnummer", HuskPostnummer) = False Then
        DoCmd.OpenForm "postnumre", , , , , acDialog 'åben postnummertabellen
        'DoCmd.OpenForm "postnumre", , , , acFormAdd, acDialog' brug denne linje hvis du ønsker postnummerformularen til at åbne med en tom ny post
        If KontrolNøglefejl("postnumre", "postnummer", Postnummer) = False Then 'Vi tester lige om postnummeret blev oprettet
            MsgBox "Postnummeret er ikke oprettet!"
            GoTo Afslut
        End If
        Postnummer.Requery 'opdater listen i komboboxen for postnummer
        Postnummer = HuskPostnummer 'indsæt det nye postnummer i postnummerfeltet
        Bynavn.SetFocus 'flyt til bynavn
    End If
Afslut:

End Sub

Function KontrolNøglefejl(Tbl As String, Felt As String, Søg) As Boolean
    Dim Nøglefejl As Recordset
    On Error GoTo FejlKontrolnøglefejl
    'funktionen returnerer true hvis søgeteksten findes eller der opstår en fejl
    'tbl=tabel der skal søges i
    'felt=feltet der skal søges i
    'Søg=indholdet der skal søges efter
    KontrolNøglefejl = False
    Set Nøglefejl = CurrentDb().OpenRecordset(Tbl) 'åbner tabellen
    While Nøglefejl.EOF = False 'udføres hvis ikke sidste post i nøglefejl er nået
        kont = Nøglefejl("" & Felt) ' hent indhold i feltet
        If kont = Søg Then 'sammenlign indhold med søgetekst
            KontrolNøglefejl = True ' hvis søgeteksten er oprettet, sæt kontrolnøglefejl til true
            GoTo Afslut
        End If
        Nøglefejl.MoveNext 'gå til næste post i søgetabellen
    Wend
Afslut:
    Set Nøglefejl = Nothing 'slet tabellen fra hukommelsen
    Exit Function

FejlKontrolnøglefejl:
    'Hvis der opstår en fejl vis fejlen og sæt kontrolnøglefejl til true
    MsgBox Err.Number & ": " & Err.Description
    KontrolNøglefejl = True
    Set Nøglefejl = Nothing
End Function

For en god ordens skyld kommer her betydningen af linjen:
If KontrolNøglefejl("postnumre"(tabellen der skal søges i), "postnummer"(Feltet der skal søges i), HuskPostnummer(hvad skal der søges efter)) = False Then



-------------
Hans


Besked fra: Erhard
Posteringsdato: 10-03-2017 kl. 22:10
At dette skulle blive så besværlig havde jeg ikke regnet med. I gamle dage skrev man bare IF NOT EXIST THEN OPEN "Postnummer" og så var den skid slået. En så lang programmering for at komme over i Postnummer skulle da ikke være nødvendig.



Besked fra: hkh
Posteringsdato: 11-03-2017 kl. 13:18
Det er det heller ikke, men funktionen kan bruges til kontrol i alle tabeller.

Det hele afhænger af hvad man ønsker.

-------------
Hans



Print side | Luk vindue