Dansk Access Forum
  Hjælp Hjælp  Søg i forum   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketIF NOT EXIST THEN OPEN

 Besvar Besvar
Forfatter
Erhard Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 02-03-2017
Land: Mand
Status: Offline
Point: 6
Direkte link til dette indlæg Emne: IF NOT EXIST THEN OPEN
    Sendt: 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
Til top



Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Accepteret svar Accepteret svar
Direkte link til dette indlæg Sendt: 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
Til top
Erhard Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 02-03-2017
Land: Mand
Status: Offline
Point: 6
Direkte link til dette indlæg Sendt: 03-03-2017 kl. 15:16
Tak for det Hans. Den var da noget nemmere i Basis må jeg sige :-)
Til top
Erhard Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 02-03-2017
Land: Mand
Status: Offline
Point: 6
Direkte link til dette indlæg Sendt: 03-03-2017 kl. 15:32
Hvor putter jeg denne programmering ind henne???
Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Direkte link til dette indlæg Sendt: 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
Til top
Erhard Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 02-03-2017
Land: Mand
Status: Offline
Point: 6
Direkte link til dette indlæg Sendt: 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
Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Direkte link til dette indlæg Sendt: 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
Til top
Erhard Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 02-03-2017
Land: Mand
Status: Offline
Point: 6
Direkte link til dette indlæg Sendt: 09-03-2017 kl. 17:24
Ikonet til upload er ikke synligt i min editor
Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Direkte link til dette indlæg Sendt: 10-03-2017 kl. 10:13
Citat: Erhard Erhard skrev:

Ikonet til 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
Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Direkte link til dette indlæg Sendt: 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
Til top
Erhard Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 02-03-2017
Land: Mand
Status: Offline
Point: 6
Direkte link til dette indlæg Sendt: 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.

Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Direkte link til dette indlæg Sendt: 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
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2013 - 2024 Dansk Access Forum - en del af Excel-regneark.dk