Avatar billede -anders- Juniormester
01. oktober 2002 - 21:32 Der er 14 kommentarer og
1 løsning

Ved ikke på liste i en combobox

Hej eksperter
Jeg ved at nedenstående senarie før har været rejst i dette forum, jeg har søgt og fundet flere ting, men det virker ikke for mig, så mit spørgsmål er:

Jeg har en tabel "tbl_genre", i denne tabel er der to felter "GenreID" som er primær nøgle med datatypen autonumering, samt "Genre" som er af datatypen tekst. Så har jeg en en tabel til "tbl_data" her er der oprettet et felt, hvor jeg har lavet et opslag som slår op i tabellen "tbl_genre". Relationen er af typen en til mange, hvor primærnøglen fra "tbl_genre" er skjult. alt dette virker uden problemer.

Så har jeg lavet en form som har "tbl_data" som postkilde, i denne form oprettes der nye poster. Her kan brugeren så vælge en genre fra listen.

Hvis nu brugeren taster en genre som ikke findes på listen vil jeg gerne have at den automatisk bliver tilføjet til "tbl_genre" og comboen i formen skal så opdatere således at den nye indtastede genre nu kan vælges fremover. Det skulle gerne virke uden at brugeren for en massse popup om dit og dat. Jeg ved at det er noget med at gå ind på comboen og skrive en eller anden kode under hændelsen "ved ikke på liste". Jeg arbejder pt. i access 2000. Er der nogen der kan hjælpe?

/Anders
Avatar billede nybegynderen Nybegynder
01. oktober 2002 - 21:58 #1
Prøve at sende din DB til mig, så skal prøve at kigge på det... Tror jeg har noget kode der kan bruges liggende ! - Claus
Avatar billede mugs Novice
01. oktober 2002 - 22:09 #2
Hvis du dætter egenskaben "BegrænsTilListe" til Nej, vil de nye data blive oprettet i tabellen uden popup, og formularens kombinationsboks opdateres.

Det er dog lidt farligt at gøre, idet der ikke tages højde for stavefejl. Hvis du f.eks. indtaster "kal" i stedet for "kalv", vil du ikke opdage det, og dine data bliver dermed ikke korrekte.

Men jeg tror nu ikke, det er det du mener.
Avatar billede sjap Praktikant
01. oktober 2002 - 22:21 #3
Prøv at se på nedenstående

http://www.mvps.org/access/forms/frm0015.htm

Det lyder som om det er meget tæt på dit ønske.
Avatar billede nih Novice
01. oktober 2002 - 22:26 #4
Argh superjap - Det var lige det link jeg ville finde til dette spm.
Men du var 5 min hurtigere end mig ;o)

aandersen -> Husk at sætte referencen til DAO

Niels
Avatar billede sjap Praktikant
01. oktober 2002 - 22:32 #5
Så se mugs, han var meget hurtigere. De gamle kan endnu :-)
Avatar billede nih Novice
01. oktober 2002 - 22:35 #6
Jeg er nu heller ikke ung længere :(
Det 'sjove' var at jeg havde fundet det samme link som dig, og inden jeg ville sende det her - opdaterede jeg browseren - og vupti, du var først.
Avatar billede sjap Praktikant
01. oktober 2002 - 22:39 #7
Det synes jeg nu sker tit for mig - uanset om jeg har brugt 3 sek. (sådan føles det) eller 20 minutter på svaret.
01. oktober 2002 - 23:43 #8
Sørg for at egenskaben "Begræns til liste" = Ja

Læg denne kode på hændelsen "VedIkkePåListe"

Private Sub Postnr_NotInList(NewData As String, Response As Integer)
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim NyGenre As String
    If MsgBox("Genren findes ikke i forvejen!" & vbNewLine & "Ønsker du ar oprette den ny genre?", vbQuestion + vbOKCancel, "Opret ny genre?") = vbOK Then
        Set rs = New ADODB.Recordset
        Set cn = CurrentProject.Connection
        rs.Open "tbl_Genre", cn, adOpenKeyset, adLockOptimistic
        rs.AddNew
        rs!Genre= NewData
        rs.Update
        Response = acDataErrAdded
        rs.Close
        Set rs = Nothing
        cn.Close
        Set cn = Nothing
    Else
        Response = acDataErrContinue
    End If
   
End Sub

/Thomas
01. oktober 2002 - 23:44 #9
En mindre modifikation:

Private Sub Postnr_NotInList(NewData As String, Response As Integer)
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    If MsgBox("Genren findes ikke i forvejen!" & vbNewLine & "Ønsker du ar oprette den ny genre?", vbQuestion + vbOKCancel, "Opret ny genre?") = vbOK Then
        Set rs = New ADODB.Recordset
        Set cn = CurrentProject.Connection
        rs.Open "tbl_Genre", cn, adOpenKeyset, adLockOptimistic
        rs.AddNew
        rs!Genre= NewData
        rs.Update
        Response = acDataErrAdded
        rs.Close
        Set rs = Nothing
        cn.Close
        Set cn = Nothing
    Else
        Response = acDataErrContinue
    End If
   
End Sub
Avatar billede terry Ekspert
02. oktober 2002 - 08:18 #10
Private Sub cboEvent_NotInList(NewData As String, Response As Integer)
Dim prompt As String
     
    prompt = "The text you entered wasn't in the list." & vbCrLf
    prompt = prompt & "Do you want to use this text?"
   
    If (msgBox(prompt, vbExclamation + vbYesNo, "Not in list!") = vbYes) Then
       
        DoCmd.SetWarnings False
        DoCmd.RunSQL "INSERT INTO tbl_genre(genre ) VALUES ('" & NewData & "')"
        DoCmd.SetWarnings True
       
        Response = acDataErrAdded
    Else
        Response = acDataErrContinue
       
    End If
End Sub

and dont forget to set the limit to list = YES
Avatar billede -anders- Juniormester
02. oktober 2002 - 08:47 #11
Hej alle
Er lige mødt på arbejde, jeg kikker på jeres forslag inden for en time, så jeg vender tilbage forløbig tak for indlægende
Avatar billede -anders- Juniormester
02. oktober 2002 - 10:37 #12
Hej er nu tilbage, en meget travl formiddag.
Jeg har prøvet de forskelige indlæg i praksis, indlægget fra Terry virkede med det samme uden problemer. Indlægget fra Thomas kørte også, men her var der lidt med nogle referancer, men elles godt nok. Alle indlægende har være meget lærerige, men jeg har valgt at bruge Terry's løsning, så derfor points til ham.
Til alle jer andre tusind tak for indlægende.
Terry>>, her er dine points.
*SS* Anders.
Avatar billede terry Ekspert
02. oktober 2002 - 10:40 #13
thanks!
Avatar billede ole71 Nybegynder
10. februar 2003 - 16:12 #14
Jeg har lavet en db, hvor jeg grundlæggende har samme problem som ovenstående. Jeg har tænkt det løst ved hjælp af en sub med tre argumenter, nemlig sub(hvilken tabel, hvilket felt og hvilket datum). Men når jeg på forskellige måder prøver at skrive til tabellen, ender jeg altid ned i autonummeringsfeltet, og ikke det tekstfelt jeg ønsker at skrive i. Jeg har prøvet ovenstående løsningsforslag, men intet af det virker... Hvad gør jeg??

MVH
Ole
Avatar billede mugs Novice
10. februar 2003 - 18:01 #15
Lav en formular, der åbnes hvis du vælger at tilføje data til tabellen. derefter kan du bruge kommandoen:

Docmd.GoToControl "Feltnavn"

Så vil markøren gå til kontrolelementet med det angivne navn.
Du kan også markere kontrolelementerne og i fanen data, markere felterne som aktiverede eller låste.
Eller ændre tabulatorrækkefølgen.
Det er kun et spørgsmål om temperament.
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