collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 70
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13910
  • stats Beiträge insgesamt: 65777
  • stats Themen insgesamt: 8873
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Datentyp in Kriterienausdruck unverträglich - Datum  (Gelesen 18634 mal)

Offline -Tom-

  • Access-Profi
  • **
  • Beiträge: 214
    • Weber-Computerhilfe - Damit Ihr Computer nicht zum Alptraum wird!
Datentyp in Kriterienausdruck unverträglich - Datum
« am: Dezember 13, 2011, 01:41:46 »
Hallo,

Ich habe folgenden Code

If DCount("*", "tbl_VorgaengeZumMotor", "[MotorGrunddatenID_F]= '" & MotGrunddatenID & "' And [VorgangsArtID_F]= 1 And [Vorgangsdatum]> #12/10/2010# ") = 0 Then
erhalte hier aber immer die obengenannte Fehlermeldung.

Die Fehlermeldung verursacht das Datum!

Habe schon folgende schreibweise versucht

#10/12/2010#
#12-10-2010#
#10-12-2010#

Wie muss denn das Datum aussehen? in Meiner Tabelle stehts ja so drin 13.12.2010 (Datum/Uhrzeit, Format: Datum, kurz)

Tom
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
 

Offline bahasu

  • Moderator
  • Access Guru
  • *****
  • Beiträge: 1885
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #1 am: Dezember 13, 2011, 05:56:50 »
Moin Tom,

format ([Vorgangsdatum], 'yyyy.mm.dd') > '2010.10.12'

oder
format ([Vorgangsdatum], '\#yyyy\/mm\/dd\#') > '#2010/10/12#'

Harald
« Letzte Änderung: Dezember 13, 2011, 08:04:25 von bahasu »
Servus
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23265
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #2 am: Dezember 13, 2011, 09:41:12 »
Hallo,


If DCount("*", "tbl_VorgaengeZumMotor", "[MotorGrunddatenID_F]= '" & ME!MotGrunddatenID & "' And [VorgangsArtID_F]= 1 And [Vorgangsdatum]> #12/10/2010# ") = 0 Then

ich sehe hier aber keine Fehlersituation bzgl. des Datums, eher die Benutzung eines ID-Wertes (MotorGrunddatenID_F   ,   vermutlich Zahl,Long)  als String.  Lass also die Hochkommata um ME!MotGrunddatenID weg...



Des Weiteren würde ich an den "Magic-Numbers"  ( 1  und  #12/10/2010#  ) herummeckern wollen  ...  ;).  Ich nehme nicht an, dass Du bei jeder DAtenänderung auch den Code ändern willst...  Und auch auf das Me als Referenez auf das akt. Form sollte nicht verzichtet werden.

Offline -Tom-

  • Access-Profi
  • **
  • Beiträge: 214
    • Weber-Computerhilfe - Damit Ihr Computer nicht zum Alptraum wird!
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #3 am: Dezember 14, 2011, 00:14:08 »
Hallo,

ich sehe hier aber keine Fehlersituation bzgl. des Datums, eher die Benutzung eines ID-Wertes (MotorGrunddatenID_F   ,   vermutlich Zahl,Long)  als String.  Lass also die Hochkommata um ME!MotGrunddatenID weg...

Es lag wirklich an den Hochkommas, ich hab den Befehl eigentlich von einer anderen Stelle kopiert, drum dachte ich nicht an die Hochkommas. Dort sind die aber auch net komisch

Des Weiteren würde ich an den "Magic-Numbers"  ( 1  und  #12/10/2010#  ) herummeckern wollen  ...  ;).  Ich nehme nicht an, dass Du bei jeder DAtenänderung auch den Code ändern willst...  Und auch auf das Me als Referenez auf das akt. Form sollte nicht verzichtet werden.

Ne ist schon ein Wert aus einem Feld! War nur zum leichteren Verständnis.

So funkioniert es nun

If DCount("*", "tbl_VorgaengeZumMotor", "[MotorGrunddatenID_F]= " & MotGrunddatenID & " And [VorgangsArtID_F]= 1 And format([Vorgangsdatum], '\#dd\/mm\/yyyy\#') > 'Me!Datum'") = 0 Then

Tom
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
 

Offline bahasu

  • Moderator
  • Access Guru
  • *****
  • Beiträge: 1885
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #4 am: Dezember 14, 2011, 05:34:02 »
Moin,

bist Du Dir sicher dass die Reihenfolge  '\#dd\/mm\/yyyy\#')  für die Abfrage auf ">" die richtigen Ergebnisse liefert?
Der 31.01.2011 sollte dann größer als der 01.02.2011 sein.

Harald
Servus
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23265
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #5 am: Dezember 14, 2011, 11:18:03 »
Hallo,

in der Tat ist es Quatsch/Unsinn, einen internen numerischen Datumswert erst in einen String zu verwandeln und diesen mit einem anderen String alphanumerisch (Textvergleich) vergleichen zu wollen,

wobei der Code (bzw. die Where-Condition) eh nicht das ausführt, was eigentlich gedacht ist.


Die resultierende Where-Condition-Ausdruck (benutzt in einer VBA-IF-Bedingung  zur Demonstration)  dürfte so lauten, wenn in Vorgangsdatum das heutige Datum drinsteht:

If   "#14/12/2011#"    =    "Me!Datum"  Then

Das "Datum" ist kein Datum, nur eine Zeichenfolge, die wie ein Datum lesbar ist, und auch  nicht mal ein gültiges Datum darstellt (Zwölfter Vierzehnter 2011 ???????  )"

Me!Datum
" ist hier KEIN Verweis auf ein Formularfeld, sondern wird selber lediglich auch als Zeichenfolge interpretiert.



Insofern bezweifle ich auch stark, dass der Code das tut, was von ihm erwartet wird.

Offline -Tom-

  • Access-Profi
  • **
  • Beiträge: 214
    • Weber-Computerhilfe - Damit Ihr Computer nicht zum Alptraum wird!
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #6 am: Dezember 15, 2011, 19:41:10 »
Ihr habt natürlich recht geht nicht  :( habe das nur mit einem Datum probiert und da hat es halt zufällig funktioniert.

Habt Ihr vielleicht ne Lösung für mich wie es gehen könnte?

Tom
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23265
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #7 am: Dezember 15, 2011, 21:42:06 »
Hallo,

ja mei, das hab ich Dir doch schon anfänglich gesagt...  ::)

Offline -Tom-

  • Access-Profi
  • **
  • Beiträge: 214
    • Weber-Computerhilfe - Damit Ihr Computer nicht zum Alptraum wird!
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #8 am: Dezember 16, 2011, 17:54:04 »
Habs jetzt ohne DCount hinbekommen.

strSQL = "SELECT tbl_VorgaengeZumMotor.Vorgangsdatum FROM tbl_VorgaengeZumMotor WHERE MotorGrunddatenID_F = " & MotGrunddatenID & ""
    Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
    If rs.RecordCount > 0 Then
        rs.MoveLast
        lastdate = rs(0)
    End If
    If lastdate > Me!Datum Then
        MsgBox "Der Vorgang muss nach dem letzten Vorgang liegen!", vbInformation + vbOKOnly, "Hinweis"
        Exit Sub
    End If

Tom
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
 

Offline bahasu

  • Moderator
  • Access Guru
  • *****
  • Beiträge: 1885
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #9 am: Dezember 16, 2011, 18:30:00 »
N'abend,

ich halte den Teil       & ""  in der  sql-Formulierung für überflüssig.


Zu Deinem    Exit Sub   noch eine Bemerkung von jemanden, der mal mit Pascal angefangen hat und dem es ein Greuel ist, mitten in einer Procedure aus dieser herauszuspringen. Konkret bedeutet das, dass das Programm in diesem Fall nicht zu den - hoffentlich weiter unten vorhandenen - Zeilen rs.close   und set rs = nothing hinkommen wird.

Harald
Servus
 
Folgende Mitglieder bedankten sich: -Tom-

Offline -Tom-

  • Access-Profi
  • **
  • Beiträge: 214
    • Weber-Computerhilfe - Damit Ihr Computer nicht zum Alptraum wird!
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #10 am: Dezember 16, 2011, 20:50:47 »
N'abend,

ich halte den Teil       & ""  in der  sql-Formulierung für überflüssig.

Dann erhalte ich aber die Fehlermeldung "1 Parameter wurde erwartet, aber es wurden zuwenig Parameter übergeben

Zu Deinem    Exit Sub   noch eine Bemerkung von jemanden, der mal mit Pascal angefangen hat und dem es ein Greuel ist, mitten in einer Procedure aus dieser herauszuspringen. Konkret bedeutet das, dass das Programm in diesem Fall nicht zu den - hoffentlich weiter unten vorhandenen - Zeilen rs.close   und set rs = nothing hinkommen wird.

Harald

Das rs.close   und set rs = nothing hatte ich natürlich nicht in meinem Code, habe es vor das Exit Sub hinzugefügt

Danke

Tom
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23265
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #11 am: Dezember 17, 2011, 11:15:29 »
Hallo,

das & ""    IST überflüssig...


Der Hund (oder heißt es Hase   ;)  ) liegt woanders im Pfeffer...



