verwijzen naar een subform

Status
Niet open voor verdere reacties.
Michel... ik kom er niet echt uit

Ik had graag de zoekdatum veranderd via het "kalendertje" maar dat liep toch niet zoals ik wou
ik begrijp ook niet zo goed hoe alles werkt
ik zette eerst de code in "Na bijwerken" maar dan gebeurde er niks
ook "bij wijzigen" lukte niet dus probeerde ik bij "Bij gewijzigd"... kies ik dan een datum in de kalender, dan staat die wel al in het veld maar daar stopt het...
Kies ik nu een datum, dan gebeurt er niets
ik zette een stop in de code en de code stopt niet, dus ik denk dat ik de verkeerde eigenschap koos....
pffff... niks lukt
ik begrijp je commentaar heel goed dat je een antwoord voor "iedereen" wil geven, maar... voor dummies zoals ik zou wat commentaar tussen de code in misschien wel handig zijn (als ik datb MAG zeggen) om je code beter te leren begrijpen

Heel erg bedankt voor je hulp
JP
 
Ik zal er morgen naar kijken! En wat commentaar bij zetten ;)
 
heb je al iets uit je mouw kunnen schudden???
Alvast bedankt
JP
 
De kalender verandert wel de datum in het tekstvak, maar je blijft er nog wel in staan. Daarom moet je het tekstvak filteren op de gebeurtenis <Bij wijzigen>. Overigens blijf ik er bij dat je beter een keuzelijst kunt maken met gebruikte datums, dat voorkomt dat je verkeerde datums aanklikt.
 
heb weer wat tijd gevonden om mij over het formulier te buigen
Ik maakte een keuzeveld aan met relevante data zoals je adviseerde
dat werkt
echter
als ik een datum kiest dan wordt de database niet op die, maar op een andere datum gefilterd....
Pfff snap er niets van
Bedankt voor de hulp
JP
Bekijk bijlage Database12.rar
 
Ik vermoed dat je de filtering met VBA doet (kan de db nu niet openen) en dan heb je te maken met Amerikaanse datumnotatie. Dus 11-6 is dan niet 11-6, maar 6-11. En dat filtert niet jofel. Zelf zet ik een datum meestal om naar een getal, en zet ik dat getal terug naar een datum met CDate. Je kunt ook een opmaakstring gebruiken.
Code:
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
"WHERE [Datum] = " & Format(Me.cboDatum, strcJetDate)
 
ik "bouwde" verder op de manier waarmee je gestart was... dus een datum wordt een getal..
Dan nog filtert het programma verkeerd
snap het niet
 
Toch heb ik maar weinig veranderd, en hij doet het gewoon. Met juiste datums.
 

Bijlagen

  • Database13.rar
    28,2 KB · Weergaven: 20
waar ging ik de mist in???
kan je de zaken niet zo programmeren dat ik, bij het openen van de form, geen gegevens zie, want op dat moment is dat toch niet informatief
Merci
JP
 
Zoiets?
Ik heb overigens de datumselectie gelijk gemaakt aan de gekozen datum (lijkt logischer) en iDatum anders opgehaald.
Code:
    iDatum = CLng(CDate(Me.payday.Value))
Daar gaf hij bij mij een foutmelding op. Vermoedelijk omdat de keuzelijst als tekst wordt uitgelezen, wat de standaard uitlezing is. Eigenlijk doe ik dat bijna altijd wel: keuzelijsten en tekstvakken hard omzetten naar wat ik wil dat het voorstelt.
 

Bijlagen

  • Database13.rar
    29,7 KB · Weergaven: 22
Hallo,

