データベースの数値「日付」 - 「通常」の日付を使用してそれと対話する方法は?

StackOverflow https://stackoverflow.com/questions/352311

質問

私はこのデータベースを使用しています。このデータベースでは、Colomnが日付値の代わりに数値値であるこのデータベースを使用しています。

はい、MouseClickでそれを変更できることは知っていますが、そのデータベースを使用するすべてのアプリケーションは私の前任者の1人によって作成されました(そして、彼の後の誰もがそれを無視して構築しました)。したがって、これまで変更すると、AFアプリケーションが失敗します。 :(

さて、私はそのデータベースの概要を作成しています。ドロップダウンリストを使用してみましたが、ご存知のように、1つのリストの1000のオプションは非常に不便で、醜いです。

私はむしろ、日 - 月 - 年に小さな入力フィールドを持っていますが、データベースの数値日にワルツが来ます。何らかの形で日付を数値に戻す必要があります...

これには簡単な解決策が必要です。右?



アプリケーションにASP(VBScript)を使用しています。これはIntraWeb用であり、アクセスデータベースがあります。

役に立ちましたか?

解決

アクセスはあなたのために数に変換されます、言及されているように、日付は数字として保存されます。

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")

Reコメントの編集:返された日付を示す小さなテストです。

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

他のヒント

右..だから本当に簡単だった。 remouの答えを受け入れます。ここで、numberdate =#2008/12/7#はトリックを行います。

しかし、問題に近づくために、ここに私自身の機能をいじる解決策があります。

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))

出力:

9/12/2008、39791でなければなりません。

DatetOnumeric( '9/12/2008')は次のとおりです。39791
CDATE( '39791')は:9-12-2008

cdate( '1')が与えるので:31-12-1899

1899年31/12/1899が日ゼロではなく、初日になるようにしました。 :/

みんなありがとう!

アクセスストアは、内部的にフローティングポイント数(31.12.1899以降の日数)として、CDATE()を使用して日付を変換してみましたか?その間の使用をクエリすることができるはずです。

別の可能性は、日付が数値的に保存されますが変換されないこと(つまり31121899)です。この場合、Format()またはday()またはmonth()またはyear()のいずれかを使用して適切な日付部品を取得できるはずです。

お役に立てれば。

悲しいことに、日付は39791-> 9月2008年に保存されます。フローティングポイント番号。

日付を読み取り可能な形式に変換するJavaScript関数(同じ前身によっても書かれています)があります。それは逆の方法であり、私を困惑させる数値に戻る方法です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top