Poste mal den ganzen Code, sonst stochert man bezgl.  MotGrunddatenID    und lastdate  und dergleichen im Nebel herum..

Offline -Tom-

  • Access-Profi
  • **
  • Beiträge: 214
    • Weber-Computerhilfe - Damit Ihr Computer nicht zum Alptraum wird!
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #12 am: Dezember 17, 2011, 16:29:30 »
Private Sub SaveMotVorgang_Click()
Dim ctl As Object
Dim rs As DAO.Recordset
Dim strSQL As String
Dim lastdate As Date


...

'Prüfen ob Motor schon angeschafft wurde bzw. ob das Datum des Vorgangs nach dem letzten Vorgang liegt.
If Vorgangsart.Value > 1 Then
    If DCount("*", "tbl_VorgaengeZumMotor", "[MotorGrunddatenID_F]= " & MotGrunddatenID & " And [VorgangsArtID_F]= 1") = 0 Then
        MsgBox "Der Motor muss erst beschafft werden bevor ein anderer Vorgang durchgeführt werden kann!", vbInformation + vbOKOnly, "Hinweis"
        Exit Sub
    End If
       
    strSQL = "SELECT tbl_VorgaengeZumMotor.Vorgangsdatum FROM tbl_VorgaengeZumMotor WHERE MotorGrunddatenID_F = " & MotGrunddatenID & ""
    Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
    If rs.RecordCount > 0 Then
        rs.MoveLast
        lastdate = rs(0)
    End If
    If lastdate > Me!Datum Then
        MsgBox "Der Vorgang muss nach dem letzten Vorgang liegen!", vbInformation + vbOKOnly, "Hinweis"
        rs.Close
        Set rs = Nothing
        Exit Sub
    End If
   
End If
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
 

Offline bahasu

  • Moderator
  • Access Guru
  • *****
  • Beiträge: 1885
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #13 am: Dezember 17, 2011, 20:52:37 »
N'abend Tom,

kann es vielleicht sein, dass die von Dir beschriebene Fehlermeldung beim Weglassen von  & "" dann auftritt, wenn in "MotGrunddatenID" nichts enthalten ist?


Harald
Servus
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23265
Re: Datentyp in Kriterienausdruck unverträglich - Datum
« Antwort #14 am: Dezember 17, 2011, 21:11:17 »
Hallo,


vermutlich ist dann "MotGrunddatenID"   ein Formular-Textfeld (dann sollte man auf "Me" als Referenz auf das akt. Form nicht verzichten) und ist im Fehlerfall leer.


Deshalb wäre etwa dieses geeignet, den Fehlerzustand syntaktisch, aber nicht logisch, zu vermeiden:

strSQL = "SELECT tbl_VorgaengeZumMotor.Vorgangsdatum FROM tbl_VorgaengeZumMotor WHERE MotorGrunddatenID_F = " & nz(Me!MotGrunddatenID,0)


Weiterhin:

für was ist  rs.MoveLast gut?   Willst Du damit das jüngste Vorgangsdatum   (entspr. der Where-Condition)  erwischen? Das geht möglicherweise nicht gut... Besser ist in diesem Fall ein Sortierung nach Vorgangsdatum :




strSQL = "SELECT tbl_VorgaengeZumMotor.Vorgangsdatum FROM tbl_VorgaengeZumMotor WHERE MotorGrunddatenID_F =" & nz(Me!MotGrunddatenID,0) & "order by  Vorgangsdatum "


Weiterhin könnte man sich rs.Movelast sparen, wenn man gleich richtig (absteigend) sortiert und den ersten DS des Recordsets ausliest:

strSQL = "SELECT tbl_VorgaengeZumMotor.Vorgangsdatum FROM tbl_VorgaengeZumMotor WHERE MotorGrunddatenID_F =" & nz(Me!MotGrunddatenID,0) & "order by  Vorgangsdatum DESC"



Um das Ganze noch weiter zu verkürzen, reicht dann:
.
.
.
  strSQL = "SELECT tbl_VorgaengeZumMotor.Vorgangsdatum FROM tbl_VorgaengeZumMotor WHERE MotorGrunddatenID_F =" & nz(Me!MotGrunddatenID,0) & " order by  Vorgangsdatum DESC"
 
  lastdate= CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)(0)
 
  If lastdate > cdate(Me!Datum) Then
.



Alternativ ginge auch:


.
.
.
  strSQL = "SELECT Max(Vorgangsdatum) As LastDate  FROM tbl_VorgaengeZumMotor WHERE MotorGrunddatenID_F =" & nz(Me!MotGrunddatenID,0) 
 
lastdate= CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)(0)
 
  If lastdate > cdate>(Me!Datum) Then
.