• ベストアンサー

ACCESSのデータ置換について

ACCESS初心者です。VB2010からACCESSファイルに種々のデータ登録を行っていたのですが フィールドで『日付』と『時間』を別々に管理をしていたら『時間』フィールドに日付が入っていない状態なので全て1899年12月30日の時間で認識されてしまいます。 過去データを 日付:2012/09/26   時間:17:00:00 を 日付:2012/09/26   時間:2012/09/26 17:00:00 の様に置換するいい方法があるでしょうか? ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacob-wk9
  • ベストアンサー率36% (85/231)
回答No.3

#1です。お返事ありがとうございました。 更新ごとのシリアル値の差分を見ると、規則的に「41178」となっていますね。 補足を読ませて頂き、もしかしたら、複数レコードを更新するのではなく、ある1レコードに対して 古い順に日付+時間を上書きしていくのかな、とも思いました。 その場合には、元のレコードの内容を全く無視して、ただ新しい「日付」+「時間」を上書きすれば良いだけですが。 また、次にしたいことの内容を読ませていただき、 日付時刻A(シリアル値 YYYYYYY.yyyyyyyyy)に日付時刻B(シリアル値 ZZZZZZZZ.zzzzzzz)を 合成して、日付時刻C(YYYYYYYY.zzzzzzzzz)を作りたい、と解釈すると このような感じになります。 (カラム1)Aの日付部分:DateValue(Format([A],"yyyy/mm/dd")) AS Y, (カラム2)Bの日付部分:TimeValue(Format([B],"hh:nn:ss")) AS z, (結果)[Y]+[z] AS C もちろん結果カラムについては、[Y]の式と[z]の式をダイレクトにつっこんでもかまいません。 これで要件満たしますでしょうか。

Alshark
質問者

お礼

ありがとうございます。 思い通りの動作になりました。 ACCESSは全くの素人で、クエリを初めて作ったので(汗) もっと精進したいと思います。

その他の回答 (2)

  • jacob-wk9
  • ベストアンサー率36% (85/231)
回答No.2

#1です。 補足についてもう少し、かみ砕いてご説明頂いても宜しいでしょうか。 1.初回の更新は成功したと仮定しますが、「複数回更新」とは、どういった要件で使われるのでしょうか。 2.「日付がどんどん」どうなりましたか。 3.「時間ファクター」とは、日付を無視して「時間」を使って、ソートや抽出を行うということですか。 まず、お返事頂く前にざっくり書きますが、 最初の回答のとおり、日付+時間とした場合、それはシリアル値では「XXXXX.YYYYY」(Xは日付、Yは時間)で格納されます。 もしすでに(日付+時間)に合成したものに、最初の回答に書いた式のように「時間」を単純に足すと、 XXXXXX.YYYYY+0.ZZZZZZZということになり、YYYYY+ZZZZZの部分が1以上になった場合、日付が繰り上がります。 ですので、2回目以降の更新には使えません。 また、入力時はフォームを使ったものでしょうか。フォームの時刻枠について、規定値プロパティに「=now()」を入れていて、表示書式を時間のみにコントロールしていた場合、実際には「=now()」関数は日付も含めたシリアル値が設定されていますので、1回目の足し算方式は使えません。 なお、3のニーズに近いのかなと思いますが、式に「Format([日付+時間の列],"hh:mm:ss")」とすると、時間だけ抜き出せます。 最初の「日付列」と「時間列」は消さないほうがいいかも知れませんね。もし、もう消してしまった場合には、もう一度作り直す方法として、日付列と時刻列を作り直し、「日付列  Format([日付+時間の列],"yyyy/mm/dd")」、「時刻列 Format([日付+時間の列],"hh:mm:ss")」として更新する方法があります。 お返事お待ちしております。

Alshark
質問者

補足

言葉足らずですいませんでした。 まず複数回更新する理由は前任者がVB6で作成しているソフトでデータをAccessに投げています。現在わたしが同様のソフトをVB.NETで作成中なのですが完成まで不適切(日付シリアル)なレコードが来るので適宜改善したいからです。 先日の更新だと日付が『2012/9/26』、時間が『17:00:00』とすると結果が 1回目『2012/09/26 17:00:00』 2回目『2125/06/24 17:00:00』 3回目『2238/03/22 17:00:00』 4回目『2350/12/18 17:00:00』 5回目『2463/09/14 17:00:00』 となっていってしまします。 次にしたいことを書くと『日付』シリアル値をXXX.XXX『時間』シリアル値をYYY.YYYとすると XXX(整数値のみ)+0.YYY(小数値のみ)としたいのです よろしくお願いします

  • jacob-wk9
  • ベストアンサー率36% (85/231)
回答No.1

日付時刻は、シリアル値という規則に決められた番号を元に、人間が読みやすい書式に置き換えて表示しています。 シリアル値で現す場合、日付は整数、時刻は小数点未満です。 ですので、日付と時刻を同じカラムに統一するには、日付の列+時刻の列 とすれば良いです。 あとは、更新クエリーを使って置換すると良いでしょう。 必ず更新クエリーを掛ける前に、普通のクエリーで求める表示になるか、別の列に式を入れて表示してみてからOKであれば、その式を更新式に突っ込んで実行してください。

Alshark
質問者

お礼

ありがとうございます。変更できました。

Alshark
質問者

補足

レコードの更新にてできましたが、[日]+[時間]としておくと当たり前ですが複数回更新をかけると日付がどんどん… [時間]のところで時間ファクターだけにするにはどうしたらよいのでしょうか?ネットで調べてもうまく検索できません。 よろしくお願いします。

関連するQ&A