こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access 日付データのテーブル上での不具合

Access 日付データのテーブル上での不具合

OS:Windows10
Access:2013 ⇒ Office365

お世話になっております。
現在クライアントのデータベースをクリーニングしております。
日付型フィールド(フィールド名:日付)に見た目上日付が入っているのですが、
連結フォーム上に表示するとデータによって不具合が生じます。

例)
テーブル格納データ:2019/11/05
フォーム上のテキストデータ:令01年11月(フォーム上は和暦年月表示)

同じテキストボックス(表形式)なのに、クリックした時の反応がデータによって違います。
あるデータは「2019/11/05」に戻るのに対して不具合があるデータは「令01年11月」のままです。
テーブルで直修正をするとそのデータはクリック時に「2019/11/05」に戻ります。
見た目上は同じでも格納データは型が違うようです。

いちいち不具合のあるデータを探して手で修正するわけにもいかないで、検索して見つけた情報を基に
コード等で変換をしているのですが、改善されません。

<試したこと>
(1)更新クエリ format関数による変換(Format([日付],"yyyy/mm/dd"))
(2)コードで変換
  Dim h_date As String
  Dim h_date_true As Date

If Not IsNull([日付]) Then
h_date = Left([日付], 4) & Mid$([日付], 6, 2) & Right([日付], 2)
h_date_true = DateSerial(Left(h_date, 4), Mid(h_date, 5, 2), Right(h_date, 2))
h_date_true = CDate(Format(h_date_true, "@@@@\/@@\/@@"))
End If
  レコードセット![西暦] = h_date_true

この連結フォーム上で修正フィールドのデータを更新する仕様です。
クエリやレコードセット等でデータをそろえるために何か良い方法はございますでしょうか。

投稿日時 - 2019-11-05 15:57:16

QNo.9675254

困ってます

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

ファイルの変換で不具合が生じることはありえますが、
ファイルの変換によって不具合が生じたのか、あるいは
Access2000.mdbのファイルですでに不具合が生じて
いたのかどちらなのでしょうか。いずれにしても

(1)
いちど、ファイルを新しいファイルにインポートして
確認してみる。

(2)
ファイルの最適化をしてみる。

(3)
格納されているデータの型を調べてみる。

(4)
新しいテーブルにオートナンバー型のフィールドと
日付型のフィールドを設定し、その日付型のフィールドに
元のテーブルの日付をVBAでエラーが発生しないか確認する。

(5)
テーブルの型、書式などの確認。

(6)
フォームでの表示の設定の確認。


(7)
コードによる表示の制御があるならばその確認。


などですかね。

投稿日時 - 2019-11-08 09:43:07

お礼

ご返信が遅くなり申し訳ありません。
別件の仕事を対応することになり、一旦この件は保留となりました。
恐らくご指摘の内容を検証すれば解決するかと思います。
諸々と教えて頂き大変ありがとうございました。
また躓いた時にはご質問させていただきます。
ありがとうございました。

投稿日時 - 2019-11-11 09:48:13

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

No2です。
日付データを関数で変換するときに日付データに
不具合がある場合は処理をスキップするように、

 On Error Resume Next
 rs.MoveFirst
 Do Until rs.EOF

のように
 On Error Resume Next
を追加しておいてください。これで日付データに
不具合がある場合はmy日付フィールドに書き込まれず
空白になります。

なお、
Set rs = db.OpenRecordset("T日付", dbOpenDynaset)
の"T日付"というのはテーブル名です。実際に合わせて変えて
ください。

投稿日時 - 2019-11-07 09:11:29

補足

お忙しいところご回答ありがとうございます。

まず、アクセスのバージョンですが、勘違いしておりました。
Access2000.mdbのテーブルをAccess2013.accdbで変換し、
現在は365にて色々と修正を行っております。

教えて頂いた方法を試しましたが解決できませんでした。
仰る通り、ファイルそのものまたはテーブルそのものが壊れているのでしょうか。
他に方法をご存知であれば教えて頂ければ幸いです。

投稿日時 - 2019-11-07 17:26:30

ANo.2

日付型フィールドならばテーブルに入力した時点で
エラーが表示されると思いますが。
それと、
Access:2013 ⇒ Office365
と、なっていますがこの変換でデータの不具合が生じた、
ということではありませんでしょうね?



たとえば、テーブルに新しい日付型のフィールドを追加して
そこに日付フィールドのフィールドのデータを入れてみて
確認してみてはどうでしょう。

新しい日付型のフィールドの名前を「my日付」とします。
以下を標準モジュールに貼り付け、Subプロシージャを
実行してみてください。

一応、元のテーブルは別途保存しておいてください。

以下のモジュールではDAOを使っています。


Function returnDate(ByVal myDate As Variant) As Date
 Dim varDate As Variant
  varDate = CDate(Format(CStr(Format(CStr(myDate), "yyyymmdd")), "@@@@/@@/@@"))
  returnDate = myDate
End Function


Sub test52()
 Dim db As DAO.Database
 Dim rs As DAO.Recordset

 Set db = CurrentDb
 Set rs = db.OpenRecordset("T日付", dbOpenDynaset)
 rs.MoveFirst
 Do Until rs.EOF
  rs.Edit
  rs!my日付 = returnDate(rs!日付)
  rs.Update
 rs.MoveNext
 Loop
 rs.Close: Set rs = Nothing
 db.Close: Set db = Nothing
End Sub



見ればわかると思いますが、関数returnDateは日付データを
一旦テキスト型に変換し、再度日付型に変換して、テーブル
に格納します。


当該のフォームに変換したmy日付を表示して、それでも
データに不具合があるのであれば、ファイルの損傷や
フォームの表示設定に問題があるのかもしれません。

投稿日時 - 2019-11-06 12:40:52

ANo.1

異なっているかもしれませんが、osの日付設定で表示を西暦でなく、和暦にされていませんか?
pcの日付表示はどうなっていますか?

投稿日時 - 2019-11-06 07:26:22

補足

お忙しいところご回答ありがとうございます。
PCの日付設定は「西暦」になっております。

例えばフォーム上に3データを表形式に表示しそれぞれクリックした場合、

NO 日付
1  2019/11/01
2  令01年11月
3  2019/11/03

となり、同じテキストボックスでも2だけがクリックしても変わらない現象です。
データそのもの型が違うと推測しております。
お気づきの点がございましたら教えてください。

投稿日時 - 2019-11-06 10:53:03

あなたにオススメの質問