Avatar billede 49jensen Nybegynder
25. juni 2008 - 23:00 Der er 36 kommentarer og
1 løsning

Problem med listebox - måske

I formularen "FrmStatus" baseret på "QryStatus" har jeg oprettet en listebox med værdier fra "QryStatus". Det jeg gerne vil er, at vælge en værdi i listeboxen, som så skal overføre den tilsvarende post til formularen. Er det muligt og skal en eventuel kode lægges ind i listeboxen(ved klik).
Avatar billede fdata Forsker
26. juni 2008 - 01:27 #1
Du kan gøre det ret enkelt. Læg det i listboksens AfterUpdate hændelse:

Private Sub Listboks1_AfterUpdate()
  Me.Filter = "MinNøgle=" & Me.Listboks1
  Me.FilterOn = True
End Sub

(Erstat selv Listboks1 og MinNøgle med dine egne værdier)

Bemærk:
- Når du åbner formularen vil du kunne bladre rundt mellem alle poster.
- Når du har valgt en post på listen, vil du kun se denne ene post.
Avatar billede 49jensen Nybegynder
26. juni 2008 - 15:00 #2
Det virker ikke. Lad os lige resumere. FrmStatus kontrolellement er QryStatus og Listebox kontrolelement er ID Number fra QryStatus. Nøglefeltet i koden er "ID Number". Lyder det fornuftigt.
Avatar billede fdata Forsker
26. juni 2008 - 16:14 #3
Så må det vel være:

Private Sub Listebox_AfterUpdate()
  Me.Filter = "[ID Number]=" & Me.Listebox
  Me.FilterOn = True
End Sub

Pas på med mellemrum i feltnavne!

(skulle det nu heller ikke virke, så beskriv lige fejlen)
Avatar billede 49jensen Nybegynder
26. juni 2008 - 17:24 #4
Den kode har jeg allerede prøvet med, jeg får kun vist markeringen i listen men dataerne forbliver fra den  første post i QryStatus.
Avatar billede fdata Forsker
26. juni 2008 - 22:51 #5
Øøøøh!!?!?!
Din formular er baseret på en forespørgsel. Når du åbner formularen, kan du bladre mellem alle poster, right?
Hvis du vælger en værdi i din Listebox, vil AfterUpdate sætte et filter på formen.
Herefter burde du kun se den post, som filteret angiver.
Tjek lige, om du ved en fejl skulle have fået sat TilladFiltre til Nej (Fanen Data på formularens egenskabsark)
Ellers må du nok (igen) forklare lidt nærmere. Det lyder underligt, at det ikke bare spiller.
Avatar billede 49jensen Nybegynder
26. juni 2008 - 23:23 #6
Ja jeg kan bladre med navigationsknapper, tillad filtre er "ja", redigering "nej",sletning "nej", tilføjelse "ja",dataindtastning "nej"
Avatar billede 49jensen Nybegynder
26. juni 2008 - 23:45 #7
Lige en tilføjelse - kan det have nogen betydning at værdierne skal indsættes på et faneblad?
Avatar billede fdata Forsker
27. juni 2008 - 00:00 #8
Mere forvirring!
"værdierne skal indsættes på et faneblad" - øh, hvilke værdier?
Det eneste, der sker, er at der kobles et filter på formularen, så der kun vises en post. Der bliver ikke indsat værdier.

Prøv at sætte redigering til "ja". Det kan jo være, at Access opfatter dit valg på listboksen som en redigering.
Hvis det er det, der er problemet, kan du smide alle felter (pånær listboksen) ned i en subform, som du låser mod redigering. Så kan hovedformen være åben.
Avatar billede 49jensen Nybegynder
27. juni 2008 - 00:34 #9
Den pågældende posts værdier som er i forespørgslen
Avatar billede 49jensen Nybegynder
27. juni 2008 - 00:39 #10
Er meningen med en listebox ikke - contra navigationsknapper, at gøre det lettere at bladre, eller er jeg helt galt på den, det er ikke usandsynligt da jeg er ny i access?
Avatar billede fdata Forsker
27. juni 2008 - 17:33 #11
En listbox er en måde at "styre" indholdet i et felt (f.eks. at feltet "Køn" kun kan indeholde "Mand" eller "Kvinde"). Feltet har som udgangspunkt intet at gøre med at bladre. Det, du har valgt, er at bruge den som en "hurtig-søgning" - og det er smart nok  ;o)

