Date-Funktion Access 2007 hat einen Bug?

17/04/2009 - 17:17 von Bitsqueezer | Report spam
Hallo zusammen,

in einer Access 2007-Anwendung haben wir anscheinend einen Bug in der
Date-Funktion von VBA gefunden.

Normalerweise kann die "Date"-Funktion nicht mehr, als das Systemdatum
entweder zu setzen oder abzurufen. Keine Parameter, keine
Fehlermöglichkeiten. Das Systemdatum wird an keiner Stelle im Programm
veràndert, es wird nur jeweils an verschiedenen Stellen abgerufen über die
o.g. Funktion.

In einem der Formulare dieser Anwendung wird ein History-Feld befüllt, in
das Datum/Uhrzeit/Benutzername gefüllt wird, sobald irgendetwas an dem
aktuellen Datensatz veràndert wird. Zu diesem Zweck eignet sich ja sehr gut
"Form_Dirty". Die Funktion sieht so aus:


Private Sub Form_Dirty(Cancel As Integer)
On Error GoTo Form_Dirty_Error

Me.s_checker_name = Form_Background.s_loginname
Me.s_q_name = Form_Background.s_loginname

If Nz(Me.n_q_no) = "" Then
Me.n_q_no = GetQNo() + 1

If Nz(Me.d_delivery_date) = "" Then
Me.d_delivery_date = Date
End If
End If

Me.frm_m_version_history = Date & "-" & Time & ": " &
Form_Background.s_loginname & vbCrLf & Me. _
frm_m_version_history
Exit Sub

Form_Dirty_Exit:
Exit Sub

Form_Dirty_Error:
Select Case Err
Case Else
fnErr "Form_QualityCheck->Form_Dirty", True
Resume Form_Dirty_Exit
End Select
End Sub
-

Also nichts weltbewegendes.
Gehe ich in den VBA-Editor und gebe im Direktfenster ein: "?Date", erhalte
ich erwartungsgemàß das Tagesdatum, wie es im lokalen Computer eingestellt
ist, hier "17.04.2009".
Veràndere ich etwas am Datensatz, steht dort "26.03.2009"öh...

Habe also einen Breakpoint auf die erste Zeile gesetzt ("Me.s_checker"),
sobald ich etwas im Formular veràndere, landet der Debugger also hier und
bleibt stehen. Gebe ich jetzt o.g. Befehl in das VBA-Direktfenster ein,
erscheint "26.03.2009"...

Jetzt kann ich Schritt für Schritt durch die Funktion durchgehen bis hin zum
"Exit Sub" und auch dieses ausführen, dann steht Access ja wieder im "ich
warte auf die Eingaben des Users"-Modus, heißt: Es wird keine Funktion
aufgerufen, bis sich wieder etwas beim User tut. Entsprechend kann also auch
keine nachfolgende Funktion des VBA-Codes etwas àndern, weil noch keine
aufgerufen wird.

Gebe ich nun wieder "?Date" ein, steht da wieder "17.04.2009"...

Im Formular selbst wird die Date-Funktion auch noch an zwei Stellen
eingesetzt, als Default-Value für zwei Eingabefelder, mit der Funktion
"=Date()", ansonsten gibt es nichts, was mit Date zu tun hat.

Also entweder ist das ein fetter Bug der Date-Funktion oder es ist noch
irgendetwas anderes los, was ich aber nicht identifizieren kann.

Das Phànomen ist diversen Usern aufgefallen, die mit diesem Formular
Eingaben machen und bei denen in diesem History-Feld immer falsche
Datumswerte erscheinen, unterschiedliche Werte, also nicht immer 26.03.,
wahrscheinlich abhàngig vom Tagesdatum.

