Avatar billede overchord Nybegynder
10. juni 2003 - 12:54 Der er 22 kommentarer og
1 løsning

Opdatering af en listboks skal starte en ny funktion uden click

Heysan

Jeg har en form med en lang raekke listboxes. Disse er del af et kaskade-system, men en enkelt af disse listboxe har ALTID en vaerdi som aendrer sig naar man vaelger en vaerdi fra en af de andre listboxes. Denne listbox hedder lstTSN.
Som regel er der kun en enkelt vaerdi i lstTSN, og i tilfaelde hvor der er flere vaerdier skal jeg kun bruge den oeverste alligevel.
Nu er sagen saa at nar vaerdien i lstTSN opdateres (ved et klik paa en af de 12 andre listboxes) vil jeg gerne koere et query uden at skulle klikke paa lstTSN. 
Saa jeg lagde koden i AfterUpdate - men det virker ikke foer jeg klikker paa lstTSN.
Naar man klikker paa en af de andre listboxes bliver der bygget og destrueret en query i runtime, men jeg ville gerne undgaa at skulle begynde at laesse koden ind i  samtlige listboxes.

Koden ser saadan her ud, men er i princippet ikke saa vigtig igen:
Private Sub LstTSN_AfterUpdate()
Dim qdf As QueryDef
Dim strsql As String
Dim intCatCount As Integer
Dim lngTsn As Long
lngTsn = Me.LstTSN.ItemData(0)

intCatCount = DCount("[TSN]", "tblDescriptions", "[TSN] = " & lngTsn)

If intCatCount >= 1 Then
    Me.btnDescription.Visible = True
Else
    Me.btnDescription.Visible = False
End If

End Sub

Hovedspoergsmaalet er hvordan faar jeg denne kode eksekveret naar jeg klikker paa en anden listbox som opdaterer lstTSN??
Jeg vil helst undgaa at begynde at laegge for mange timer-funktioner ind.
Avatar billede overchord Nybegynder
10. juni 2003 - 12:56 #1
PS: Ved godt at der er overfloedige Variable i koden, men er bare igang med at teste funktionaliteten: Queryen bliver lagt paa naar det virker :)
Avatar billede juks Novice
10. juni 2003 - 13:05 #2
så må du jo lave en
me.lstTsn.requery  ved udgangen el ved_opdatering af de andre lister
Avatar billede juks Novice
10. juni 2003 - 13:05 #3
svar
Avatar billede hiks Nybegynder
10. juni 2003 - 13:06 #4
/enig
Avatar billede juks Novice
10. juni 2003 - 13:08 #5
paa alle 12 skal du placere koden eller også lave en public function ()
Avatar billede overchord Nybegynder
10. juni 2003 - 13:10 #6
Det virker ikke. Som sagt bliver den query der giver resultaterne til en listbox destrueret med det samme. lstTSN vaerdien bliver aendret ved hvert klik paa en anden listbox, men After Update virker stadig ikke. Kun naar jeg klikker paa lstTSN.
Avatar billede overchord Nybegynder
10. juni 2003 - 13:17 #7
jvf. svaret, hjaelp siger flg:

Changing data in a control by using Visual Basic or a macro containing the SetValue action doesn't trigger these events for the control. However, if you then move to another record or save the record, the form's BeforeUpdate and AfterUpdate events do occur.

Problemet er at jeg ikke skifter record paa noget tidspunkt i denne form, samt at alle disse midlertidige resultater ikke skal gemmes.
Avatar billede juks Novice
10. juni 2003 - 13:20 #8
kan det ikke hænge sammen med at binde lstTSN til noget andet efter du har opdateret..
kan du evt sende databasen..
Avatar billede juks Novice
10. juni 2003 - 13:21 #9
prøv on_Exit
Avatar billede overchord Nybegynder
10. juni 2003 - 13:26 #10
juks -> ville gerne sende den, men DB'en indeholder pt en frygetligt masse embeddede billeder, saa den fylder 270mb.

on_Exit virker heller ikke.

lstTSN er ikke bundet til noget. Her er et eksempel paa hvordan lstTSN opdateres naar jeg klikker paa en anden listbox:

Private Sub LstGenus_Click()
Dim dbs As Database
Set dbs = CurrentDb
Dim ActiveGenus As String
Dim qdf, qdf2 As QueryDef
Dim strsql, strsql2 As String

Dim intPicCount As Integer
Dim TSN As Long


ActiveGenus = Me.LstGenus.Value

strsql = "SELECT [TSN],[genus],[author],[year] FROM [genus] WHERE [genus] = '" & ActiveGenus & "'"
Set qdf = dbs.CreateQueryDef("temp", strsql)

Me.LstTSN.RowSource = "SELECT [TSN] FROM " & qdf.Name
Me.LstAuthor.RowSource = "SELECT [author] FROM " & qdf.Name
Me.LstYear.RowSource = "SELECT [year] FROM " & qdf.Name

.....

dbs.QueryDefs.Delete qdf.Name
Avatar billede juks Novice
10. juni 2003 - 13:27 #11
hvordan/hvornår  tildele du de nye værdier i rowsource på lstTSN
Avatar billede overchord Nybegynder
10. juni 2003 - 13:32 #12
Naar man klikker paa en af de 12 andre listsboxes i formen. Som kodeeksemplet viser bygger jeg en specifik query ved klik paa en af de andre listboxs. Denne click event opdaerer baade lstTSN og andre listboxes som ligger lavere i "hierakiet" af listboxes. Humeln er at dette er det eneste sted hvor jeg har brug for en reel opdatering af info uden et click. Resten er en slags kaskade-system som kraever valg fra brugeren.
Avatar billede juks Novice
10. juni 2003 - 13:36 #13
If Me.Kombinationsboks0 = "ja" Then

Me.Kombinationsboks2.RowSourceType = "table/query"
Me.Kombinationsboks2.RowSource = "table1"
Else
Me.Kombinationsboks2.RowSourceType = "table/query"
Me.Kombinationsboks2.RowSource = "table2"
End If

jeg har prøvet denne kode og det virker fint både i exit og afterupdate hvis du evt kan kopier din database over i en ny database (med kun de nødvendigeste data) så kan jeg kigge på det. eller ved jeg ikke hvad jeg skal sige.
jhc-it@mail.dk
kan det have noget at gøre med at nogle af listerne er disabled
Avatar billede juks Novice
10. juni 2003 - 13:45 #14
hvad hvis du sætter Me.LstTSN.RowSource igen når du vælger på en af de andre lister.
Avatar billede overchord Nybegynder
10. juni 2003 - 13:48 #15
ok. Jeg ved ikke hvad det er der goer at afterupdate'n ikke vil virke. Jewg sletter normalt rowsourcen igen naar mna klikker paa en af de adnre listboxes.
Dette goeres fordi den query som er rowsource bliver slettet - saa det er for at undgaa fejlmeddelelser. Men vaerdien ligger stadig i listboxen, og det er kun vaerdien jeg bruger til at lave dcount paa en anden tabel.
Det eneste jeg kan se som problem er hvad jeg fandt i hjaelp, at opdaterede felter via VBA ikke trigger Afterupdate og on_Exit naar man bruger setValue. Selvom jeg ikke bruger SetValue er det maaske samme problem alligevel....
Jeg proever lige selv at lave et mindre eksempel hvor jeg bruger dit kodeforslag, og ser om det virker.
Avatar billede juks Novice
10. juni 2003 - 13:50 #16
du ændre jo ikke noget ved bare at opdatere da den jo faktisk er tom og først bliver "lavet" når du køre den kode fra
Private Sub LstGenus_Click()
Avatar billede overchord Nybegynder
10. juni 2003 - 13:57 #17
ja men der er jo derfor jeg ligger koden i AfterUpdate!
Men jeg har proevet at laegge koden i AfterUpdate paa en af de andre listboxes som man klikker paa, og det virker fint.
Saa det lader til at jeg bliver noedt til at laegge koden ind under hver listbox's on_Exit eller AfterUpdate fremfor bare paa lstTSN.
Avatar billede juks Novice
10. juni 2003 - 14:01 #18
ja. du kan ikke ligge den in paa lstTSN det er jo den du opdatere så kan du evt prøve at opdatere den inden alstå ved_indgang
Avatar billede overchord Nybegynder
10. juni 2003 - 14:05 #19
Jeg tror jeg laegger koden i et modul og kalder det fra hver af de 12 listboxes afterupdate. points til juks for den hurtige hjaelp! Tak for det :-)
Avatar billede juks Novice
10. juni 2003 - 14:11 #20
tror jeg er en god ide...
Avatar billede nih Novice
10. juni 2003 - 14:44 #21
Unskyld jeg kommer for sent.
Denne kode vælger den øverste i lstTsn

lstTSN = lstTSN.Column(0, 0)

Den linje skal bare være nederst i den hændelse der ændre lstTSN's rowsource.

Niels
Avatar billede nih Novice
10. juni 2003 - 14:45 #22
PS: den bundene kollonne = 1
Avatar billede overchord Nybegynder
10. juni 2003 - 16:44 #23
nih -> Jeg har bare brugt itemdata(0) istedet, men det var ikke der problemet laa. Jeg ville have en enkelt central kode der kunne haandtere opdateret indhold i lstTSN naar man klikkede paa en af 12 listboxe.
Loesningen blev at lave et centralt modul, som kaldes i hver af de 12 listboxes afterupdate (kunne ogsaa placeret i on_exit istedet).
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