Avatar billede BRS Nybegynder
09. januar 2002 - 13:17 Der er 19 kommentarer og
1 løsning

Tilføjelse af valg til opslagstabel

Jeg en tabel hvor et af felterne er et opslag i en anden tabel. Jeg har brug for ikke at være fastlåst til de valg der er i opslagstabellen... så langt så godt... det fungerer fint...

Jeg ville så gerne ha\' at evt. indtastet tekst som ikke findes i opslagstabellen bliver tilføjet til opslagstabellen automatisk (eller evt. lige spørge først).

Det er Access 2000...
Avatar billede terry Ekspert
09. januar 2002 - 13:27 #1
Here is an example.
In the combo boxes NOT IN LIST EVENT you add a procedure that looks like this.

Private Sub cboGade_NotInList(NewData As String, Response As Integer)
Dim prompt As String
   
    Response = acDataErrContinue
   
    prompt = \"Denne gade findes ikke i listen, ønsker du at oprette den?\"
    If MsgBox(prompt, vbYesNo, \"Gade findes ikke!\") = vbYes Then
   
    DoCmd.OpenForm \"frmStreetMaintenance\", , , , acFormAdd, acDialog, NewData
        If DLookup(\"StreetID\", \"tblStreet\", \"StreetName = \'\" & NewData & \"\'\") Then
       
            Response = acDataErrAdded
           
        End If
   
    End If
End Sub

Then in the form you use to enter the new data add this to the ON LOAD EVENT.

Private Sub Form_Load()
    If Not IsNull(Me.OpenArgs) Then Me.StreetName = Me.OpenArgs
End Sub

An explanation:
In the example the user enters a strret name in the combo. If the name is NOT found then the user is asked if they want to create a new one. If they answer yes then the form for doing this gets opened, where they can create it. NOTE that the entered value gets passed to the form and is displayed in the field named Me.StreetName. 
When the form is closed I make a dlookup to make sure they actually did add a new record.
If they did then I set Response = acDataErrAdded
which tells Access to refresh the combo.

Easy IKKE?
Avatar billede BRS Nybegynder
09. januar 2002 - 13:52 #2
hmmm... jeg synes nu ikke at der sker noget... :)

Jeg har en tabel der hedder tbl_licenser. Den indholder et felt der hedder version. Det felt er en kombinationsboks som henter data fra en tabel der hedder tbl_versioner.
tbl_versioner indeholder kun dette ene felt.

Jeg har så en formular der hedder frm_licenser hvor felterne fra tbl_licenser er på.
Jeg har så i kombinationsboksens VedIkkePåListe skrevet følgende...

Private Sub Version_NotInList(NewData As String, Response As Integer)
Dim prompt As String
   
    Response = acDataErrContinue
   
    prompt = \"Denne version findes ikke i listen, ønsker du at oprette den?\"
    If MsgBox(prompt, vbYesNo, \"Version findes ikke!\") = vbYes Then
   
    DoCmd.OpenForm \"frm_versioner\", , , , acFormAdd, acDialog, NewData
        If DLookup(\"version\", \"tbl_versioner\", \"version = \'\" & NewData & \"\'\") Then
       
            Response = acDataErrAdded
           
        End If
   
    End If
End Sub

I formularens VedÅbning har jeg skrevet følgende...

Private Sub Form_Open(Cancel As Integer)
  If Not IsNull(Me.OpenArgs) Then Me.Version = Me.OpenArgs
End Sub

Jeg har så oprette en dataark\'s formular baseret på tbl_versioner og henvist til den i DoCmd.OpenForm sektionen.

Kan du gennemskue hvad der går galt... ?

Der sker ingenting når jeg indtaster noget der ikke er på listen...
Avatar billede proaccess Nybegynder
09. januar 2002 - 14:05 #3
Hvis din tabel over versioner kun her et felt (tekst-felt), som indeholder navnene på eksisterende versioner, som også lagres i din licens-tabel...  SÅ kan du lige-så-godt bruge et opslag i din licenstabel, og derved bare angive at der gerne må tilføjes nye værdier...

SELECT DISTINCT Version FROM tba_licenser;

Så behøver du slet ikke have versions-tabellen...
Og hvis du angiver en ny værdi i versions-feltet, så tilføjes det automatisk til din licens-tabel, og derved til din liste (evt. først efter en requery)
Avatar billede BRS Nybegynder
09. januar 2002 - 14:12 #4
proaccess -> Jeg har en del valgmuligheder og jeg synes ikke at det var særlig brugervenligt at skulle sidde og tilføje de enkelte muligheder på opslagsdelen i feltet... derfor oprettede jeg den ekstra tabel.

BTW så bliver valg der ikke findes på listen IKKE tilføjet automatisk - ellers havde du fuldstændig ret i at tbl_versioner havde været overflødig...
Avatar billede terry Ekspert
09. januar 2002 - 14:13 #5
you MUST have the limit to list property set to yes(true) before the on not in list event fires!
Avatar billede BRS Nybegynder
09. januar 2002 - 14:14 #6
Man kan vist heller ikke angive at der må *tilføjes* nye værdier - kun om andre værdien end de forud-indtastede må forekomme... :)
Avatar billede BRS Nybegynder
09. januar 2002 - 14:15 #7
terry -> oki - jeg prøver lige... :)
Avatar billede proaccess Nybegynder
09. januar 2002 - 14:16 #8
Du skulle IKKE oprette det som en liste, men som en tabel/forespørgsel, med den angivne SQL... så bliver opslaget dynamisk... 
Avatar billede terry Ekspert
09. januar 2002 - 14:17 #9
You can have the limit to list set to No(false) or what ever and allow entering data which does NOT exist in the lookup table. Therefore you MUST set the limit to list to yes(true) to get access to perform the not in list event
Avatar billede proaccess Nybegynder
09. januar 2002 - 14:19 #10
Du har 2 alternativer:

ENTEN bruge en tabel med opslagsværdier, som du vedligeholder som Terry angiver...
ELLER bruge et opslag over værdierne i din faktiske tabel, som således ikke behøver opdatéring, da poster kan tilføjes uden videre (uanset om de allerede eksisterer eller ej)
Avatar billede BRS Nybegynder
09. januar 2002 - 14:25 #11
terry -> nu er det tæt på =)

