Frage

Ich verwende diese Datenbank, in der das Datum Colomn ein numerischer Wert anstelle eines Datumswerts ist.

Ja, ich weiß, dass ich das mit einem Mouseclick ändern kann, aber alle Anwendungen, die diese Datenbank verwenden, wurden von einem meiner Vorgänger gestellt (und alle nach ihm ignorierten sie nur und bauten darauf auf). Wenn ich es also bisher ändern würde, würde AF -Anwendungen fehlschlagen. :(

Nun, ich gebe einen Überblick über diese Datenbank, von einem spezifischen Datum zu einem anderen. Ich habe versucht, eine Dropdown -Liste zu verwenden, aber wie Sie sagen können, sind tausend Optionen in einer Liste furchtbar unpraktisch und sogar hässlich.

Ich habe lieber kleine Inputfields für den Tag - Monat - Jahr, aber das numerische Datum in der Datenbank ist ein Walzen. Ich müsste das Datum irgendwie auf den numerischen Wert zurück berechnen ...

Dies muss eine einfache Lösung geben. Recht?



Ich verwende ASP (VBScript) für die Anwendung, es ist für eine Intraweb und ich habe eine Zugriffsdatenbank.

War es hilfreich?

Lösung

Der Zugriff wird für Sie zu einer Zahl umgewandelt, wie erwähnt, wie erwähnt, die Daten werden als Zahlen gespeichert.

Dim rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordset("TestTable")
rs.AddNew
rs!NumberDate = Now()  'Value stored, eg, 39791.4749074074 '
rs.Update

rs.MoveLast

'To show that it converts back to the correct date / time '
Debug.Print Format(rs!NumberDate, "dd/mm/yyyy hh:nn:ss")

Bearbeiten von Re -Kommentar: Hier ist ein kleiner Test, der die zurückgegebenen Daten zeigt:

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

strFile = "C:\Docs\LTD.mdb"

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data Source=" & strFile & ";" & _
       "Persist Security Info=False"

strSQL = "SELECT NumberDate FROM TestTable WHERE NumberDate= #2008/12/7#"

rs.Open strSQL, cn, 3, 3
rs.MoveLast

MsgBox rs.RecordCount

Andere Tipps

Richtig .. Also war es wirklich einfach. Ich werde die Antwort von Remou akzeptieren, wobei NumberDate = # 2008/12/7 # den Trick macht.

Aber um die Angelegenheit nahe zu stellen, hier ist die Lösung für mein eigenes Fummeln mit Funktionen:

Function DateToNumeric(dayDate)
    DateToNumeric=DateDiff("d","31/12/1899",dayDate) +1 //yup
End Function

    response.Write("9/12/2008, should be 39791.<br /><br />")
    response.write("DateToNumeric('9/12/2008') gives: " &DateToNumeric("9/12/2008")& "<br />")
    response.write("CDate('39791') gives: " &CDate(39791)&"<br /><br />")
    response.write("BECAUSE CDate('1') gives: " &CDate(1))

Ausgang:

9/12/2008, sollte 39791 sein.

DateTonumeric ('9/12/2008') gibt: 39791
CDate ('39791') gibt: 9-12-2008

Weil CDate ('1'): 31-12-1899 gibt

Es hat es so gemacht, dass 31/12/1899 nicht Tag Null, sondern am ersten Tag ist. :/

Danke Leute!

Access Stores Datum intern als schwimmende Punktnummer (Anzahl der Tage seit 31.12.1899 oder so) Haben Sie versucht, CDate () zu verwenden, um die Nummer wieder in ein Datum umzuwandeln? Sie sollten in der Lage sein, zwischen damals zu fragen.

Eine andere Möglichkeit besteht darin, dass das Datum numerisch, aber nicht konvertiert wird (dh 31121899). In diesem Fall sollten Sie in der Lage sein, die entsprechenden Datumsteile entweder format () oder tag () oder Monat () oder Jahr () zu erhalten.

Hoffe das hilft.

Leider wird das Datum als 39791-> 9-Dec-2008 gespeichert. Die schwimmende Punktzahl.

Ich habe eine JavaScript -Funktion (auch vom selben Vorgänger geschrieben), das das Datum in ein lesbares Format umwandelt. Es ist umgekehrt, der Weg zurück zu diesem numerischen Wert, der mich verblüfft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top