variabele en datums

Status
Niet open voor verdere reacties.

RSpan

Gebruiker
Lid geworden
10 jun 2009
Berichten
166
Hallo forumleden

Ik kom niet helemaal uit een datum opmaak voor een variabele.

Ik heb een formulier daar kan ik doormiddel van een keuzelijst een datum kiezen vervolgens wordt er de inhoud van het corresponderende tekstveld weergegeven.
Nu wil ik deze gegevens kunnen printen en hier struikel ik over de datum.
Bij tekst gaat het wel goed maar bij datums niet.
Het heeft volgens mij te maken met de datum opmaak die niet wordt herkend in de string

Ik heb gezocht en geprobeerd maar het is me nog niet gelukt, kan iemand me helpen.
De bedoeling is dat er een datum wordt gekozen en de daarbij behorende gegevens worden geprint.

Hieronder de code


Code:
'overzicht rapportage

Private Sub printOverdr_Click()
    On Error GoTo Err_printOverdr_Click

    Dim stDocName As String
    Dim stWhere As String
    
    If IsNull(Me.Keuzelijst143) Then
       MsgBox "U moet nog een datum selecteren", , "PlanZ"
     Else
      If Not IsNull(Me.Keuzelijst143) Then
             stWhere = "[Datum]= #" & Me.Keuzelijst143 & "#" And ""
             blnTrim = True
      End If
      If blnTrim Then
         stWhere = Left(stWhere, Len(stWhere) - 5)
         
      End If
         stDocName = "RptOverdracht"
         DoCmd.OpenReport stDocName, acPreview, , stWhere
         DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, "", False
         DoCmd.OpenReport stDocName, acViewNormal, , stWhere
         DoCmd.Close
    End If
        
Exit_printOverdr_Click:
Exit Sub

Err_printOverdr_Click:
MsgBox "Geannuleerd of geen gegevens om te printen", , "PlanZ"
Resume Exit_printOverdr_Click

End Sub

Groet
René
 
Je bent in een standaardvalkuil van VBA gevallen: de Amerikaanse datumnotatie.
Er zijn twee oplossingen: je kunt de datum converteren naar een getal, en in je SQL terugvertalen naar een datum. Dat ziet er zo uit:
Code:
stWhere = "[Datum]= CDate(" & CDbl(Me.Keuzelijst143) & ") And "
Of je gebruikt een constante om de opmaak vast te leggen:
Code:
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'NIET aanpassen voor lokale instellingen!!.
stWhere = "[Datum]= " & Format(Me.Keuzelijst143, strcJetDate) & " AND "
Beide opties werken prima.
 
Laatst bewerkt:
Je bent in een standaardvalkuil van VBA gevallen: de Amerikaanse datumnotatie.
Er zijn twee oplossingen: je kunt de datum converteren naar een getal, en in je SQL terugvertalen naar een datum. Dat ziet er zo uit:
Code:
stWhere = "[Datum]= CDate(" & CDbl(Me.Keuzelijst143) & ") And "
Of je gebruikt een constante om de opmaak vast te leggen:
Code:
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'NIET aanpassen voor lokale instellingen!!.
stWhere = "[Datum]= " & Format(Me.Keuzelijst143, strcJetDate) & " AND "
Beide opties werken prima.




Dan zit er bij mij nog iets anders fout want ik blijf dezelfde melding krijgen nl het bericht van de MsgBox "Geannuleerd of geen gegevens om te printen",
dit bericht geeft hij weer als er geen gegevens zijn om te printen opdat er niet nodeloos lege pagina's worden geprint.

Er staan echter wel gegevens in de tabel dus moet er geen melding komen maar geprint worden.

ik heb de code aangepast aan jouw voorstel zie hieronder:
Code:
'overzicht rapportage