Die Anwendung ist eine auf accdb-Format basierende Client/Server-Anwendung,
die als Backend SQL Server 2000 benutzt. Die Tabellen sind entsprechend zum
Server verlinkt, also auch die, die Grundlage dieses Formulars ist.
Recordsource ist eine simple SELECT *...-Abfrage, die einfach alle Felder
einer Tabelle làdt.
Es gibt ein UFO auf diesem Formular, aber auch das verwendet nur eine
einfache Tabelle, die o.g. Felder befinden sich im Hauptteil des Formulars,
das UFO verwendet keine Datumsfunktionen.

Vielleicht hat ja einer eine Idee, was hier der Fall sein könnte. Sollte es
sich wirklich um einen Access-Bug handeln, muß ich wohl in Zukunft die
Date-Funktion von Access meiden und das Datum vom SQL-Server holen oder eine
Windows-API-Funktion zum Holen des Systemdatums verwenden (wenn das dann
besser funzt...).

Würde mich über Antworten sehr freuen. Habe schon erfolglos versucht, eine
Microsoft-Seite zu finden, auf der man Bugreports abgeben kann, lediglich
connect gefunden, aber dort geht es anscheinend nur um noch unveröffentlichte
Produkte.

Viele Grüße

Christian
 

Lesen sie die antworten

#1 Josef Poetzl
17/04/2009 - 17:48 | Warnen spam
Hallo!

Bitsqueezer schrieb:
[...]

Private Sub Form_Dirty(Cancel As Integer)
On Error GoTo Form_Dirty_Error

Me.s_checker_name = Form_Background.s_loginname
Me.s_q_name = Form_Background.s_loginname

If Nz(Me.n_q_no) = "" Then
Me.n_q_no = GetQNo() + 1

If Nz(Me.d_delivery_date) = "" Then
Me.d_delivery_date = Date
End If
End If


[...]
-

Also nichts weltbewegendes.
Gehe ich in den VBA-Editor und gebe im Direktfenster ein: "?Date", erhalte
ich erwartungsgemàß das Tagesdatum, wie es im lokalen Computer eingestellt
ist, hier "17.04.2009".
Veràndere ich etwas am Datensatz, steht dort "26.03.2009"öh...

Habe also einen Breakpoint auf die erste Zeile gesetzt ("Me.s_checker"),
sobald ich etwas im Formular veràndere, landet der Debugger also hier und
bleibt stehen. Gebe ich jetzt o.g. Befehl in das VBA-Direktfenster ein,
erscheint "26.03.2009"...

Jetzt kann ich Schritt für Schritt durch die Funktion durchgehen bis hin zum
"Exit Sub" und auch dieses ausführen, dann steht Access ja wieder im "ich
warte auf die Eingaben des Users"-Modus, heißt: Es wird keine Funktion
aufgerufen, bis sich wieder etwas beim User tut. Entsprechend kann also auch
keine nachfolgende Funktion des VBA-Codes etwas àndern, weil noch keine
aufgerufen wird.

Gebe ich nun wieder "?Date" ein, steht da wieder "17.04.2009"...

Im Formular selbst wird die Date-Funktion auch noch an zwei Stellen
eingesetzt, als Default-Value für zwei Eingabefelder, mit der Funktion
"=Date()", ansonsten gibt es nichts, was mit Date zu tun hat.

Also entweder ist das ein fetter Bug der Date-Funktion oder es ist noch
irgendetwas anderes los, was ich aber nicht identifizieren kann.



Heißt zufàllig ein Datenfeld aus dem Datenherkunft des Formulars oder
vielleicht ein Steuerelement "Date"?
Dann könnte nàmlich statt der Funktion Date() das Element Me.Date
angesprochen werden. Vielleicht ist dort der Wert "26.03.2009"
enthalten.

Die Verwendung von Me.d_delivery_date = VBA.Date() könnte in so einem
Fall helfen. Eine Umbenennung des Feldes hilft natürlich auch. ;-)


mfg
Josef

EPT: (Access Error Prevention Table) http://access.joposol.com/
FAQ: (Access-FAQ von Karl Donaubauer) http://www.donkarl.com/

Ähnliche fragen