Avatar billede ds-zim Nybegynder
17. maj 2000 - 11:07 Der er 17 kommentarer og
2 løsninger

Visning/Filtrering af 'aktive' kunder

I vort administrationssystem bygger kundeoversigten på en SQLforespørgsel, vist i en underformular. Jeg har for nylig tilføjet et nyt felt, 'aktiv', der skal vise om kunden stadig skal serviceres. Meningen var, at man på oversigten kan vælge imellem; A. Alle Aktive Kunder B. Alle Inaktive kunder & C. Alle Kunder, evt. vha. en kombinationsboks. Jeg er i tvivl om hvordan jeg gør det mest hensigtsmæssigt :( Jeg havde forestillet mig brug af et filter (I VB evt. ApplyFilter kommando'n)

Speak up PPL

DS~Zim

PS. Low on points :( really need a hand on this one
Avatar billede hojben Novice
17. maj 2000 - 11:20 #1
formular -> 3 radioknapper (A,B og C) + 1 sendknap. Send knappen undersøger hvilken radioknap der er "aktiv" og kører en forespørgsel.

Avatar billede fdata Forsker
17. maj 2000 - 14:03 #2
Du kan også bruge et filter, f.eks:

Me.Filter = "Aktiv = True"
Me.FilterOn = True

Avatar billede ds-zim Nybegynder
17. maj 2000 - 15:12 #3
Umm, SQLforespørgselen bliver som sagt kørt/vist i en underformular. Meningen var at vha. en kombinationsboks skulle denne forespørgsel tilføjes et filter ved hændelsen VedÆndring. Hvordan gør jeg det ?
Avatar billede ktp Nybegynder
18. maj 2000 - 08:17 #4
I din SQL forespørgsel indsætter du kriteriet for feltet "Aktive".
Eksempel: Du har en kombinationsboks med navnet Aktiv og du har et felt med navnet Aktiv, lad os kalde dem for KomboAktiv og FeltAktiv, i KomboAktiv har du muligheden for at vælge A, B eller C og på dit FeltAktiv har du indtastet A, B eller C.
I SQL forespørgslen skal du have et  kriteriet for FeltAktiv, indsæt linjen der henviser til KomboAktiv f.eks. =Forms!FormNavn!KomboAktiv.
På KomboAktiv skal der på funktionen Efter Opdatering laves en GenForespørgelse på underformularen.
Avatar billede moses Praktikant
18. maj 2000 - 13:30 #5
Du skal bruge
Child/Parent fields.

Parent er din radiobuttongroup med de 3 valgmuligheder og Child er feltet i underformen. De skal selvfølgelig have samme format.

Det eneste du skal huske er en requery af underformen under "OnChange" ved din radiobuttongroup.
Avatar billede ktp Nybegynder
18. maj 2000 - 13:37 #6
Milde moses, man skal aldrig requery når det et Child Field, det er det der er fidusen ved at anvende Child.
Men jeg tror ikke det er ds-zim´s problem han har sandsynligvis andre felter i sin hovedformular, som anvendes på child funktionen, så det er et kriterie der skal bruges som filter.
Avatar billede ktp Nybegynder
18. maj 2000 - 13:39 #7
PS: Der sker ikke noget ved at requery på et Child Field, men det er ikke nødvendigt.
Avatar billede moses Praktikant
18. maj 2000 - 14:20 #8
Så er det fdata 's løsning han skal gå efter !!
Avatar billede ds-zim Nybegynder
07. juni 2000 - 13:57 #9
Æh .. jeg har løst problemet ved at have flere underformularer, hvor af kun én af gangen er synlig. Ikke den smarteste løsning, men det virker.
Til gengæld får jeg en skummel fejl i flg. code :


    Dim stDocName As String
    Dim stLinkCriteria As String
   
    stDocName = "100 - Kunde stamdata"

    If [100A - Kundeoversigt].Kundevisning = "alle aktive kunder" Then
      stLinkCriteria = [ID] & [100 - aktivkunde]![ID]
      DoCmd.OpenForm stDocName, , , stLinkCriteria
    End If

Fejlen lyder på at Access ikke kan finde feltet "l" (håber det er et l), men der er intet felt med det navn ..
Hvor kan denne fejl ligge ? Jeg har efterset alle muligheder (tror jeg :)
Avatar billede ds-zim Nybegynder
07. juni 2000 - 14:02 #10
Hmm, fejlen ligger i If - Then sætningen åbenbart :(


    Dim stDocName As String
    Dim stLinkCriteria As String
   
    stDocName = "100 - Kunde stamdata"

    'If [100A - Kundeoversigt].Kundevisning = "alle aktive kunder" Then
      stLinkCriteria = [ID] & [100 - aktivkunde]![ID]
      DoCmd.OpenForm stDocName, , , stLinkCriteria
    'End If

Det her fungerer nemlig ?!?
Avatar billede ds-zim Nybegynder
07. juni 2000 - 14:31 #11
Hmm, nu får jeg fejlen flere steder :(
Det kunne godt ligne tegnet | istedet for et l.
I denne linie får jeg samme fejlmeddelelse ;
[100 - kunde stamdata].[805 - skader underformular1].Requery

Avatar billede philiph Nybegynder
07. juni 2000 - 23:39 #12
Hmm... skal der ikke stå:

stLinkCriteria = "[ID] = " & [100 - aktivkunde]![ID]

Hvis jeg iøvrigt må komme med et godt råd: Undlad at lave tabeller/felter/objekter med mellemrum minusser osv. i navnet. Access KAN blive forvirret. Hvis du kun benytter A-Z og 0-9 (ikke tal i første karakter), er du sikret så du senere kan upsize basen til en SQL database, og så slipper du for at bruge [ og ]. Det er også en ide at prefixe alle felter på formularer/rapporter med typen. Det gør koden mere læselig, og så undgår du navnesammenfald med properties/metoder.

Her er et eksempel på hvordan du kan prefixe objekter:
Form = frm
Rapport = rpt
Tekstbox = txt
Combobox = cbo
Listbox = lst
osv osv...

Philip
Avatar billede ds-zim Nybegynder
08. juni 2000 - 11:21 #13
-> Philiph
  Du har ret, de 2 " er på plads, men det er ikke grunden til at jeg får den skumle fejl ..
Jeg har ingen idé om hvad der er skyld it det ..
En anden ting er; jeg har oplevet at jeg ikke kan skifte imellem vinduerne, når enkelte formularer er åbne. Hvad ligger der til grund for dette ? Kan man tvinge en formular til at bevare fokus eller hur ? Kan det få indflydelse på forspørgsler/underformularer når man ikke længere kan omgå den aktive formular ?

No honest idea :( Sound off
Avatar billede ds-zim Nybegynder
08. juni 2000 - 13:52 #14
-> FData
  Umm, jeg har ikke megen forstand på VB 6.0 og kender derfor ikke alle kommandoer.
Jeg er ikke helt klar over hvordan du vil have mig til at benytte de filter kommandoer, den der med FilterOn = True er vist noget hjemmebryg eller ?

Plz elaborate
Avatar billede philiph Nybegynder
08. juni 2000 - 17:41 #15

De to " OG et =.

Det kriterie du benytter i DoCmd.OpenForm metoden er et Where kriterie uden ordet "Where". Altså: Hvis formularens recordsource er sat til:

SELECT * FROM Table
eller
Table

og det du vil vise på formularen er udtrykt ved SQL'en:

SELECT * FROM Table WHERE (ID = 42);

skal kriteriet sættes til strengen: "ID = 42".

Lige for at også svare på dit spørgsmål til FData, så er det Microsoft Access du benytter, ikke? De metoder vi snakker om lige nu er nemlig Access specifikke og har intet med VB 6.0 at gøre. Filter/FilterOn er en properties på Form/Report objekterne, som du kan bruge som et alterativ til kriteriet på DoCmd.OpenForm metoden.

Hvis vi benytter ovenstående eksempel, så kan du når formularen åbnes, sætte filteret i OnLoad Eventen:

(Denne kode indsættes på FORMULAREN der åbnes)
Private Sub Form_Load()
  Me.Filter = "ID = 42"
  Me.FilterOn = True
End Sub

Jeg har i eksemplerne brugt konstanten "ID = 42", hvilket naturligvis ikke er det du skal bruge. I dit eksempel opbygges strengudtrykket dynamisk:

stLinkCriteria = "ID = " & tabel!felt

Er du med?
Philip
Avatar billede fdata Forsker
08. juni 2000 - 18:17 #16
Det er faktisk så enkelt, som det er skrevet.

Hint: Gå ind i koden. Skriv FilterOn og tryk F1. Vupti. Gratis lærdom!
Avatar billede ds-zim Nybegynder
09. juni 2000 - 09:30 #17
Ok, jeg er med. Men jeg har mig stadig mine problemer med at definére filteret. Formularen som jeg ønsker at tilføje et filter, er en underformular, der ikke er baseret på en "fast" forespørgsel.Dvs, at dens 'datasource' er en sqlsætning, som er en del af formularen, og altså ikke et object for sig selv. Har det nogen betydning ?
Avatar billede ds-zim Nybegynder
09. juni 2000 - 09:45 #18
BTW: Det jeg mente med en skummel fejlmeddelelse (Access kan íkke finde objektet "|"), har vist noget at gøre med navne angivet i [ ], der så åbenbart ikke er et "valid" objectnavn. Just in case U cared
Avatar billede ds-zim Nybegynder
09. juni 2000 - 10:04 #19
Doh, jeg har fået styr på det.
Tak for hjælpen folkens
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