Private Sub printOverdr_Click()
    On Error GoTo Err_printOverdr_Click

    Dim stDocName As String
    Dim stWhere As String
    
    If IsNull(Me.Keuzelijst143) Then
       MsgBox "U moet nog een datum selecteren", , "PlanZ"
     Else
      If Not IsNull(Me.Keuzelijst143) Then
             stWhere = "[Datum]=CDate(" & CDbl(Me.Keuzelijst143) & ") And "
             blnTrim = True
      End If
      If blnTrim Then
         stWhere = Left(stWhere, Len(stWhere) - 5)
         stDocName = "RptOverdracht"
         
      End If
         
         DoCmd.OpenReport stDocName, acPreview, , stWhere
         DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, "", False
         DoCmd.OpenReport stDocName, acViewNormal, , stWhere
         DoCmd.Close
    End If
        
Exit_printOverdr_Click:
Exit Sub

Err_printOverdr_Click:
MsgBox "Geannuleerd of geen gegevens om te printen", , "PlanZ"
Resume Exit_printOverdr_Click

End Sub

tevens heb ik een schermafdruk bijgesloten waarop je kunt zien wat de bedoeling is.
Er wordt een keuze gemaakt met de keuzenlijst voor een datum.
Deze komt uit de tabel waarin datums zijn ingevuld in een datumveld en waarin tekst is ingevuld in een memoveld.
In het tekstveld verschijn dan de tekst die bij de datum past.
doormiddel van de knop bekijk/print moet nu deze tekst in een document getoont en geprint worden.
Helaas geen print.

Heb ik nog een andere fout gemaakt?:(
René
 

Bijlagen

  • rapportscherm.JPG
    rapportscherm.JPG
    42,3 KB · Weergaven: 41
  • Rapport.JPG
    Rapport.JPG
    22,5 KB · Weergaven: 42
Wat geeft de inputbox als je deze code gebruikt?
Code:
Private Sub printOverdr_Click()
Dim stDocName As String
Dim stWhere As String
Dim tmp as String
    
    If Nz(Me.Keuzelijst143, "") = "" Then
        MsgBox "U moet nog een datum selecteren", , "PlanZ"
    Else
        stWhere = "[Datum]=CDate(" & CDbl(Me.Keuzelijst143) & ")"
        tmp=Inputbox("","", stWhere)
        stDocName = "RptOverdracht"
        DoCmd.OpenReport stDocName, acPreview, , stWhere
    End If
        
End Sub
 
Wat geeft de inputbox als je deze code gebruikt?
Code:
Private Sub printOverdr_Click()
Dim stDocName As String
Dim stWhere As String
Dim tmp as String
    
    If Nz(Me.Keuzelijst143, "") = "" Then
        MsgBox "U moet nog een datum selecteren", , "PlanZ"
    Else
        stWhere = "[Datum]=CDate(" & CDbl(Me.Keuzelijst143) & ")"
        tmp=Inputbox("","", stWhere)
        stDocName = "RptOverdracht"
        DoCmd.OpenReport stDocName, acPreview, , stWhere
    End If
        
End Sub

inputbox:
[Datum]=CDate(1)

ik neem aan dat hier nu een datum had moeten staan. :)
 
Lijkt mij wel :)
Welke SQL hangt er achter de keuzelijst?
 
Rene,

vervang in je code dit stukje

Code:
stWhere = "[Datum]=CDate(" & CDbl(Me.Keuzelijst143) & ")"

eens door

Code:
stWhere = "[Datum]=CDate(" & CDbl(Me.Keuzelijst143.Column(1)) & ")"

en probeer het nog eens.

Tardis
 
Als je rapporten van een bepaalde dag wilt, dan wil je niet één record selecteren, maar één datum. Je kunt dus ook de SQL van de keuzelijst aanpassen:
Code:
SELECT Datum FROM TblOverdracht GROUP BY Datum ORDER BY Datum;
Dan hoef je verder niks te veranderen.
 
Als je rapporten van een bepaalde dag wilt, dan wil je niet één record selecteren, maar één datum. Je kunt dus ook de SQL van de keuzelijst aanpassen:
Code:
SELECT Datum FROM TblOverdracht GROUP BY Datum ORDER BY Datum;
Dan hoef je verder niks te veranderen.

Heren

