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: 21-11-2024 kl. 12: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
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
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
|
|