17. maj 2000 - 11:07Der 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
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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 ?
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.
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.
Æ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 :)
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
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...
-> 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 ?
-> 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 ?
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:
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 ?
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
Doh, jeg har fået styr på det. Tak for hjælpen folkens
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.