Ik wil nu in de query de 2de keuzelijst toevoegen aan de filetring
dus paste ik de code aan op volgende manier
PHP:
Private Sub payday_Click()
Dim strSQL As String
Dim iDatum As Long
Dim iManier As String
Dim tmp

    iDatum = CLng(CDate(Me.payday.Value))
    iManier = Me.Keuzelijst20.Value
    strSQL = "SELECT TOP 1 [Datum_betaling, manier] FROM [Betalingen] "
    strSQL = strSQL & "WHERE [Datum_betaling] = CDate(" & iDatum & ") "
    strSQL = strSQL & "WHERE [Manier] = '" & iManier & "' "
    strSQL = strSQL & "ORDER BY [Datum_betaling] DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount > 0 Then
            Me.payday.Value = .Fields(0).Value
            Me.Filter = "[Datum_betaling] = CDate(" & CLng(.Fields(0)) & ")"
            Me.FilterOn = True
            Me.Detail.Visible = True
            Me.InsideHeight = 10000
            Me.Requery
        Else
            Me.payday.Value = Date
            Me.Filter = ""
            Me.FilterOn = False
            Me.Detail.Visible = False
        End If
        .Close
    End With
    Form.Refresh
    Me.DATUM_betalingen.Value = " Betalingen op " & Me.payday.Value
    Me.Command5.SetFocus
End Sub

ik krijg een foutmelding, en waarschijnlijk gaat het om het feit dat het veld "manier" niet op de correcte wijze in de code geschreven werd:
strSQL = "SELECT TOP 1 [Datum_betaling, manier] FROM [Betalingen] ".....

is zeker niet juist
hoe pas ik dat aan, en hoe moet ik dat aanpassen zodat alle velden in "betalingen" meegenomen kunnen worden
(SQL geeft betalingen.* als manier op, maar hoe integreer ik dit in jouw code?)

bedankt
 
Rechte haken zijn noodzakelijk voor veldnamen waar een spatie in zit. In de andere gevallen zijn ze overbodig. Dus ofwel TOP 1 Datum_betaling, manier, ofwel TOP 1 [Datum_betaling], [manier].
De fout zit in regel 11, waar je WHERE gebruikt i.p.v. AND. Je mag in een filterstring maar één keer WHERE gebruiken, de rest moet ofwel AND zijn, ofwel OR.
 
OK Michel, ik krijg geen foutmelding meer, maar de filtering houdt geen rekening met de extra "manier"-parameter
dus
ALLE records worden getoond, en niet deze die passen bij wat onder de 2de keuzelijst gekozen werd
steek ik de strSQL in een query dan werkt het wel correct

PHP:
Private Sub payday_Click()
Dim strSQL As String
Dim iDatum As Long
Dim iManier As String
Dim tmp

    iDatum = CLng(CDate(Me.payday.Value))
    iManier = Me.Keuzelijst20.Value
    strSQL = "SELECT TOP 1 [Datum_betaling],[manier] FROM [Betalingen] "
    strSQL = strSQL & "WHERE [Datum_betaling] = CDate(" & iDatum & ") "
    strSQL = strSQL & "AND [Manier] = '" & iManier & "' "
    strSQL = strSQL & "ORDER BY [Datum_betaling] DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount > 0 Then
            Me.payday.Value = .Fields(0).Value
            Me.Filter = "[Datum_betaling] = CDate(" & CLng(.Fields(0)) & ")"
            Me.FilterOn = True
            Me.Detail.Visible = True
            Me.InsideHeight = 10000
            Me.Requery
        Else
            Me.payday.Value = Date
            Me.Filter = ""
            Me.FilterOn = False
            Me.Detail.Visible = False
        End If
        .Close
    End With
    Form.Refresh
    Me.DATUM_betalingen.Value = " Betalingen op " & Me.payday.Value
    Me.Command5.SetFocus
End Sub
 
Je past wel je sql aan, maar niet je filter (kijk maar naar regel 16); je checkt op het volledige filter, maar je filtert alleen op datum_betaling.
 
OK... gezien
vraag me dan af, en dit is misschien wel heel erg dom... waarom werk je zo als je die SQL uiteindelijk toch niet gebruikt....
Waarom EN sql EN filtersyntax?
JP
 
Je gebruikt de recordset om te controleren of er wel data in het formulier zit. Als je een verkeerd filter maakt, waardoor er geen records zijn, dan heb je dat filter uiteraard niet nodig. Beide zijn dus in deze situatie nodig.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan