25. juni 2008 - 23:00Der 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).
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.
Øøøø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.
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.
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?
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)
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.
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?
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?
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
"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?
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
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).
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
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.
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".
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?
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.
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"
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
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)
Synes godt om
Ny brugerNybegynder
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.