DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データベースに時刻が記憶されない・・・

分類:[.NET]

はじめまして、maxと申します。

現在、Visual Basic.NETとAccess2000のデータベースを用いてアラーム時計のよ
うなソフトを作っているのですが、DataGrid上で入力した日付/時刻のうち、な
ぜか時刻が記憶されず、必ず00:00になってしまい、困っています。

具体的には、 Microsoft Jet 4.0 OLE DB Providerを用いてsample.mdbにアクセ
スし、DataSet1を生成してDataGridに連結しているのですが、Datagrid上で
日付/時刻型データのところに「2003/10/1 12:00:00」と入力すると、一見Data
Grid上はきちんと表示されるのですが(Table StyleのFormatで yyyy/MM/dd HH:mm
と規定している)、Updateを行うと実際のmdbには、「2003/10/1 00:00:00」と
記憶されてしまいます。

また、DataGridに「12:00:00」と入力すると、その日の日付+時刻が表示される
のですが、同じくUpdateすると、時刻が00:00:00となり、時刻が記憶されません。

ためしにテーブル上に2つの日付/時刻型のフィールドを作り、日付と時刻を
別々に格納しようともしたのですが、時刻のほうはどうしても駄目でした。

どなたか解決法をご存じの方はいますでしょうか?
宜しくお願い致します。
日付型を値を保存する時、''で値を囲むのではなく、##で値を囲んで見てください。
DataSetで直接保存した事がないので何とも言えませんが、この辺りに問題があります。
また、簡単な方法として、日付のフィールドをDate型ではなく、Text型で保存すると言う方法があります。この方が結果的には楽です。
ただし、日付のデータが重要である場合はお勧めできません。
2003/08/08(Fri) 15:25:50 編集(投稿者)
2003/08/08(Fri) 15:24:49 編集(投稿者)
2003/08/08(Fri) 15:24:40 編集(投稿者)

■No281に返信(クリリンさんの記事)
> 日付型を値を保存する時、''で値を囲むのではなく、##で値を囲んで見てください。

クリリンさん、早速の返事ありがとうございます。
話を簡略化するためにDataSetと書きましたが、実際はDataViewを使って行って
います。実際とはちょっと違うのですが、下のようにNow()を格納しても、日付
は入るのですが、時刻は00:00:00になってしまいます。

Dim dr As DataRowView

dr = DataView1.AddNew()

dr("Time") = Now()
dr.EndEdit()

OleDbDataAdapter1.Update(DataSet1, "Table")

実際は、Now()の代わりにTextなので、
dr("Time") = CDate("2003/10/1 12:00:00")

としたいのですが・・・、できません(TT)
> 実際は、Now()の代わりにTextなので、
> dr("Time") = CDate("2003/10/1 12:00:00")
DataAdapterのパラメータはどの型を指定しているのですか?
Data.OleDb.OleDbType.DBTimeStampでいけると思いますが、
試してみてください。
(違ってたらごめんなさい)
2003/08/09(Sat) 16:53:17 編集(投稿者)

■No292に返信(opaさんの記事)
>>実際は、Now()の代わりにTextなので、
>> dr("Time") = CDate("2003/10/1 12:00:00")
> DataAdapterのパラメータはどの型を指定しているのですか?
> Data.OleDb.OleDbType.DBTimeStampでいけると思いますが、
> 試してみてください。
> (違ってたらごめんなさい)

opaさん、返信ありがとうございます。
しかも無事解決しました!

パラメータがDBDateになっていたのを、DBTimeStampに変更したら
みごとに記憶されました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板