ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:Access VBA 読み取り専用かチェック) Access VBA 読み取り専用かチェック 2014/11/05 13:22 このQ&Aのポイント Access VBAで作成したツールで、読み取り専用で開かれた場合に処理を中断する方法を知りたい。Access VBAツールの処理中に、読み取り専用で開かれた場合に発生するエラーを回避する方法を教えてください。Accessのフォームを読み取り専用で開かれた場合に、処理をさせないようにする方法を教えてください。 Access VBA 読み取り専用かチェック お世話になります。 現在Accessにてツールを作成しておりますが、読み取り専用で 開かれた場合は、処理をさせないようにしたいとところです。 処理が実行されると削除クエリの箇所で、削除できない旨のエラーが 出てしまい処理が中断します。 なお、中断される前にローカルにテンポラリテーブルを作成したり している為、中途半端な状態で止まってしまいます。 ※ツールはRuntime環境で利用する為、ユーザーが中途半端に 作成されたテーブル等を削除できません。 なので、フォームを開く際に読み取り専用で開かれたかどうか チェックし、読み取り専用の場合は、処理させないようにボタンを 使用不可にしたいと考えております。 ご教示の程、宜しくお願い致します。 質問の原文を閉じる 質問の原文を表示する みんなの回答 (5) 専門家の回答 質問者が選んだベストアンサー ベストアンサー ShowMeHow ベストアンサー率28% (1424/5027) 2014/11/05 17:39 回答No.5 >CurrentDb.Updatable って何をしようとして... よく知らないですけど、、、 アクセスの環境変数みたいなものとして持っているものを返しているんじゃないかな? ざっくばらんに言うと、どういう形でDBを開いたかをどこかで覚えておくためのものだと思います。 (ldb内に格納されているんじゃないかな)。 多分、参照だけなので、他には何の影響もないと思いますが、まあ、納品物なら 動作検証等はやっておいたほうがよいのかもしれませんね。 質問者 お礼 2014/11/05 20:04 度々のご回答ありがとうざいます。 了解です。 とりあえず、影響無いことを検証したいと思います。 助かりました! 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (4) ShowMeHow ベストアンサー率28% (1424/5027) 2014/11/05 16:50 回答No.4 updatable かな? 質問者 お礼 2014/11/05 16:55 あ・・うまくいきました。すみません。 そもそも、CurrentDb.Updatable って何をしようとして Falseを返したりTrueを返したりしてるのでしょうか。 勉強不足で大変恐縮です。。 質問者 補足 2014/11/05 17:01 要するにCurrentDb.Updatable ってやることにより 変更権限有りで開いたときに何か影響がないかを懸念 している次第です。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 ShowMeHow ベストアンサー率28% (1424/5027) 2014/11/05 16:34 回答No.3 今ちょっとやってみたら、、、 MsgBox CurrentDb.Updatable で判断できたよ。 Acc2000 でMDBファイルだったけど。 質問者 お礼 2014/11/05 16:49 こちら2010ですが、読み取り専用だったらFalse、変更可能だったら Trueになりました!ありがとうございます。 ちなみにですが・・・ If CurrentDb.Update = False Then MsgBox "読み取り専用" Else MsgBox "読み取り専用ではない" End If としたら、「コンパイルエラー メソッドまたはデータメンバーが 見つかりません」となり.Updateの箇所でひっかがってるようです。 どのように評価すればよいでしょうか。 度々申し訳ございません。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 ShowMeHow ベストアンサー率28% (1424/5027) 2014/11/05 16:26 回答No.2 >読取専用で開いた場合、 > Set d1 の箇所でFalse > Set d2 の箇所でデータの表示と書込みを行う権限が無い旨のエラー ってことは、きっと自分自身に対するチェックには利用できないってことですね。 あとは他のMDBから判断できるのかをチェックしてみるとか、 エラーハンドリングでそれを伝えるか、、、 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 ShowMeHow ベストアンサー率28% (1424/5027) 2014/11/05 14:13 回答No.1 この辺りが参考になるかな? 詳しく読んでもいないので、自分自身に対してできるかよくわかんないけど。 Dim d1 As database, d2 As database Set d1 = OpenDatabase("biblio.mdb", 0, -1) 'set read-only option True debug.print d1.Updatable ' Updatable prints False, 0, as expected. Set d2 = OpenDatabase("biblio.mdb", 0, 0) 'set read-only option False debug.print d2.Updatable ' Updatable still prints False, 0 定義では、更新可能なプロパティは、読み取り専用アクセスが True、およびその逆の場合に False を返します。 まあ、最悪の場合、チェック専用にテーブル作ってエラー処理したルーチンから、そのテーブル書きに行ってみればわかると思うけど。 参考URL: http://support.microsoft.com/kb/107074/ja 質問者 お礼 2014/11/05 15:54 ShowMeHow様 ご回答ありがとうございます。 早速試してみたのですが。。 読取専用で開いた場合、 Set d1 の箇所でFalse Set d2 の箇所でデータの表示と書込みを行う権限が無い旨のエラー 普通に開いた場合(変更権限有り)、 Set d1 の箇所でFalse Set d2 の箇所でTrue となりました。 結局なにをどう評価して「今読み取り専用で開かれてる」となるのでしょうか。 権限が無いエラーを拾う感じなのでしょうか。 いまいち理解できずにおります。 質問者 補足 2014/11/05 16:28 失礼しました。 普通に開いた場合(変更権限有り)、 Set d1 の箇所でTrue Set d2 の箇所でTrue となりました。 ということは、d1でFalseだったら読み取り専用で開かれたと 判断しても大丈夫なのでしょうか。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピューターデータベースその他(データベース) 関連するQ&A Access VBAよりプロセスチェック お世話になります。 Accessにてツールを作成しており、集計結果(クエリの結果)を Excelへ出力させようとしております。 処理を実行する前のチェックとして、Excelのプロセスがあるか のチェックを行いたいのですが、可能でしょうか。 ご教授の程、宜しくお願い致します。 Accessランタイムについて お世話になります。 Accessにてツールを作成し、Accessランタイム2010がインストールされているPCで利用させたいと考えております。 そこで質問ですが、Accessランタイムでは新規にテーブルやフォームは作成できないようですが、テンポラリテーブルを作成することは可能なのでしょうか。 例えば、VBA内にてテーブルを作成するSQLを実行するような場合です。 ※作成するツールはExcelファイルをインポートし、そこで作成されたテンポラリテーブルで色々集計して、最終的にExcelエクスポートさせようとしてます。 ご教授の程、宜しくお願い致します。 ACCESSでデータ削除すると「読み取り専用」と出る WINXP、ACCESS2003 ACCESSで二つのテーブルの差分のクエリを作りデータの修正を行っています。 差分のクエリをそのまま、すべて選択してDeleteボタンでデータを削除しようとすると「データは読み取り専用です」と表示され、削除することができません。 レコードを選択して右クリックしても「削除」「新しいレコード」の箇所がグレーになっていて利用できません。 どこかが、読み取り専用になっているのでしょうか? ちなみに、元のテーブルは削除できます。 よろしくお願いします。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム Access2007 クエリが読み取り専用になってしまう Access初心者です。 3つのテーブルのデータ(全て)をクエリに抽出して、そのクエリからフォームを作成し、フォーム上からデータ入力をしていきたいと考えております。 しかし、上記方法で作成したフォームは入力ができなく、ヘルプで調べたらフォームが読み取り専用になっているようでした。 いろいろ検索したのですが、どうやら更新可能なクエリにする必要があるみたいなのですが、その方法が分かりません。 宜しくお願いします。 ACCESS2000 VBAを使用して最適化したい ACCESS2000を使用しています。 VBAでデータベースの最適化/修復を行いたいと思っています。 連番をリセットしたいのですが、可能でしょうか? ツールからオプションでチェック入れることはわかりますが・・・ たとえば、データを入力しクエリで他テーブルに追加し 新規でまたこのテーブルにデータを入力していく作業があります。 クエリで他テーブルに追加した時点で、テーブルのデータを作成し、最適化して全くの新しいデータを1番からの連番で入力したいです。 出来ますか? Access インポート時のエラー処理 お世話になります。 Access2010 csvファイルをインポートするツールを作成しました。 フォーム上に設置した「インポート」ボタンを押すと、所定のcsvファイル をインポートします。 ※事前にtempテーブルを作成しておき、そこにインポートします。 DoCmd.TransferText acImportDelim, , temp, 所定のパス, True <質問> インポート時に、稀にデータ変換エラーとなります。 データ変換エラーに限らず、エラーが発生した場合はエラーメッセージを 表示し、処理を中断したいのですが、どのようにすればよいのでしょうか。 ※データ変換エラーの場合、特にエラーメッセージも表示されず、普通に 処理が進んでしまうので、エラーが出ていたことすら気づきません。 インポート後、作成されたエラーテーブルの有無チェックすればいいかと 思ったのですが、それだとどのような内容のエラーなのか、そのエラー テーブルを開いてみないと分かりません。 ※当該ツールの使用者はAccess Runtimeを使っているので、エラーテーブル の中身を確認することは出来ません。 エラーコードを拾ってそれに該当するエラーメッセージを表示させることに なるかと思うのですが、その拾い方やエラーコードが分からずにいます。 ご教示の程、宜しくお願い致します。 Accessでのテーブル作成や追加クエリなどについての質問です。 ◆テーブル作成クエリで作成するテーブルにオートナンバー型のフィールドを設けたい。◆ (ナンバーが必ず1から振られることが条件) ※補足※ あらかじめオートナンバー型を含むテーブルを用意し、追加クエリ&削除クエリを使用すればよいという意見もありますが、この場合オートナンバー型のフィールドはカウントをアップし続けてしまう為断念。 ★教えてほしい事★ テーブル作成クエリからオートナンバー型のフィールドを作成できるのか? もしくは あらかじめオートナンバー型を含むテーブルを用意し削除クエリでテーブルのデータを空にしてから追加クエリでデータを入力しても必ずオートナンバー型のフィールドの先頭値は"1"から始まるようにできるか? 宜しくお願い致します。 Access 削除時にレコード有無チェックは必要? お世話になります。 Access2010 10個あるテーブルでそれぞれ社員番号を条件にVBAにて削除クエリを 実行してます。 メインのテーブルである社員テーブルには全社員が登録されて いるので、無条件に削除クエリを実行しておりますが、他の9個に ついては必ずしも該当レコードが存在するとは限りません。 なので、他の9個のテーブルについては削除クエリを実行する前に、 削除する社員番号が存在するかをチェックした上で(社員番号をキーに FindFirst)、存在したら削除クエリを実行してます。 今更ですが、わざわざチェックする必要があるのかな?と。。 元々は「社員番号が存在しないテーブルに対して、わざわざ削除クエリ を実行する意味がない」と思い、チェックするようにしました。 なんとなく、無条件で削除クエリをやるよりは 該当レコード有り? Yes ⇒ 削除クエリ実行 No ⇒ 何もしない とやった方がキレイかなと。 しかし、削除するレコードの有無に関係無く削除クエリを実行しても よいのでは?と思った次第です。 要するに該当するレコードが無ければ削除されないし、あれば削除 されるし。 一般的に削除クエリを実行するときは、無条件にやるものなのでしょうか。 ご教示の程、宜しくお願い致します。 accessマクログループの全マクロの実行方法 お世話になります。 現在、顧客のデータベースを作成しております。DBは名前、住所等の連絡先を入力したテーブルを元に下記のクエリやマクロを作成しています。取引がない顧客等はメイン名簿テーブルから削除して、メインテーブルの構造をコピーした、削除テーブルに入れるようにしたいと考えています。 そこで下記のテーブル、クエリ、グループマクロを作成しました。グループマクロは作成したクエリ3つで構成されています。各アクションクエリは一個一個は正常に作動するのですが、グループマクロを実行しますと、1行目のクエリしか実行されません。実行方法はマクロの画面で更新ボタンを押しても、フォームに削除というボタンを作成してクリック時にグループマクロを実行させるよう設定した場合の両方で起きます。 グループマクロに登録されているマクロを全て実行するにはどうしたらいいのでしょうか。色々調べると、グループマクロは1行目しか実行できないようですが、全て実行する簡単な方法はありませんか?できればVBAではない方法を希望します。大変お手数ですがどうぞ、よろしくお願い致します。 ・(テーブル)メイン名簿(以下、名簿tblとします) ⇒フィールド:名前、郵便番号、住所、電話、メモ欄、削除の有無、削除処理日 ・(テーブル)削除テーブル(以下、削除tblとします) ⇒フィールドは上記と同じ ・(更新クエリ)削除処理日追加 ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、「削除処理日」に処理日が 入力されるようにdate関数を設定しています。(date()) ・(追加クエリ)削除tblへ追加 ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、「削除tbl」へそのレコードを、 追加する。 ・(削除クエリ)名簿tblからの削除 ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、名簿tblからそのレコードを、 削除する。 ・(マクログループ)削除処理(上から順番に実行希望) マクロ名 アクション クエリ名 削除処理日追加 クエリを開く (更新クエリ)削除処理日追加 削除tblへコピー クエリを開く (追加クエリ)削除tblへ追加 名簿tblからの削除 クエリを開く (削除クエリ)名簿tblからの削除 以上 Accessで確認メッセージを表示させない方法 使用PC Windows7 SP1 Access2003Runtimeを使ってアクセスソフトを動かしています。 削除クエリでレコードを削除する際に、 「削除クエリを実行すると、テーブルのデータが変更されます」 と確認メッセージが表示されます。 又、「はい」で進みますと、 「○○件のレコードが指定したテーブルから削除されます。」 と再度確認メッセージが表示されます。 これらの確認メッセージを表示させないように、出来ないでしょうか? 開発環境では、 ツール→オプションの「編集/検索」タグ内の確認は、 全てチェックを外してあります。 よろしくお願いいたします。 ACCESS97で テーブルの更新について ACCESS97で 相談したいことがあります。 定期的にあるテーブルを作成する時、 (1)テーブル作成クエリーを毎回 実施する方法と (2)元々テーブルを作っておいて 毎回、全件削除クエリー、全件追加クエリーを実行する 方法などがあります。 得られる結果は同じです。 この時、毎回テーブル作成クエリーを実施すると ムダにアクセス自体のファイルが大きくなったり データベースが壊れることが多い と聞いたので (2)の方にしたのですが、処理時間が(1)よりも掛かってしまいます。 そこで、上記(1),(2)に関する方法はどちらの方がお勧めでしょうか? ※ 件数は100000件 くらいあります。 Access クエリで新規テーブルを作成 お世話になります。 クエリで新規テーブルを作成することは可能でしょうか。 テーブル作成クエリだと、既存のテーブルで抽出した内容で新規に作成する ことになるかと思います。 今回はまっさらな新規のテーブルを作成したいところです。 例えば、フィールド名とデータ型が ID オートナンバー 受注日 日付型 商品 テキスト型 の場合だと、どのようになりますでしょうか。 ご教授の程、宜しくお願い致します。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム ACCESSの学び方について 初歩的な質問で失礼いたします。 私は人から教えてもらったり参考書をみたりしてACCESSを勉強している者です。まだ全然駄目なんですが、自分のやり方が正しいかどうか教えて下さいm(__)m たとえば、シンプルな顧客情報入力画面を作成したいとき、私は (1)テーブルを作成(T_1) (2)T_1を基に入力フォームを作成(F_1) (3)T_1にデータが蓄積されていき、それを基に検索したり削除したりする。 ・・といった感じです。 しかし、本やネットで見てみると他にも色々方法がありますよね。 たとえば、 (1)テーブルを作成(T_1) (2)T_1を基に入力フォームを作成(F_1) (3)F_1の追加ボタンを押下すると、追加クエリと削除クエリが実行される。 追加クエリ・・・新たなテーブルが作成される(T_2) 削除クエリ・・・T_1のデータを削除 (4)T_2にデータが蓄積されていき、それを基に検索したり削除したりする。 はたまた、こんなまどろっこしいことしないで、フォームを作って それに長いプログラムをあてはめる(InsertRecordメソッドとか?) があるかと思われます。 長くなって申し訳ありませんが、質問をまとめます。 <1>テーブルやフォームをわざわざ作って組み立てていく方法はあまり好ましくないのでしょうか? <2>テーブルやフォームを作成して組み立てていく場合、上の例ではどちらが正解なのでしょうか。また、もっとこうしたほうがいい!というアドバイスをいただけたら幸いです。 アクセスVBAでの別アクセス呼び出しの記述について 作成したいテーブルが大きすぎて、2Gをあっという間に超えてしまいます。 なので、別のアクセスMDBも併用しつつ処理を実行しようかと思うのですが、 下記のように書いています。すると、まず、一つ目のDB(VBAを書いているほうのDB)でのtestクエリは実施され、TEST1DBが呼び出されるところまではいくのですが、TEST1DBにのっているtest2というクエリはうごきません。 どのように記述すればよいのでしょうか??ど素人でもうしわけありませんが、 どうぞよろしくお願いします。 Option Compare Database Sub test() DoCmd.OpenQuery "test" fl_name = "MSAccess C:\xx\test1.mdb" Call Shell(fl_name, 1) DoCmd.OpenQuery "test2" End Sub また、あわせて質問なのですが、 テーブル作成クエリなので、「テーブルが削除されます」とかがでます。 自動バッチにしたいので、いちいち確認しないでサクサクと次へ進んでほしいのですが 解決策はあるのでしょうか? よろしくお願いします あと、いつも迷うのですが、、アクセスのフォームとかを書くときに使っているVBAは、 カテゴリー選択にないので、、VisualBasicを選んでいいんでしょうか?? 読み取り専用では困る お願いします。アクセスで作成されたデータを譲り受けたのですが、読み取り専用に設定されているみたいで、読み取りのチェックをはずしても元にもどります。テーブルを並べ替えたりクエリを使いたいので困っています。いただいた方とは連絡がとれずこれでは、使い物にならないと悩んでおります。良い解決方法等アドバイスお願い申し上げます。 アクセス97マクロ:テーブルデータ削除の条件設定方法について教えてください。 どうぞ教えてください。 毎月仕事上である処理が終わった後に、いくつかのテーブルのデータの一部を削除する作業があり、これをマクロで自動的に処理できるようにしようと考えました。 そこで、最初は削除したいテーブルごとに削除クエリを作り、Where条件として削除したいデータの年月を尋ねるようにし、これをマクロで「クエリの実行」として複数の削除クエリを一気に実行してまとめて処理しようとしました。 上記でも処理はうまくいきます。 ただ、もしクエリを使わずにマクロだけでこのような処理が可能なのであれば、クエリの数も減るため、できればそうしたいと考えています。 その場合、マクロデザイン画面で「テーブルを開く(テーブル名入力)」→「レコードの選択」→「削除」とすれば削除はできると思うのですが、全てのレコードを削除するわけでなく条件に合致する一部のデータだけ削除したい今回のような場合、Where条件(年月)をマクロ上で尋ねるor設定するにはどうしたらいいでしょうか? <<ACCESS2000>>マクロでクエリを連続実行したいのですが、、、 宜しくお願いします。 複数のクエリを連続実行させる為にマクロを使ったのですが、 クエリを実行する際、たとえば、テーブル作成クエリーだと実行前に「現在あるテーブルを削除していいか?」や、 実行後に「何件作成しました」などというボックスが表示された際、自動的に「OK」をクリック できるようにしたいのですが、どのようにすればよいのでしょうか? 教えてください。 ACCESS VBA ACCESS2000を使用しています。 行いたい処理があるのですが方法がわかりません。 方法を知ってる方がいればアドバイスの程よろしくお願い致します。(VBAでも全然OKです) リストボックスのリレーション 例えば左側のリストボックスで4種類の選択肢のいずれかを選び、それに応じたテーブル内容を右側のリストボックスに表示する方法 (右側に表示させたいテーブル4種類は既に作成しています) ↓行いたい処理 季節の商品一覧から「夏の商品一覧」を選んだ場合 左リストボックス 右リストボックス ------------ -------- |春の商品一覧 | |Tシャツ| |夏の商品一覧 | |短パン | |秋の商品一覧 | |~~~ | |冬の商品一覧 | |~~~ | ------------ ACCESSのテーブルのデータ追加VBA (サーバーのORACLEのデータベースに追加) ACCESSのAテーブルのデータをBテーブルに追加する。追加クエリを使わずVBAで作成したいのですが、どうすればよいのでしょうか。 追加クエリだと件数が多いのか、タイムアウト、ログオーバーのような エラーになってます。 A,Bテーブルは同じレイアウトです。 Bテーブルは空です。 また、サンプルが出ているようなサイトを探しているのでですが どこか良いACCESS専用の質問サイトがありますか。 ACCESS CLUBはなんだか私には使いづらいので他のサイトがあれば宜しくお願いします。 Access VBA から Outlook 呼び出しでオートメーション Access VBA から Outlook 呼び出しでオートメーションエラーが発生することがあります。 環境は Access 2003、Outlook 2003 で Access VBA で CreateObject 等を使い Outlook.Application オブジェクトの作成、もしくは GetObject を使って既存のインスタンスを取ろうとすると「オートメーションエラー システムコールに失敗」というエラーが出るときと、出ないときがあります。 具体的には前処理でテーブル作成クエリの実行を挟むとエラーが発生し、挟まないとエラーが発生しません。 オブジェクトの作成の仕方が悪いのかと思い、いろいろと試しましたが結果は同じでした。 テーブル作成クエリはリンクテーブルで覗いているテーブルをローカルのテーブルとして丸コピーしてくることを目的としており、結構サイズが大きく、作成にも少し時間がかかるものです。 どうも決定的な手がかりが見つからず困っております。何かアドバイスございましたらお聞かせください。よろしくお願いいたします。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター データベース SQL ServerOraclePostgreSQLMySQLNoSQLその他(データベース) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
度々のご回答ありがとうざいます。 了解です。 とりあえず、影響無いことを検証したいと思います。 助かりました!