Avatar billede jalle Nybegynder
18. januar 2002 - 21:19 Der er 7 kommentarer og
2 løsninger

Problemer med søge efter en eksisterende post

Jeg har en formular, hvor det skal være muligt at indtaste et nummer og skal derefter checke om nummeret findes og hvis det gør, så skal den gå til den angivne post ellers skal den oprette en ny records.

Først skal man vælge et program (programnummerID) og derefter skal man vælge et optagelsesnummer og det er her det går galt, hvis man vælger et nummer som allerede findes i tabellen.

Min VB-kode ser sådan ud:
Private Sub Optagelsesnummer_AfterUpdate()
    XProgramID = ProgramidX
    XOptagelsesNR = Optagelsesnummer
    XOptagelsesID = FktProgramID() * 10 + FktOptagelsesNR()
    If XOptagelsesID = OptagelsesID Then
        DoCmd.GoToRecord acDataForm, \"OptagelsesID\", acGoTo, 4
    Else
        DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
        Me.ProgramnummerID = FktProgramID()
        Me.OptagelsesID = (Me.ProgramnummerID * 10) + FktOptagelsesNR()
        Me.Optagelsesnummer = FktOptagelsesNR()
    End If
End Sub

Håber at der er nogen der kan hjælpe?
Avatar billede mugs Novice
18. januar 2002 - 23:20 #1
Flg. kode i Access97 er gældende for et alfanumerisk felt. Såfremt indholdet af Tabel1 felt1 eksisterer vil posten blive fundet:

If DCount(\"*\", \"Tabel1\", \"[felt1] >\'0\'\") Then
Me!Felt1.SetFocus
DoCmd.FindRecord Me!Felt1
End If

for et numerisk felt skal du undlade \'\' omkring 0
Avatar billede jalle Nybegynder
19. januar 2002 - 10:57 #2
Jeg kan ikke få det til at virke - den kommer ud og siger at det vil give dublerende data i indexes.

Min nuværende kode ser sådan ud:
If XOptagelsesID = DLookup(\"OptagelsesID\", \"[T_Optagelsesnummer]\", \"OptagelsesID=\" & FktOptagelsesID()) Then
\'her skal den gå til den givne række i tabellen og bruge.
        If DCount(\"*\", \"T_Optagelsesnummer\", \"[OptagelsesID] >0\") Then
            Me!Optagelsesnummer.SetFocus
            DoCmd.FindRecord Me!Optagelsesnummer
        End If

        \'DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
        \'DoCmd.GoToRecord acDataForm, \"OptagelsesID\", acGoTo, 4
        \'DoCmd.GoToRecord , , acNext
        \'Me.OptagelsesID.SetFocus
        \'DoCmd.FindRecord Me.OptagelsesID
    Else
Avatar billede mugs Novice
19. januar 2002 - 20:19 #3
Når du indsætter koden i feltets AfterUpdate er tabellen allerede opdateret, d.v.s. at fejlen kommer fordi der allerede er en post med en tilsvarende værdi i tabellens indekserede felt (dublerede data i index).

Prøv som udgangspunkt at flytte koden til BeforeUpdate. Men jeg er så bange for, at FindRecord ikke fungerer, fordi den post du søger jo så ikke findes i tabellen.

Jeg har ikke nogen løsning i øjeblikket, men vil arbejde videre på sagen.


Avatar billede jalle Nybegynder
19. januar 2002 - 21:23 #4
Er du interesseret i at få en kopi så du kan rode med det ? eller få en fornemmelse af hvad det konkret er jeg mener ?
Avatar billede mugs Novice
19. januar 2002 - 21:40 #5
Ja - Jeg vil gerne se på det, men ikke love en løsning.

Der er noget selvmodsigende i spørgsmålet, idet du prøver at oprette en post i et indekseret felt, hvor værdien allerede eksisterer, her stopper koden idet du skal få en fejl.

Derefter vil du søge efter en post, hvor du søger efter feltet i tabellen idet du refererer til Me!Feltnavn. det er selvmodsigende idet feltet jo ikke indeholder en værdi, fordi det ikke er opretttet.
Avatar billede jalle Nybegynder
19. januar 2002 - 21:47 #6
Det er jeg faktisk godt klar over, men jeg kunne ikke finde på en bedre måde at definere det på og det er faktisk mit problem - ved ikke om det kan laves på en helt anden måde en på den måde som jeg er startet på, men det tænker jeg over og har gjort det i mange dage uden at komme til løsningen :(

Har du en e-mail adresse, ellers kan du lige skrive til mig på webmaster@lws.dk
Avatar billede mugs Novice
19. januar 2002 - 23:20 #7
Undskyld - for dumt af mig ikke at opgive mail:
mugs@get2net.dk
Avatar billede mugs Novice
20. januar 2002 - 21:03 #8
Forslag til kode sendt
Avatar billede jalle Nybegynder
21. januar 2002 - 22:23 #9
Jeg fandt ud af det med denne kode og formularen har ingen tabel eller forespørgsel som grundlag.

\' ingen advarsler ønskes
    DoCmd.SetWarnings False
    \' sætter funktionen FktOptagelsesID() til en varibel
    XOptagelsesID = Me.ProgramidX * 10 + Optagelsesnr
    \'Checker om der er et eksisterne OptagelsesID og hvis ikke så opret den i tabellen T_OptagelsesID
    If IsNull(DLookup(\"[OptagelsesID]\", \"[T_Optagelsesnummer]\", \"OptagelsesID = FktOptagelsesID()\")) Then
        DoCmd.RunSQL \"Insert into T_Optagelsesnummer (OptagelsesID, ProgramnummerID, Optagelsesnummer)\" & _
        \"SELECT FktOptagelsesID(), ProgramidX, Optagelsesnr\"
        Me.OptagelsesID = FktOptagelsesID()
    Else
        Me.OptagelsesID = DLookup(\"[OptagelsesID]\", \"[T_Optagelsesnummer]\", \"OptagelsesID=\" & FktOptagelsesID())
    End If
    \' Sætter datoen i som en oplysning
    Me.Dato = DLookup(\"[OptagelsesDato]\", \"[T_programnummer]\", \"ProgramnummerID=\" & ProgramidX)
    DoCmd.SetWarnings True

mugs får 2/3 af pointene for hjælpen, selvom jeg ikke kunne bruge det som han sendte til mig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester