Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : Access 2010)
Access2010とWindows10について
投稿日時: 17/09/07 17:27:01
投稿者: zenzen

質問と言うよりは疑問なのですが、
Windows10はAccess2010に対応していませんよね。
 
ところが、社内でWindows10Pro搭載のノートPCを使用している方と、
Windows10Home搭載のノートPCを使用している方がおりまして、
前者はAccess2010で作成したアプリケーションを利用できており、
後者はデータを開くこともできない、という状態です。
 
こういうことは普通に起こり得るものなのでしょうか。
知見のある方、ご意見頂ければ幸いです。
 
 

回答
投稿日時: 17/09/07 18:12:37
投稿者: sk

引用:
質問と言うよりは疑問なのですが、
Windows10はAccess2010に対応していませんよね。

Office サポート より:
https://support.office.com/ja-jp/article/Windows-10-%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8B-Office-%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3-0fc85c97-da69-466e-b2b4-54f7d7275705
 
引用:
ところが、社内でWindows10Pro搭載のノートPCを使用している方と、
Windows10Home搭載のノートPCを使用している方がおりまして、

・それぞれの PC にインストールされている Windows 10 は
 32 ビット版と 64 ビット版のどちらであるか。
 
・それぞれの PC にインストールされている Access 2010 は
 32 ビット版と 64 ビット版のどちらであるか。
 
・開発に使用された環境については、上記のどれに該当するのか。
 
・Windows 10 や Access 2010( Office 2010 )の
 アップデート状況に何らかの違いはないのか。
 
引用:
前者はAccess2010で作成したアプリケーションを利用できており、
後者はデータを開くこともできない、という状態です。

・後者の環境において、Access 2010 自体は起動するのか。
 
・それは特定のデータベースファイルでのみ発生する現象なのか、
 それともあらゆるデータベースファイルにおいて発生する現象なのか。
 (例えば、データベースの新規作成すら出来ないのか)
 
・特定のデータベースファイルでのみ発生する場合、
 そのデータベースのファイル形式は何であるか。
 
・後者の環境においてその現象が発生した際、Access からは
 何のエラーメッセージも返されないのか。
 もし何らかのエラーメッセージが返されるのであれば、
 それは具体的にどのようなものであるのか。
 
とりあえず、原因の切り分けを行なわれるのが先決ではないかと。

投稿日時: 17/09/08 10:45:09
投稿者: zenzen

sk様
いつもありがとうございます。
ご指摘いただいた件、調べ直してみます。
とりあえず、今分かる範囲では以下のようになります。
 

引用:
・それぞれの PC にインストールされている Windows 10 は
 32 ビット版と 64 ビット版のどちらであるか。

どちらも64ビット版です。
 
  
引用:
・それぞれの PC にインストールされている Access 2010 は
 32 ビット版と 64 ビット版のどちらであるか。

ここで私の記述が完全に間違っていました。
Access2010 Runtimeの32ビット版です。
 
引用:
・開発に使用された環境については、上記のどれに該当するのか。

開発環境はWindows7 Access2010 (いずれも32ビット版)です。
 
引用:
・Windows 10 や Access 2010( Office 2010 )の
 アップデート状況に何らかの違いはないのか。

ここは調べ直します。
 
引用:
・後者の環境において、Access 2010 自体は起動するのか。

起動そのものはしています。
データの無い画面(いわゆるメニュー画面)までは表示しますが、
データが存在する画面を開こうとすると実行時エラーが発生しています。
  
引用:
・それは特定のデータベースファイルでのみ発生する現象なのか、
  それともあらゆるデータベースファイルにおいて発生する現象なのか。
  (例えば、データベースの新規作成すら出来ないのか)

 
1種類のファイルでしか確認できていません。
他でも試してみます。
 

回答
投稿日時: 17/09/11 11:20:28
投稿者: Suzu

zenzen さんの引用:
引用:
・それぞれの PC にインストールされている Access 2010 は
 32 ビット版と 64 ビット版のどちらであるか。

ここで私の記述が完全に間違っていました。
Access2010 Runtimeの32ビット版です。

 
作成環境と、実行環境の違うランタイム のエラーの原因特定は厄介です。
 
エラートラップを エラー番号・エラーメッセージがきちんと表示される様に入れて
一つ一つ原因をつぶす作業になります。
 
 
可能なのであれば、実行環境と同じ環境でランタイムを作成し、
実行環境にインストール・確認を行いましょう。
 
 
引用:
起動そのものはしています。
データの無い画面(いわゆるメニュー画面)までは表示しますが、
データが存在する画面を開こうとすると実行時エラーが発生しています。

 
データの無いメニュー画面??
それは、ボタンのみを配置したフォーム という事でしょうか。
 
引用:
データが存在する画面を開こうとすると実行時エラーが発生しています。

どんなエラーなのでしょう。エラーメッセージは?
 
その作成したランタイムはリンクテーブル等を使い、
そのランタイム上ではなくネットワーク上に配したデータベースを参照する様にしているのではありませんか?
その場合、そのネットワーク上のファイルへのアクセス権が無くエラーになっているではありませんか?

投稿日時: 17/09/11 18:26:20
投稿者: zenzen

Suzu様
コメントありがとうございます。
 

引用:

データの無いメニュー画面??
それは、ボタンのみを配置したフォーム という事でしょうか。

その通りです。我ながら表現が拙すぎたと思います。すみません。
 
引用:

どんなエラーなのでしょう。エラーメッセージは?
  
その作成したランタイムはリンクテーブル等を使い、
そのランタイム上ではなくネットワーク上に配したデータベースを参照する様にしているのではありませんか?
その場合、そのネットワーク上のファイルへのアクセス権が無くエラーになっているではありませんか?

 
今日、少し時間を取ってもらって現認したのですが、随分聞いていた内容とは違いました。
色々アドバイス頂いておきながら済みません。
 
リンクテーブルを使用しているファイル(A)と、そうでないファイル(B)を両方起動してもらったのですが、
開くことは出来ました。
そこで、(A)と(B)の挙動の違いに腑に落ちないことがありました。
 
(A)では、初回起動時にアクションクエリ(更新)の確認メッセージが出たのですが、(B)では出なかったのです。
当然、設定は同じように確認欄のアクションクエリのチェックを外してあります。
2回目以降は(A)のファイルでも確認メッセージが出ませんでした。
 
よく確認すると、「実行時エラーが発生してファイルを開けない」というのは
この確認メッセージが「28件のデータを更新しますか?」というもので
これに対して「いいえ」を選択した際に実行時エラーでシャットダウンする。というものでした。
「はい」を選択した場合は他の環境と同じように使用出来ているようです。
 
ファイルを開くことは出来ているので、疑問点が以下の2点に移動しています。
・「アクションクエリの確認を拒否している場合に、確認メッセージが出るのは何故か」
・「そのファイルを最初に開くときだけ確認メッセージが出たのは何故か」
 
度々済みませんが、ご教示頂ければ幸いです。
 

回答
投稿日時: 17/09/12 09:29:27
投稿者: Suzu

zenzen さんの引用:
確認欄のアクションクエリのチェックを外してあります。

ランタイムインストールした場合、そのファイルの設定は確認できないと言う認識でいるのですが
確認できるのでしょうか。
それとも、ランタイムの作成元となるファイルを確認したのでしょうか。
 
 
マクロなりVBAでメッセージの表示制御を変えても一緒でしょうか。
 
アクション クエリ確認メッセージのオンとオフを切り替える
https://support.office.com/ja-jp/article/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3-%E3%82%AF%E3%82%A8%E3%83%AA%E7%A2%BA%E8%AA%8D%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%AA%E3%83%B3%E3%81%A8%E3%82%AA%E3%83%95%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B-e58e4bba-9d54-4b9d-b962-9eca048e5335
 
 
zenzen さんの引用:
2回目以降は(A)のファイルでも確認メッセージが出ませんでした。

2回目とは、「28件のデータを更新しますか?」の問いに「はい」を選択した後に
さらに、アクションクエリが実行される場合という事でしょうか。
 
 
zenzen さんの引用:
これに対して「いいえ」を選択した際に実行時エラーでシャットダウンする。というものでした。
「はい」を選択した場合は他の環境と同じように使用出来ているようです。

 
実行時エラーとは、何かメッセージが出るのでしょうか。

投稿日時: 17/09/12 10:28:03
投稿者: zenzen

Suzu様
度々ありがとうございます。
 

引用:
ランタイムインストールした場合、そのファイルの設定は確認できないと言う認識でいるのですが
確認できるのでしょうか。
それとも、ランタイムの作成元となるファイルを確認したのでしょうか。

 
元々の開発環境でファイル設定を確認しました。
 
引用:

2回目とは、「28件のデータを更新しますか?」の問いに「はい」を選択した後に
 さらに、アクションクエリが実行される場合という事でしょうか。

 
済みません。説明不足でした。以下の流れで、「2回目以降に該当フォームを開いたとき」という意味です。
 
このフォームを開くときのプロシージャに
更新クエリ(正確にはSQLのUPDATE文)を使用しているのは確かなので、
確認メッセージが毎回出てもいいはずなのですが、そうではないので腑に落ちない、ということです。
 
1. ファイルを起動する。
2. 該当フォームを開く(1回目)
3. 更新確認メッセージが出る
4. 「はい」を選択 (ここで「いいえ」を選択すると実行時エラー発生)
5. 特に問題無く使用できる。
6. 一旦ファイルを閉じる。
7. 再度、ファイルを起動する。
8. 該当フォームを開く(2回目)
9. 更新確認メッセージが出ない
10. 特に問題無く使用できる。
 
 
引用:

実行時エラーとは、何かメッセージが出るのでしょうか。

 
「実行時エラーが発生したため、このアプリケーションの実行は中断しました」
というものです。
 
アクションクエリの確認にチェックを入れた上で再現確認したところ、
「実行時エラー2501 RunSQLアクションの実行は取り消されました」
というものでした。

回答
投稿日時: 17/09/12 10:51:21
投稿者: sk

引用:
Access2010 Runtimeの32ビット版です。

引用:
(A)では、初回起動時にアクションクエリ(更新)の確認メッセージが出たのですが、
(B)では出なかったのです。
当然、設定は同じように確認欄のアクションクエリのチェックを外してあります

[アクションクエリの確認]オプションは
ファイルごとではなくクライアントごとの設定ですので、
開発環境でそのオプションを無効にしていても、
実際に適用されるのはあくまでその環境のみです。
したがって、それぞれの環境で設定する必要があります。
 
しかし、ランタイム環境では Access のオプション設定画面を
表示することは出来ません。それぞれの端末での
オプション設定はどのようにして行なわれたのでしょうか。
 
例えば、フロントエンド側で SetOption メソッドを実行するなどして
[アクションクエリの確認]オプションを無効にされた、ということでしょうか。
 
また、[信頼できる場所]などセキュリティ設定に関しては、
それぞれの端末上でレジストリの設定を行なうことで対処されたのでしょうか。
 
引用:
よく確認すると、「実行時エラーが発生してファイルを開けない」というのは
この確認メッセージが「28件のデータを更新しますか?」というもので
これに対して「いいえ」を選択した際に実行時エラーでシャットダウンする
というものでした。
「はい」を選択した場合は他の環境と同じように使用出来ているようです。

確認メッセージの表示が有効になっている状態で
OpenQuery メソッドや RunSQL メソッドによって
実行されようとしたアクションクエリ(に相当する SQL)の
実行がキャンセルされた場合は、当然そうなります。
 
OpenQuery メソッドや RunSQL メソッドによって
アクションクエリ(に相当する SQL)を実行する際、
そのメソッドを呼び出す前/呼び出した後に
SetWarnings メソッドを実行することによって
確認メッセージの表示/非表示を制御する、というのが
一般的な処理の流れになります。
 
もし、SetWarnings メソッドを呼び出さずに
Access のオプション設定のみで確認メッセージの表示を
無効化なさろうとしているのであれば、
(実行環境の Access が製品版/ランタイム版の
どちらであるかにかかわらず)そうした設計自体が
危なっかしいと言えます。
 
引用:
2回目以降は(A)のファイルでも確認メッセージが出ませんでした。

引用:
ファイルを開くことは出来ているので、疑問点が以下の2点に移動しています。
・「アクションクエリの確認を拒否している場合に、確認メッセージが出るのは何故か」
・「そのファイルを最初に開くときだけ確認メッセージが出たのは何故か」

「少なくとも A の環境において、フロントエンドを初めて起動し、
 そのアクションクエリを実行しようとした時点では
 [アクションクエリの確認]オプションが有効になっており、
 かつ確認メッセージの表示も有効になっていた」
という可能性が挙げられます。
 
その場合、
 
・それぞれの端末において、Access ランタイムのインストールや
 環境設定といった初期設定作業を、誰がどのようにして行なったのか。
 
・仮に VBA によってオプション設定を行なっている場合、
 それはどのタイミングで、どのようなコードによって実現しているのか。
 
・(オプション設定以前に) SetWarnings メソッドによる
 メッセージの表示/非表示の制御は行なわれていないのか。
 
という問題について検証する必要があると思います。

投稿日時: 17/09/12 14:34:04
投稿者: zenzen

sk様
度々ありがとうございます。
私の根本的な無理解と勘違いが露見していますが、ピンチはチャンスということにして
向き合っていきたいと思います。(厚顔)
ご迷惑でなければもう少しお付き合い頂ければありがたいです。
 

引用:

[アクションクエリの確認]オプションは
 ファイルごとではなくクライアントごとの設定ですので、
開発環境でそのオプションを無効にしていても、
実際に適用されるのはあくまでその環境のみです。
したがって、それぞれの環境で設定する必要があります。

 
まずここで根本的に勘違いしていました。ファイルに対する設定だという思い込みがありました。
 
引用:
しかし、ランタイム環境では Access のオプション設定画面を
表示することは出来ません。それぞれの端末での
 オプション設定はどのようにして行なわれたのでしょうか。

完全に勘違いしていたので、各端末でのオプション設定を行っていません。
 
引用:
例えば、フロントエンド側で SetOption メソッドを実行するなどして
[アクションクエリの確認]オプションを無効にされた、ということでしょうか。

 
Acess2010を触りはじめたころだと思うのですが、「確認メッセージを表示しない方法」を
検索して見つけた、以下のコードを使用しています。
モジュールとして設置して、呼び出す形式を取っています。
3年ぐらいこれで通しているので特に問題が無いのかと勝手に思っていた節はあります。
Public Sub Warningless()
Application.SetOption "confirm action queries", False
End Sub

 
案の定、と言うべきか該当するフォームを開く時のプロシージャではこのモジュールを呼び出していませんでした。
 
引用:

また、[信頼できる場所]などセキュリティ設定に関しては、
それぞれの端末上でレジストリの設定を行なうことで対処されたのでしょうか。

これについては全く触れていません。
 
引用:

・それぞれの端末において、Access ランタイムのインストールや
 環境設定といった初期設定作業を、誰がどのようにして行なったのか。

 
インストールは各自で行ってもらっています。
環境設定と呼ぶような作業は特にしていません。
 
引用:

・仮に VBA によってオプション設定を行なっている場合、
  それはどのタイミングで、どのようなコードによって実現しているのか。

 
先に挙げたコードになりますが、このモジュールを基本的にフォームを開くタイミングで
呼び出しています。
 
改めて考えてみると、この設定であれば起動時に呼び出せばそれでいいのでは?
という気がしてきました。
 
 
引用:

・(オプション設定以前に) SetWarnings メソッドによる
 メッセージの表示/非表示の制御は行なわれていないのか。

 
調べたところ、この件とは全く関連が無い場面(FAX送信時のアクション)で
Setwalningsメソッドを使用していますが、
それ以外は全て先のモジュールを使用しています。
APIが必要だということで参考用のコードを触りながらコードを作った記憶がありますが、
この部分も起動時にsetoptionで警告を否定していれば必要ないのでしょう。
 
 

回答
投稿日時: 17/09/12 16:02:36
投稿者: sk

引用:
Acess2010を触りはじめたころだと思うのですが、「確認メッセージを表示しない方法」を
検索して見つけた、以下のコードを使用しています。
モジュールとして設置して、呼び出す形式を取っています。

引用:
Application.SetOption "confirm action queries", False

引用:
案の定、と言うべきか該当するフォームを開く時のプロシージャでは
このモジュールを呼び出していませんでした。

ならば、タイミング次第では件の通りの結果になっても
おかしくはないでしょうね。
 
引用:
3年ぐらいこれで通しているので特に問題が無いのかと勝手に思っていた節はあります。

前述の通り、[アクションクエリの確認]オプションは
データベースファイルごとの設定ではなく
クライアント(コンピューター/ユーザー)ごとの設定ですから、
その環境で開かれる全てのデータベースが
そのオプションの影響を受けることになります。
 
ランタイム環境はともかく、もし製品版での動作を前提としている場合、
開発者側の都合だけでクライアントレベルのオプション設定を
勝手に変更してしまうのは、ユーザーが別のデータベースを
使用する際の障りとなり得ますし、また逆にユーザーの手によって
(あるいは別のデータベースのコードによって)
クライアントオプションの設定を変更される可能性がある以上、
このオプションに依存した形でのアクションクエリの実行は
極力避けられた方が無難です。
 
データベースレベルでメッセージの表示/非表示を制御したいのであれば、
SetWarnings メソッド(マクロなら[メッセージの設定]アクション)を
適宜実行する必要があります。
 
------------------------------------------------------------
Private Sub test1()
On Error GoTo Err_test1
     
    If MsgBox("クエリを実行しますか?", _
              vbYesNo + vbQuestion + vbDefaultButton2, _
              "実行確認") = vbNo Then
        Exit Sub
    End If
             
    With DoCmd
        .SetWarnings False
        .OpenQuery "アクションクエリ1"
        .OpenQuery "アクションクエリ2"
        .OpenQuery "アクションクエリ3"
        .SetWarnings True
    End With
     
    MsgBox "クエリの実行が完了しました", _
           vbInformation, _
           "実行完了"
     
Exit_test1:
     
    DoCmd.SetWarnings True
     
    Exit Sub
 
Err_test1:
     
    MsgBox Err.Number & ": " & Err.Description, _
           vbCritical, _
           "実行時エラー"
 
    Resume Exit_test1
End Sub
------------------------------------------------------------
 
もしくは、DoCmd オブジェクトのメソッドではなく
DAO のコードによってアクションクエリを実行する、
という選択肢もあるでしょう。
(主にトランザクションの制御が必要な場合。
 但しこの方式の場合、パラメータクエリ周りの
 コードの修正が発生する可能性がある)
 
引用:
改めて考えてみると、この設定であれば起動時に呼び出せばそれでいいのでは?
という気がしてきました。

(クライアントレベルのオプション設定の是非に目をつぶるならば)
とりあえずの対応としては、恐らくそれで一応は解決するだろうとは思います。

投稿日時: 17/09/12 18:28:16
投稿者: zenzen

sk様
度々ありがとうございます。
 

引用:
[アクションクエリの確認]オプションは
 データベースファイルごとの設定ではなく
 クライアント(コンピューター/ユーザー)ごとの設定ですから、
その環境で開かれる全てのデータベースが
そのオプションの影響を受けることになります。

先にも述べましたが、ここを完全に勘違いしていました。
社内の環境では、クライアントは恐らく私が作成したデータベースファイル1種類しか
使用していないため、ここまで気が付くことが無かったのだと思います。
 
 
引用:

ランタイム環境はともかく、もし製品版での動作を前提としている場合、
 開発者側の都合だけでクライアントレベルのオプション設定を
勝手に変更してしまうのは、ユーザーが別のデータベースを
使用する際の障りとなり得ますし、また逆にユーザーの手によって
(あるいは別のデータベースのコードによって)
クライアントオプションの設定を変更される可能性がある以上、
このオプションに依存した形でのアクションクエリの実行は
極力避けられた方が無難です。

 
恥ずかしながら、初めてここに考え至りました。
「いちいちメッセージが出たら煩わしくて仕方が無い」ということが先にあって、
どうやってこのメッセージを表示しないか、ということしか考えていませんでした。
調べて見つけたコードを流用してメッセージが出なくなったので、
それで良しとして深く考えることが無かったです。
 
 
引用:

データベースレベルでメッセージの表示/非表示を制御したいのであれば、
SetWarnings メソッド(マクロなら[メッセージの設定]アクション)を
適宜実行する必要があります。

 
社内の使用状況を考えると、当面問題になることは恐らく無さそうですが、
コードを修正していきます。
 
当初の疑問とは違う着地になりましたが、お蔭様で改めて知ることが多くありました。
お手数をおかけしました。
有難うございました。
 
 

投稿日時: 17/09/14 10:27:00
投稿者: zenzen

済みません。解決済とさせていただきます。