- ベストアンサー
Access日付データのテーブル上での不具合
- Access日付データのテーブル上での不具合についての質問です。クライアントのデータベースをクリーニングしている際、日付型フィールドにデータが入っているのにも関わらず、連結フォーム上で表示した場合に不具合が生じます。同じテキストボックスなのに、クリックした時の反応がデータによって違い、一部のデータは正しく表示されない状態です。試した方法として、更新クエリやコードでの変換を試みましたが、改善されませんでした。修正フィールドのデータを更新するための良い方法はありますでしょうか。
- Accessの日付データのテーブル上で不具合が発生しています。データベースのクリーニング中に、日付型フィールドに正しいデータが入っているにも関わらず、連結フォーム上で表示すると一部のデータが正しく表示されません。クリックした時の反応がデータによって異なり、一部のデータはデータのまま表示される問題が発生しています。更新クエリやコードでの変換を試しましたが、問題は解決しませんでした。該当するテーブル上のデータを修正するための有効な方法はありますか?
- Accessの日付データのテーブル上で不具合が発生しています。データベースのクリーニング中に、日付型フィールドに正しいデータが入っているのにもかかわらず、連結フォーム上で表示するとデータによって不具合が生じます。同じテキストボックスなのに、クリックした時の反応がデータによって違い、一部のデータは正しく表示されません。更新クエリやコードでの変換を試しても問題は解決されませんでした。修正フィールドのデータを更新するための効果的な方法はありますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ファイルの変換で不具合が生じることはありえますが、 ファイルの変換によって不具合が生じたのか、あるいは Access2000.mdbのファイルですでに不具合が生じて いたのかどちらなのでしょうか。いずれにしても (1) いちど、ファイルを新しいファイルにインポートして 確認してみる。 (2) ファイルの最適化をしてみる。 (3) 格納されているデータの型を調べてみる。 (4) 新しいテーブルにオートナンバー型のフィールドと 日付型のフィールドを設定し、その日付型のフィールドに 元のテーブルの日付をVBAでエラーが発生しないか確認する。 (5) テーブルの型、書式などの確認。 (6) フォームでの表示の設定の確認。 (7) コードによる表示の制御があるならばその確認。 などですかね。
その他の回答 (3)
- piroin654
- ベストアンサー率75% (692/917)
No2です。 日付データを関数で変換するときに日付データに 不具合がある場合は処理をスキップするように、 On Error Resume Next rs.MoveFirst Do Until rs.EOF のように On Error Resume Next を追加しておいてください。これで日付データに 不具合がある場合はmy日付フィールドに書き込まれず 空白になります。 なお、 Set rs = db.OpenRecordset("T日付", dbOpenDynaset) の"T日付"というのはテーブル名です。実際に合わせて変えて ください。
補足
お忙しいところご回答ありがとうございます。 まず、アクセスのバージョンですが、勘違いしておりました。 Access2000.mdbのテーブルをAccess2013.accdbで変換し、 現在は365にて色々と修正を行っております。 教えて頂いた方法を試しましたが解決できませんでした。 仰る通り、ファイルそのものまたはテーブルそのものが壊れているのでしょうか。 他に方法をご存知であれば教えて頂ければ幸いです。
- piroin654
- ベストアンサー率75% (692/917)
日付型フィールドならばテーブルに入力した時点で エラーが表示されると思いますが。 それと、 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日付を表示して、それでも データに不具合があるのであれば、ファイルの損傷や フォームの表示設定に問題があるのかもしれません。
- ganbaro
- ベストアンサー率45% (43/94)
異なっているかもしれませんが、osの日付設定で表示を西暦でなく、和暦にされていませんか? pcの日付表示はどうなっていますか?
補足
お忙しいところご回答ありがとうございます。 PCの日付設定は「西暦」になっております。 例えばフォーム上に3データを表形式に表示しそれぞれクリックした場合、 NO 日付 1 2019/11/01 2 令01年11月 3 2019/11/03 となり、同じテキストボックスでも2だけがクリックしても変わらない現象です。 データそのもの型が違うと推測しております。 お気づきの点がございましたら教えてください。
お礼
ご返信が遅くなり申し訳ありません。 別件の仕事を対応することになり、一旦この件は保留となりました。 恐らくご指摘の内容を検証すれば解決するかと思います。 諸々と教えて頂き大変ありがとうございました。 また躓いた時にはご質問させていただきます。 ありがとうございました。