27. marts 2003 - 17:39Der er
20 kommentarer og 1 løsning
Vælge data til graf med kriterier (GUI)
Hej Eksperter: Jeg har en db som logger forskelige events, disse events vises i en graf. Grafen bygger på en forspørgsel (pivot). Grafen indeholder kun to oplysninger, Sum of Antal,Source.
Jeg har lavet en GUI hvor man vælger startdato og slutdato, samt service (cbo_service). Forespørgelsen er lavet som en prameterforspørgsel,så min Form hvor jeg vælger de forskelige kriteier referer så til felterne i forespørgslen. Dette virker perfekt, spørgsmålet er:
Kan man lave det anderledes feks. som en dynamisk SQL streng, men stadigvæg arbejde i formen hvor man vælger kriterier til grafen.
Ideen med parameter er sådan set meget god, men man er lidt fastlåst med denne metode da alle felter i formen skal udfyldes før forspørglsen virker.Nedenstående senarie er punkt for punkt for det en bruger kunne gøre:
-Indtaster start og slutdato -Vælger en service på comboen (cbo_service) -vælger ikke noget på comboen (cbo_action) -vælger en status på comboen (cbo__status) o.s.v
Klikker på ok og grafen vises med de kriterier jeg har sat.
En ordenligt omgang, nogen foslag. arbejder i access 2000 sr1
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.
Lige en bemærkning: Det sidste jeg så gør er at indtaste et tal i en tekstboks (str)dette tal skal så vise data som er > end det tal jeg har tastet feks. 10
Hej igen Desværre virker det ikke, hvis jeg skriver som du forslår viser grafen alle service uanset om jeg vælger´noget i comboen cbo_service eller ej i min form /Anders
Ok, dont want to waist too much time on this idea, although it should work. The next solution is going to take a bit more work on your side, but is MUCH MORE flexible than the first idea.
EXAMPLE ONLY:
'Call the function which builds your query If Makeqry1(me.cbo_service, me.cbo_action, me.cbo__status) then msgbox "OK"
'Build query Function Makeqry1(cbo1 as variant, cbo2 as variant, cbo3 as variant) As Boolean Dim sSQL As String dim sWhere as string
sWhere = " WHERE 1 "
If Not fldIsEmpty(cbo1) Then sWhere = sWhere & " AND Service = " & cbo1 End If
If Not fldIsEmpty(cbo2) Then sWhere = sWhere & " AND Action= " & cbo2 End If
If Not fldIsEmpty(cbo3) Then sWhere = sWhere & " AND Status = " & cb03 End If
sSQL = "SELECT * FROM YourTable" sSQL = sSQL & sWhere sSQL = sSQL & " ORDER BY SomeFieldOrOther"
'Deletes any existing withthis name and the create it again Function CreateTheQuery(rstrSQL As String, ByVal sQryName As String) As Integer Dim db As Database Dim i As Integer
Set db = DBEngine.Workspaces(0).Databases(0)
i = 0 Do While db.QueryDefs(i).Name <> sQryName i = i + 1 Loop
db.QueryDefs(i).SQL = rstrSQL db.Close
CreateTheQuery = True
End Function
'Test if field is empty (could be done smarter) Function fldIsEmpty(fld As Variant)
If IsNull(fld) Or fld = "" Or IsNull(Len(fld)) Then fldIsEmpty = True Else fldIsEmpty = False End If
the first function call should be on the form where you have your combo's. It only uses three parameters but can be changed to take more. This will also mean that the function Makeqry1 will need altering.
Hi Terry Jeg vil nu teste, og vende tilbage senere, lige en ting for noget tid siden hjalp du mig med en anden funktion som kunne ligne dette lidt, det var noget med at bygge et filter på baggrund af det man valgte på en eller flere lister prøv at nedenstående, kunne man bruge denne model i stedet evt. med nogle ændringer:
Function BuildFilter() As String Dim sSQL As String 'Default sSQL = "1 "
If Len(Me.lstfirma) > 0 Then sSQL = sSQL & " AND FirmaID = " & Me.lstfirma End If If Len(Me.lstAfdeling) > 0 Then sSQL = sSQL & " AND AfdlingsID = " & Me.lstAfdeling End If If Len(Me.lstLeveretTil) > 0 Then sSQL = sSQL & " AND NavnID = " & Me.lstLeveretTil End If If Len(Me.lstModtagetAf) > 0 Then sSQL = sSQL & " AND BrugerID = " & Me.lstModtagetAf End If If Len(Me.lstVareStatus) > 0 Then sSQL = sSQL & " AND StatusID = " & Me.lstVareStatus End If
BuildFilter = sSQL
End Function
Denne funktion åbner en form hvor records der kun opfylder det der er valgt på en eler flere lister
Private Sub cmdOpen_Click() DoCmd.OpenForm "frm_hovedoversigt", acNormal, "", "", , acNormal Form_frm_oversigt.Form.Filter = BuildFilter Form_frm_oversigt.Form.FilterOn = True DoCmd.Close acForm, "frm_listerfilter" End Sub
Kunnde dette på en eer anden måde modificeres så det kunne bruges som rowsource for en graf. PS arbejder videre med dit andet forslag
Grafen er lavet på en form, jeg tænkte at man på grafen på en eller anden måde kunne definere at rowsourcen var den sql string man bygger op ved valg i de forskelige comboer. Tak for de forløbige indlæg tales ved senere /Anders
Hej Terry Lige en bemærkning til det første forslag: I min forspørgsel skriver jeg flg. under feltet service [Forms]![formular1]![cbo_service] Dette virker fint, men problemet er jo at der skal udfyldes før det køre. Kunne din syntaks Like "*" & [service] & "*" måske bruges sammen med [Forms]![formular1]![cbo_service] Det skal forstås på den måde at vælges der IKKE noget i comboen cbo_service returnere grafen flere hits end hvis jeg vælger en service. Bare et input.
Hej igen Terry Nu har jeg forsøgt med flere ting, det viste sig at dit første forslag faktisk kunne virke, jeg havde dog problemer med syntaksen, men denne syntaks virker,Like "*" & [Forms]![Formular1]![cbo_service] Nu er det bare at tilføje de felter i min Q som jeg skal buger derefter opretter jeg så comboer i i min form o.s.v. faktisk nemt at vedligeholde. Jeg har testet det meget grundigt igennem med en og flere comboer og det virker. Det er rigtig at det andet forslag nok er mere fleksibelt, men til den aktuelle opgave er det andet mere en rigeligt, så keep it simpel vandt altså her. Tak for dine glimerende indlæg det har hjulpet mig meget på vej, samtidig har jeg også lært noget.
Dine velfortjente points er på vej til dig. God weekend.
Didnt see your last comment, great to see you got it working :o) Thanks and a good weekend to you too
Mvh Terry
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.