Men - tilbage til opgaven - hvorfor fungerer det ikke? Hvad sker der?
Er du helt sikker på, at du bruger navnet på din listbox i rutinen?
(hvis din listbox hedder Listebox, SKAL rutinen hedde Listebox_AfterUpdate)
Avatar billede 49jensen Nybegynder
27. juni 2008 - 18:11 #12
Ja det er korrekt, men nu jeg får en fejl "Kontrolelementet kan ikke redigeres fordi det er bundet til autonummereringsfeltet "ID Number"
Avatar billede 49jensen Nybegynder
28. juni 2008 - 11:46 #13
Jeg har prøvet binde listen til et andet felt, feltet er med unikke værdier, altså ingen dubletter, men det virker heller ikke. Du har ret i, at grunden til listen er at lave en hurtigsøgning, men det er jo ikke sikkert at access tillader dette.
Avatar billede fdata Forsker
28. juni 2008 - 20:11 #14
Nu tror jeg, at jeg begynder at forstå, hvad det er, du har gang i.
Søgefeltet må ikke være bundet til et felt!
Rækkekilden til søgefeltet skal være: "SELECT [ID number] FROM QryStatus ORDER BY [ID number]"  (obs: ikke testet!)
Herved får du et felt, som ikke er bundet til din forespørgsel (eller til din formular). Det svæver helt frit rundt og viser bare en liste over dine ID numre. Den værdi, du vælger, bliver ikke gemt noget sted; men når du vælget en værdi på listen, filteres din formular. OK?
Avatar billede 49jensen Nybegynder
28. juni 2008 - 21:42 #15
Det hjalp ikke meget. Første record vises hele tiden, men jeg kan skifte med navigationsknapper.
Avatar billede fdata Forsker
30. juni 2008 - 00:04 #16
Det er en sej-trækker, hvad?
Prøv at smide en debug-linie ind, så du kan se, om filteret overhovedet bliver slået til:
Private Sub Listebox_AfterUpdate()
  Me.Filter = "[ID Number]=" & Me.Listebox
  Debug.Print Me.Filter
  Me.FilterOn = True
End Sub

Tjek resultatet i Immediate vinduet (Ctrl-G)
Ser du de valgte værdier fra listboxen her?
Avatar billede 49jensen Nybegynder
30. juni 2008 - 08:50 #17
Nej det gør jeg ikke. Lad os lige opsummere:
FormStatus bundet til QryStatus
Listbox rækkekilde - SELECT [ID number] FROM QryStatus ORDER BY [ID number]
Koden som lægges i listbox after update -  Me.Filter = "[ID Number]=" & Me.Liste222
  Me.FilterOn = True
Hvor ID Number er i QryStatus
Avatar billede fdata Forsker
30. juni 2008 - 16:51 #18
Der må være noget galt i din kode, hvis du ikke ser noget. Rutinen skal være:

Private Sub Liste222_AfterUpdate()
  Me.Filter = "[ID Number]=" & Me.Liste222
  Debug.Print Me.Filter
  Me.FilterOn = True
End Sub

(er du sikker på, at Liste222 både er navnet på din Listbox og indgår i rutine-navnet)

Du burde da i det mindste se værdierne i Immediate vinduet ...
Avatar billede 49jensen Nybegynder
30. juni 2008 - 19:01 #19
Jeg har kontrolleret kode mm, men der sker absolut intet.
Avatar billede fdata Forsker
01. juli 2008 - 20:16 #20
"der sker absolut intet" lyder godt nok underligt. Der må jo være et eller andet galt, hvis du slet ikke ser noget.
Har du prøvet med en MsgBox i rutinen?
Kan du smide koden herop, så vi andre kan kigge med?
Avatar billede 49jensen Nybegynder
01. juli 2008 - 21:29 #21
Nu fremkommer meddelelsen "Formularen er skrivebeskyttet" når jeg markerer i listen
Hvordan indsætter jeg det?
Hvordan smider jeg koden op, nu er jeg lidt forvirret
Avatar billede fdata Forsker
01. juli 2008 - 21:49 #22
Skrivebeskyttet! Ja, det kunne være en forklaring. Så får du ikke lov til at vælge på listen. Fjern skrivebeskyttelsen:
- Åbn formularen i designvisning
- Dobbeltklik i formularens øverste ventre hjørne (den lille firkant).
- På fanen Data skal TilladRedigeringer være Ja

Med "smid koden op" mener jeg: Det er svært at gennemskue dit problem, når ikke man kan se koden. Derfor:
- Åbn formularen i designvisning
- Klik på knappen Programkode
- Vælg alt (Ctrl-A)
- Kopier (Ctrl-C)
.. og sæt det så ind i en kommentar her på eksperten (Ctrl-V).
Avatar billede 49jensen Nybegynder
01. juli 2008 - 22:13 #23
OK man lærer hver dag.

Option Compare Database

Private Sub Kommandoknap55_Click()
On Error GoTo Err_Kommandoknap55_Click

If DCount("*", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'") = 0 Then

  MsgBox "Enter valid Serial Number", Exclamation
  Else
 
  If MsgBox("Copy data?", vbQuestion + vbYesNo) = vbYes Then
 
    Me.[Part Number] = DLookup("[Part Number]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Description] = DLookup("[Description]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[ID no] = DLookup("[ID no]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[ATA code] = DLookup("[ATA code]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Factory release tag info] = DLookup("[Factory release tag info]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Company release tag info] = DLookup("[Company release tag info]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Time since new] = DLookup("[Time since new]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Cycles since new] = DLookup("[Cycles since new]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Calender time in days since new] = DLookup("[Calender time in days since new]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Manufactoring date] = DLookup("[Manufactoring date]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Time since overhaul] = DLookup("[Time since overhaul]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Cycles since overhaul] = DLookup("[Cycles since overhaul]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Calender time in days since overhaul] = DLookup("[Calender time in days since overhaul]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Overhaul date] = DLookup("[Overhaul date]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Time since repair] = DLookup("[Time since repair]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Cycles since repair] = DLookup("[Cycles since repair]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Calender time in days since repair] = DLookup("[Calender time in days since repair]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Repair date] = DLookup("[Repair date]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Lifetime in hours] = DLookup("[Lifetime in hours]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Lifetime in cycles] = DLookup("[Lifetime in cycles]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Lifetime in days] = DLookup("[Lifetime in days]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Time between overhaul] = DLookup("[Time between overhaul]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Cycles between overhaul] = DLookup("[Cycles between overhaul]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    Me.[Calender time in days between overhaul] = DLookup("[Calender time in days between overhaul]", "QryStoreEntry", "[Serial Number]='" & Me.[Serial Number] & "'")
    End If
   
  End If
 
Exit_Kommandoknap55_Click:
  Exit Sub
 
Err_Kommandoknap55_Click:
MsgBox Err.Description
Resume Exit_Kommandoknap55_Click
   
End Sub


Private Sub Form_AfterUpdate()

End Sub

Private Sub Kommandoknap73_Click()
On Error GoTo Err_Kommandoknap73_Click

    Dim stDocName As String

    stDocName = "Makro1 Minimize"
    DoCmd.RunMacro stDocName

Exit_Kommandoknap73_Click:
    Exit Sub

Err_Kommandoknap73_Click:
    MsgBox Err.Description
    Resume Exit_Kommandoknap73_Click
   
End Sub

Private Sub Kommandoknap78_Click()
Dim X As Single

X = DSum("[Flight time]", "QryFlightInfo", "[AC REG]='OY-SEL'")
Me![AC hours at installation] = X


Dim Y As Integer

Y = DSum("[Landings]", "QryFlightInfo", "[AC REG]='OY-SEL'")
Me![AC cycles at installation] = Y

End Sub

Private Sub Kommandoknap86_Click()
On Error GoTo Err_Kommandoknap86_Click


    DoCmd.PrintOut

Exit_Kommandoknap86_Click:
    Exit Sub

Err_Kommandoknap86_Click:
    MsgBox Err.Description
    Resume Exit_Kommandoknap86_Click
   
End Sub





Private Sub Liste202_AfterUpdate()
Me.Filter = "[Serial Number]=" & Me.Liste202
  Me.FilterOn = True


End Sub
Avatar billede fdata Forsker
01. juli 2008 - 22:39 #24
Det slår mig, at serienummeret er alfanumerisk?
Så skal du jo have fat i:
  Me.Filter = "[Serial Number]='" & Me.Liste202 & "'"
på samme måde, som du har skrevet i DLookup udtrykkene.

Pas i øvrigt på med alle de DLookup. DLookup kan slå den bedste pc ihjel. Brug i stedet en konstruktion i stil med (ikke testet):

  Dim Rst As Recordset
  Dim s As String

  S="SELECT QryStoreEntry.* FROM QryStoreEntry WHERE [Serial Number]='" & Me.[Serial Number] & "'"
  Set Rst=CurrentDb.OpenRecordset(s)
  With Rst
    Me.[Part Number] = .Field("[Part Number]")
    Me.[Description] = .Field("[Description]")
    Me.[ID no] = .Field("[ID no]")
    ' osv
  End With
  Set Rst=Nothing
Avatar billede 49jensen Nybegynder
01. juli 2008 - 23:14 #25
Ok, det vil jeg ændre, tak for rådet. Mener du at programmet "crasher" eller hvad.
Avatar billede fdata Forsker
02. juli 2008 - 20:08 #26
Nej, ikke i første omgang. DLookUp er bare meget ressourcekrævende, så når du skyder en hel stribe af efter hinanden, vil du sikkert opleve en målbar forsinkelse. Funktionen er altså ikke "farlig" iden forstand - bare irriterende langsom.

Kører filtreringen nu?
Avatar billede 49jensen Nybegynder
03. juli 2008 - 12:05 #27
OK, jeg laver det om senere. Nej. Når jeg markerer posten i listen får jeg meddellelsen "Formularen er skrivebeskyttet" i statuslinien. Redigering er sat til "ja".
Avatar billede fdata Forsker
04. juli 2008 - 10:37 #28
Så er jeg ved at løbe tør for ideer :o(
Kan du evt sende en mini-base indeholdende relevante tabeller, QryStatus og FrmStatus så jeg kan se den direkte?
Avatar billede 49jensen Nybegynder
04. juli 2008 - 11:49 #29
Der er ret meget der griber ind i hinanden, men jeg prøver at stykke noget sammen i løbet af dagen. Hvilken adresse skal jeg sende den til.
Avatar billede 49jensen Nybegynder
04. juli 2008 - 11:58 #30
Jeg kan også sende hele db, det er måske lettere.
Avatar billede fdata Forsker
04. juli 2008 - 12:16 #31
Send den til <f-data snabela jubii.dk>
Avatar billede 49jensen Nybegynder
04. juli 2008 - 15:07 #32
Det er hermed gjort.
Avatar billede fdata Forsker
06. juli 2008 - 18:38 #33
Har set på sagen, og der er et par steder, du skal ind og rette.

Kontrolelementkilden
Din listbox er bundet til en længere SELECT sætning. Som jeg skrev 28/06-2008 20:11:08: "Søgefeltet må ikke være bundet til et felt" - og dermed heller ikke til en SELECT sætning. Slet indholdet i dette felt.

Værdien
Din listbox har Bundet kolonne sat til 1; men det første felt i din Rækkekilde er [ID Number]. Det går jo ikke at filtrere [Part Number] op mod [ID Number]. Derfor skal værdien rettes til 4. [Part Number] er det fjerde led i listen.

Så skulle det spille.


Bundet Kolonne skal ændres fra 1 til 4
Avatar billede 49jensen Nybegynder
06. juli 2008 - 23:07 #34
Jeg kan stadig ikke få det til at virke:
Liste kontrolellement kilde - blank
Rækkekildetype - tabel/forespørgsel
Rækkekilde - SELECT [QryTimeControlledComponentsStatus].[ID Number], [QryTimeControlledComponentsStatus].[Description], [QryTimeControlledComponentsStatus].[Part Number], [QryTimeControlledComponentsStatus].[Serial Number] FROM QryTimeControlledComponentsStatus;
Koden for listen
Private Sub Liste202_AfterUpdate()
Me.Filter = "[Serial Number]='" & Me.Liste202 & "'"
End Sub
Når jeg markerer i listen får jeg følgende oplysning i frm egenskabsark "Data" hvis jeg markerer Serial Number 100 "[Serial Number]=100"
Avatar billede 49jensen Nybegynder
06. juli 2008 - 23:09 #35
Data / Filter - "[Serial Number]=100"
Avatar billede 49jensen Nybegynder
07. juli 2008 - 12:31 #36
Nu virker det. Det er mig der skal finde ud af hvordan systemet virker. Mange tak for hjælpen, og du må undskylde at jeg er lidt tykpandet en gang imellem.Hermed point.
allan
Avatar billede fdata Forsker
07. juli 2008 - 19:41 #37
Don't worry. Du skal ikke undskylde. Vi er her for at hjælpe.
Vi har alle måttet kravle før vi kunne gå. Det vigtigste er, at det kom til at spille.
Takker for point  ;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