Formulier waarde in query

Status
Niet open voor verdere reacties.
Je kunt het filter zo makkelijk en gecompliceerd maken als je zelf wil, dat is het probleem niet. Maar zodra je filters ‘hard’ in programmeert, kun je ze ook alleen maar in de code weer aanpassen. En of dat handig is... voor filteren hoef je trouwens geen BE op een SQL server te hebben, als je de gekoppelde tabel tijdelijk vervangt door een Access tabel met dezelfde velden, en die vult met wat testdata, werkt het ook.
Zelf gebruik ik, als ik op datums wil filteren, vaak een (soms heel uitgebreid) formulier waarin de filtering gemaakt wordt. In de simpelste vorm op basis van één maand die je op kan schuiven. Maar je kunt daar de mooiste dingen voor verzinnen.
 
Ik had als voorbeeld jaar en datum genomen.
In werkelijkheid gaat het om klanten die niet mee geselecteerd mogen worden.
Omdat het testklanten zijn ed
Is ook historisch gegroeid en moet misschien eens herbekeken worden en deze een 'categorie' naam te geven ed.

Maar de vraag is : kan je een query met bestaande filters, ongeacht of deze filters terecht zijn, ook gebruiken om uw 'magic code' uit te voeren ?
Of is er een work-around code ?

Of moet ik eerst de andere query uitvoeren en plaatsen in een tabel (tabel query).
En dan uw magic code uitvoeren op deze nieuwe tabel ?
Dat gaat volgens mij ook wel werken maar liefst in code als kan.
 
Je kunt alles maken binnen de bestaande code, en een aparte tabel is al helemaal niet nodig. Soms gebruik ik wel eens een query als invoer voor een andere query, maar meestal is als wel binnen één query op te lossen. Al kan het soms handig zijn om met een tussentabel te werken vanwege snelheid in de uitvoer. Queries binnen queries worden doorgaans langzamer uitgevoerd.
Het is altijd handig om voorbeelden aan te leveren die de praktijksituatie emuleren. Zeker binnen Access is dat noodzakelijk. Anders krijg je oplossingen waar je niks aan hebt.
 
En adhv van voorbeeld in vorige post bijlage ?
Als ik de code/instructie ken kan ik het wel adapteren naar de 'productie'omgeving.
Via Google en proberen lukt het mij niet.
Ik zou al zeer tevreden zijn als ik de instructie via q_omzet met selectie jaar/maand hiervan het bedrijf te kunnen filteren.
 
Adhv code die ik op internet gevonden heb aangepast maar werkt nog niet.
Maw een bestaande query gebruiken om een filter op toe te passen.
Code:
    Dim db As DAO.Database
    Dim strSQL As String
    Dim qd As DAO.QueryDef
    Dim qdNew As DAO.QueryDef
    Dim intLenSQL As Integer
    
    Set db = CurrentDb()
    Set qd = db.QueryDefs("q_omzet")
    strSQL = qd.SQL

    ' Remove the Ending ";" and Space Characters from Original SQL
    intLenSQL = Len(strSQL) - 3
    strSQL = Left(strSQL, intLenSQL)

    strSQL = strSQL & " WHERE (bedrijf In (" & (Me.Bedrijf) & "));"
    qd.Close
    Set qd = Nothing
    Set qdNew = db.CreateQueryDef("", strSQL)
    qdNew.Execute
    qdNew.Close
    Set qdNew = Nothing
 
Ik vind het een erg omslachtige code die minstens de helft korter kan, met hetzelfde resultaat. Een een query bouwen openen onbekende string die je uitleest uit een andere query zou ik zeker niet doen. Je hebt geen idee wat je weghaalt met strSQL = Left(strSQL, intLenSQL). En waarom open je een tijdelijke query die je daarna gelijk weer sluit?
Ik zou voor het resultaat dus een formulier gebruiken waar je de query van aanpast, en het formulier openen.
 
Onderstaande code werkt.
MAAR nu heb ik het volgende voor.
De eerste keer werkt de query.
Hij 'leest' de filters jaar = 2019 en maand = 02.
Dan wordt het bedrijf met waarden ingevoegd in de query vb "bedrijf" = 100,200 (afhankelijk welk bedrijf bij de user is ingevuld).
Het probleem is nu dat de volgende keer dit veld 'bedrijf' ook wordt gelezen uit de query en dat moet niet. (wordt dan twee keer ingevuld. Bij de volgende run drie keer enz)
Maw het veld bedrijf met filters IN( ) zou eerst verwijdert moeten worden. Of na uitvoeren van de query.
Kan dit en op welke manier ?


Code:
Dim db As DAO.Database
Dim strSQL As String
Dim qd As DAO.QueryDef
    
Set db = CurrentDb()
Set qd = db.QueryDefs("q_omzet")
strSQL = qd.SQL

intLenSQL = Len(strSQL) - 3
strSQL = Left(strSQL, intLenSQL)
strSQL = strSQL & " AND " & "(bedrijf In (" & (Me.Bedrijf) & "))" & ";"

qd.SQL = strSQL
qd.Close
Set qd = Nothing
Set db = Nothing
DoCmd.OpenQuery "q_omzet"
 
Ik heb geen flauw idee wat je aan het doen bent. Ik zou het zo doen:
 

Bijlagen

  • Omzet 3.zip
    30,4 KB · Weergaven: 15
Als alternatief ivm het maken van qdef kan je een formulier ook openen op deze manier.

DoCmd.OpenForm "start_resul", , , "bedrijf " & "In (" & (Me.Bedrijf) & ")" & ""

Maw je leest de "bedrijfs"filter in de tabel.
En hiermee open je het formulier "start_resul".
Formulier "start_resul" is gebaseerd op een query met al "keihard" ingevulde filters.
En afhankelijk van de persoon die inlogt mag enkel de data zien van de bedrijven waarvoor die persoon verantwoordelijk is.

@OctaFish : ik weet dat mijne uitleg niet altijd duidelijk is maar je hebt mij toch in de juiste richting gestuurd ivm uitlezen via tabel en IN clausule.
Dus thx.
 
Ik heb in je nieuwe vraag naar je code gekeken die je onder de knop <Nieuwe code> hebt gezet, en ik snap niet wat je daarmee wilt bereiken. Maar hij kan dus, gebaseerd op je code hierboven, een stuk korter:
Code:
Dim strSQL As String
Dim qd As DAO.QueryDef
    
    Set qd = CurrentDb.QueryDefs("q_omzet")
    strSQL = Left(qd.Sql, Len(qd.Sql) - 3) & " AND " & "(bedrijf In (" & (Me.Bedrijf) & "))" & ";"
    qd.Sql = strSQL
    DoCmd.OpenQuery "q_omzet"
Maar hij wordt daar dus niet beter van :D.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan