Avatar billede -anders- Juniormester
27. marts 2003 - 17:39 Der 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

mvh Anders-
Avatar billede -anders- Juniormester
27. marts 2003 - 18:09 #1
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
Avatar billede -anders- Juniormester
27. marts 2003 - 18:19 #2
Må smutte nu, er online igen senere i aften eller i morgen tidlig
/Anders
Avatar billede -anders- Juniormester
27. marts 2003 - 21:23 #3
Online igen nogen forslag *SS*
Avatar billede terry Ekspert
28. marts 2003 - 09:53 #4
just got out of bed, let me read it first :o)
Avatar billede terry Ekspert
28. marts 2003 - 09:54 #5
yes you can
Avatar billede -anders- Juniormester
28. marts 2003 - 10:57 #6
Hej Terry
Det lyder godt, har du nogen forslag
Avatar billede terry Ekspert
28. marts 2003 - 11:05 #7
Oh, did you want that too, I thought you just wanted to know if it was possible :o)

I'll try and put and example together and get back as soon as possible (hopefully today)
Avatar billede -anders- Juniormester
28. marts 2003 - 11:07 #8
Hej
Okay, Ja det kunne jeg jo godt have skrevet sorry, venter spændt.
/Anders
Avatar billede terry Ekspert
28. marts 2003 - 11:40 #9
This is the easiest method
In the query replace the three criteria with something like this
This allows you to enter NOTHING in the field

Like "*" & [service] & "*"

Let me know if this idea is OK
Avatar billede -anders- Juniormester
28. marts 2003 - 12:18 #10
Hi
Tilbage fra frokost, tester og vender tilbage
/anders
Avatar billede -anders- Juniormester
28. marts 2003 - 12:28 #11
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
Avatar billede terry Ekspert
28. marts 2003 - 12:35 #12
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"
         
    Makeqry1 = CreateTheQuery(sSQL, "NameOfTheQueryGoesHere")

End Function

'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
   
End Function
Avatar billede terry Ekspert
28. marts 2003 - 12:38 #13
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.

Hope you get the idea!
Avatar billede -anders- Juniormester
28. marts 2003 - 12:51 #14
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

-Anders
Avatar billede terry Ekspert
28. marts 2003 - 13:25 #15
Is the graph in a form or a report?

You could acually use something like this and if it is in a report
sFilter contains the same as the form filter

DoCmd.OpenReport "NameOfReport", acPreview, , sFilter
Avatar billede terry Ekspert
28. marts 2003 - 13:26 #16
I'm off out for a few hours will take a look later :o)
Avatar billede -anders- Juniormester
28. marts 2003 - 13:32 #17
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
Avatar billede -anders- Juniormester
28. marts 2003 - 16:21 #18
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.

*SSS*
Anders.
Avatar billede -anders- Juniormester
28. marts 2003 - 17:43 #19
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.

Mange hilsner
Anders.
Avatar billede terry Ekspert
28. marts 2003 - 17:59 #20
OK, I thought thats what you had tried! Yes it should work

Like "*" & Forms]![formular1]![cbo_service] & "*"
Avatar billede terry Ekspert
28. marts 2003 - 18:02 #21
Didnt see your last comment, great to see you got it working :o)
Thanks and a good weekend to you too


Mvh
Terry
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