Announcement

Collapse
No announcement yet.

unverträglicher Datentyp

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • unverträglicher Datentyp

    Hallo zusammen,

    ich habe wiedermal ein Problem. Ich habe einen Filter kreiert, der sich durch die Eingabe in mehrere Textfelder auf einem Formular zusammenbauen lässt. Wenn ich nun aber den Filter anwenden möchte kommt die Fehlermeldung: Laufzeitfehler 3464: Datentypen in Kriterienausdruck unverträglich. Mein code ist:

    Code:
    Option Compare Database
    
    Private Sub Filter2_setzen()
    
        Dim DatVon As Date
        Dim DatBis As Date
        Dim Filterbedingung2 As String
        
        If Not IsNull(Me!Bearbeiter) Then
            If Filterbedingung2 <> "" Then
                Filterbedingung2 = Filterbedingung2 & " AND "
            End If
            Filterbedingung2 = Filterbedingung2 & "Bearbeiter = " _
                    & Chr(34) & Me!Bearbeiter & Chr(34)
        End If
        
        If Not IsNull(Me!DatVon) Then
            If Filterbedingung2 <> "" Then
                Filterbedingung2 = Filterbedingung2 & " AND "
            End If
            Filterbedingung2 = Filterbedingung2 & "eingangsdatum >= " _
                    & Chr(34) & Me!DatVon & Chr(34)
        End If
        
        If Not IsNull(Me!DatBis) Then
            If Filterbedingung2 <> "" Then
                Filterbedingung2 = Filterbedingung2 & " AND "
            End If
            Filterbedingung2 = Filterbedingung2 & "eingangsdatum <= " _
                    & Chr(34) & Me!DatBis & Chr(34)
        End If
    
    
    Me.Filter = Filterbedingung2
    Me.FilterOn = True
    
    End Sub
    
    Private Sub Bearbeiter_AfterUpdate()
        Call Filter2_setzen
    End Sub
    
    Private Sub DatVon_AfterUpdate()
        Call Filter2_setzen
    End Sub
    
    Private Sub DatBis_AfterUpdate()
        Call Filter2_setzen
    End Sub
    Ich denk mal man muss die Textfelder als Datum deklarieren. Aber ich hab da keine Ahnung wie des funktioniert. Ich bin im VBA ein rechter Anfänger.
    Der Filter soll durch die beiden Textfelder DatVon bzw. DatBis mehrerer Daten(Datums) vergleichen. Das Steuerelement ist in der Tabelle als Datum/Uhrzeit definiert.

    Tobias
    Gruß Tobias

  • #2
    Hallo Tobias,

    das liegt in der Tat am Datums-Format.
    Du kannst in den Eigenschaften des Controls unter "Format" Datum auswählen, hilft Dir aber nichts.

    SQL erwartet das gleiche Format, wie Du es auch im VBA Code angeben musst, also #dd/mm/yyyy#, z.B. für heute #31/1/2008#.

    Am besten schreibst Du Dir eine Funktion, die Dir das Datum umformatiert; ich meine, es gäbe dazu keine VBA Funktion, da kann ich mich aber auch irren.

    Also so was in der Richtung:

    debug.print "#" & day(now) & "/" & month(now) & "/" & year(now) & "#"

    Olaf
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Wenn ich aber nicht das heutige Datum haben möchte was muss ich dann machen??? Ich steh gerade voll auf dem Schlauch??? Wie soll dann die Zuweisung fuktionieren??
      Gruß Tobias

      Comment


      • #4
        Hallo Tobias,

        das sollte nur ein kleines Beispiel sein, das man z.B. im Direktfenster ohne Änderung austesten kann.

        [highlight=code]Public Function gsDate2SQL(ByVal dtDate As Date) As String
        'Datum ins SQL Format #dd/mm/yyyy# formatieren
        gsDate2SQL = "#" & Day(dtDate) & "/" & Month(dtDate) & "/" & Year(dtDate) & "#"
        End Function[/highlight]

        Und in Deinem Code verwendest Du es dann so:
        [highlight=code]
        If IsDate(Me.DatBis) Then
        If Filterbedingung2 <> "" Then
        Filterbedingung2 = Filterbedingung2 & " AND "
        End If
        Filterbedingung2 = Filterbedingung2 & "eingangsdatum <= " _
        & gsDate2SQL(Me.DatBis)
        End If[/highlight]

        Olaf
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Hallo Olaf,

          Danke für deine Hilfe, aber ich hab mein Problem schon gelöst.

          Ich hab nun einfach folgenden Code geschrieben:

          Code:
          Dim Filterbedingung2 As String
              
              If Not IsNull(Me!Bearbeiter) Then
                  If Filterbedingung2 <> "" Then
                      Filterbedingung2 = Filterbedingung2 & " AND "
                  End If
                  Filterbedingung2 = Filterbedingung2 & "Bearbeiter = " _
                          & Chr(34) & Me!Bearbeiter & Chr(34)
              End If
              
              If IsDate(Me!DatVon) Then
                  If Filterbedingung2 <> "" Then
                      Filterbedingung2 = Filterbedingung2 & " AND "
                  End If
                  Filterbedingung2 = Filterbedingung2 & "eingangsdatum >= " & Format(Me!DatVon, "\#yyyy\-mm\-dd\ hh:nn:ss#")
              End If
              
              If IsDate(Me!DatBis) Then
                  If Filterbedingung2 <> "" Then
                      Filterbedingung2 = Filterbedingung2 & " AND "
                  End If
                  Filterbedingung2 = Filterbedingung2 & "eingangsdatum <= " & Format(Me!DatBis, "\#yyyy\-mm\-dd\ hh:nn:ss#")
              End If
          Gruß Tobias
          Gruß Tobias

          Comment

          Working...
          X