Den kommer fint frem og spørger om jeg vil tilføje eller ej - og den starter fint formularen frm_versioner. Kan værdien som man indtastede blive automatisk sat ind i feltet - det gør det nemlig ikke...
Indtaster man selv navnet og \'enter\' tilføjer den også fint teksten i tbl_versioner. MEN når jeg så vil lukke frm_versioner får jeg en

RUN TIME ERROR \'13\'

Type mismatch

og kan vælge enten END eller DEBUG.
Vælger jeg DEBUG kan jeg se at det er følgende linie det går galt...

If DLookup(\"version\", \"tbl_versioner\", \"version = \'\" & NewData & \"\'\") Then

Som sagt så er det meget tæt på nu ;o)
Avatar billede terry Ekspert
09. januar 2002 - 14:31 #12
In the open form you send the new value you entered to your form
DoCmd.OpenForm \"frm_versioner\", , , , acFormAdd, acDialog, NewData

In the NewData parameter. Now you have to put it in the field when the form gets opened.
       

Private Sub Form_Load()
    If Not IsNull(Me.OpenArgs) Then Me.YourField= Me.OpenArgs

End Sub

If you are entering a number then you rdlookup should be

If DLookup(\"version\", \"tbl_versioner\", \"version = \" & NewData) Then


Avatar billede BRS Nybegynder
10. januar 2002 - 09:05 #13
grrr... det virker ikke endnu...

Terry -> kan jeg lokke dig til at kigge på den hvis jeg sender den til dig... ?
Avatar billede terry Ekspert
10. januar 2002 - 09:13 #14
dktebrsa@europe.lego.com

tell me which forms to look at and any other infor which may be needed.
Also include a reference to this question so I know what I am receiving, thanks!
Avatar billede BRS Nybegynder
10. januar 2002 - 09:23 #15
Så er den sendt... :)
Avatar billede terry Ekspert
15. januar 2002 - 10:05 #16
hi brian>Do you still need help with this? I dont know what to suggest with the problem sending the file, I am sure its at you rend!

Terry
Avatar billede BRS Nybegynder
15. januar 2002 - 13:05 #17
Jo tak - jeg har ikke fået det løst endnu...

... men det er jo min egen skyld... det er mig der har bolden... :)
Jeg har bare været på kursus hele dagen igår...

Jeg har en mistanke om at det er den webmail jeg brugte til at sende det med... jeg prøver nu at sende det med en alm. mail-client. Håber det lykkes så...

Tak fordi du følger op på spørgsmålet - det er kanon - og dem burde der findes flere af !!!
Avatar billede terry Ekspert
20. januar 2002 - 17:56 #18
Hi Brian!
Have you received my mail from 15-01-2002 19:41?

If so, does it work?
Avatar billede terry Ekspert
03. februar 2002 - 10:39 #19
Hey  Brian! Whats the chances of you acepting my answer? I know points isnt everything but I have used some of my own free time in heling you out here!
Avatar billede terry Ekspert
23. juni 2003 - 17:41 #20
tak :o)
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