Bedankt voor al jullie Ideeën maar helaas hebben ze niet het gewenste effect gehad.:confused:
misschien is het makkelijker om met een voorbeeldje te werken.
deze heb ik dan ook bijgesloten.
ik hoop dat het zo duiddelijker is.
versie 2003 heb ook eventueel versie 2007
 

Bijlagen

Ik heb je code gestript en aangepast
Onderstaande code werkt bij mij:
Code:
Private Sub printOverdr_Click()
    
    Dim stDocName As String
    Dim stWhere As String
    Dim tmp As String
        
    stDocName = "RptOverdracht"
    
    If IsNull(Me.Keuzelijst143) Then
       MsgBox "U moet nog een datum selecteren", , "PlanZ"
     Else
      If Not IsNull(Me.Keuzelijst143) Then
               
             stWhere = "[Datum]= #" & Format(Me.Keuzelijst143.Column(1), "mm/dd/yyyy") & "# "
             MsgBox "String is " & stWhere
             blnTrim = True
      End If
      
         DoCmd.OpenReport stDocName, acPreview, , stWhere
         DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, "", False
         DoCmd.OpenReport stDocName, acViewNormal, , stWhere
         DoCmd.Close
    End If
        
Exit_printOverdr_Click:
Exit Sub

End Sub

Regel waar het fout ging was het opbouwen van je WHERE clause.
Je kan fouten onder andere localiseren door:

- error afhandeling uit te zetten
- Option Explicit te gebruiken, daarmee dwing je af dat variabelen expliciet
gedefinieerd moeten worden en vind je makkelijker fouten in je code
- in je code MsgBox op te nemen en daar de inhoud van variabelen uit te lezen

Option Explicit zet je aan via het VBA editor scherm ("code scherm":

- kies in de menubalk voor Extra -> Opties
- vink de eigenschap "Variabelen declareren vereist" aan

Tardis
 
Ik heb je code gestript en aangepast
Onderstaande code werkt bij mij:
Code:
Private Sub printOverdr_Click()
    
    Dim stDocName As String
    Dim stWhere As String
    Dim tmp As String
        
    stDocName = "RptOverdracht"
    
    If IsNull(Me.Keuzelijst143) Then
       MsgBox "U moet nog een datum selecteren", , "PlanZ"
     Else
      If Not IsNull(Me.Keuzelijst143) Then
               
             stWhere = "[Datum]= #" & Format(Me.Keuzelijst143.Column(1), "mm/dd/yyyy") & "# "
             MsgBox "String is " & stWhere
             blnTrim = True
      End If
      
         DoCmd.OpenReport stDocName, acPreview, , stWhere
         DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, "", False
         DoCmd.OpenReport stDocName, acViewNormal, , stWhere
         DoCmd.Close
    End If
        
Exit_printOverdr_Click:
Exit Sub

End Sub

Regel waar het fout ging was het opbouwen van je WHERE clause.
Je kan fouten onder andere localiseren door:

- error afhandeling uit te zetten
- Option Explicit te gebruiken, daarmee dwing je af dat variabelen expliciet
gedefinieerd moeten worden en vind je makkelijker fouten in je code
- in je code MsgBox op te nemen en daar de inhoud van variabelen uit te lezen

Option Explicit zet je aan via het VBA editor scherm ("code scherm":

- kies in de menubalk voor Extra -> Opties
- vink de eigenschap "Variabelen declareren vereist" aan

Tardis

Dank je wel weer wat geleerd.
En inderdaad het werkt.
inmiddels ben ik er ook achter wat de fout heeft veroorzaakt nl:

Code:
       If blnTrim Then
         stWhere = Left(stWhere, Len(stWhere) - 5)
      End If

En dit blijkt dus alleen bij datum gegevens problemen te geven, het is me niet helemaal duidelijk waarom dit bij tekst gegevensinbreng wel werkt.
misschien kun je me daar nog iets over vertellen.

a;lvast bedankt voor de moeite en het oplossen van het probleem :thumb::d
Groet
René
 
Laatst bewerkt:
Het ging fout in deze regel

stWhere = "[Datum]=CDate(" & CDbl(Me.Keuzelijst143) & ") And "

Probleem zat 'm in de syntaxis.

Tardis
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan