プロが教える店舗&オフィスのセキュリティ対策術

Aceess2003にて在庫管理の.mdbファイルを作成しました。
2人で共有すれば十分なので、ネットワーク上のHDDにそのファイルを置いて共有をテストしてみました。
すると、片方のユーザ(PC)で開いているときは問題なく二人でファイルにアクセスできるのですが、
もう片方のユーザ(PC)が先に開いていると残りの一人のユーザはファイルを開く事ができませんでした。
分かりにくいかもしれませんので、以下に状況をまとめてみます。

・mdbファイルを共有したいPCの台数は2台
・各PCのユーザーアカウントは別々である(仮にA,Bとします)
・Aはデータベースの製作者である
・Aが共有HDD上のmdbファイルを先に開いているときにBは同じ共有HDD上のmdbファイルを開く事ができた
・同じように先にBがmdbファイルを開き、そのままAがファイルを開こうとすると、開く事ができない
・前項で開く事ができないときの状況は「無反応」であり、何らかのメッセージが表示される事はない
・状況の発生後、再びA→Bの順番ではmdbファイルを共有して開く事はできる

要するにBがファイルを先に開いてるときはAはファイルを開く事ができないということなのですが、逆ができる以上なぜそうなるのかが分かりません。

原因に心当たりがありましたら、是非教えて頂ければ助かります。
よろしくお願い致します。

A 回答 (4件)

#1です。



先ほど回答した後で、気づいたのですが、
>・インデックスが有効範囲にありません。
もコードのエラーでは?

分割する際にフォームが開いていたなんてことないですよね?
もしくは、もう一方の端末で操作していたとか?
(これは、無いですね。分割時にテーブルを排他するはずですから)

データベーの最適化/修復後は、1回ファイルを閉じてから、再度表示し直してください。
起動時に自動で処理するものがある様なら、SHFTキーを押下したままで***.mdbを開きましょう。(マクロの実行を抑止できます)

この回答への補足

間を空けましてすみませんでした。

テーブルなどを見直して新しくデータベースを作り直しましたが、同じエラーが出てしまいます。

コードをAccess9でコンパイルしてみましたが、エラーは出ませんでした。

原因が追究しきれない部分もありますので、手作業でのリンクテーブルで運用したいと思います。

この場合、下記の様に分割してみましたが、アドバイスなど頂けたら幸いです。

元の****.mdb ---- ****_app.mdb(フォーム、クエリ、マクロ、リンクテーブルで構成)
|
       ---- ****_db.mdb(テーブルのみで構成)

****_db.mdbはネットワーク上のHDDに置いて、各PCから****_app.mdbでアクセスしテーブルを直接書き込みさせます。

暫くテストしながら運用してみたいと思います。

補足日時:2007/06/29 11:02
    • good
    • 0
この回答へのお礼

丁寧なご回答、ありがとうございます。

No.3,4について取組んでみます。

ちなみに、分割後の****.mdbファイルのテーブルにはリンクのマーク(⇒)はついていませんでしたので、うまく分割できていないようです。

教えて頂いた手順をまずは試してみて、修復作業がうまくいけばよいのですが、
うまくいかないようでしたら、整理のつもりで1から作りなおしてみようかとも思います。(フォームやレポート等の"飾り"の部分は流用します)

共有の問題から、分割の質問になってしまってありがたくも申し訳ない感もありますが、
結果について少々時間を頂きますがご報告させていただきます。

お礼日時:2007/06/21 08:42

こんにちは。

#1です。

どんどん深みにハマル様であせりますが…頑張りましょう。
元のファイルがbackupされていれば、後はチャレンジあるのみです。


>・インデックスが有効範囲にありません。
分割操作中に発生したと言うことですね。
分割時の****_be.mdbの保存先指定は、ローカルのDISKでしょうか?
もし、ネットワークドライブに保存しようとしているなら、ローカルに保存しては、如何でしょう?
分割前に、****.mdbの最適化/修復(メニューの「ツール」-「データベースユーティリティー」-「データベースの最適化/修復」)を実行してください。


>一応****.mdbファイルに対して、****_be.mdbファイルは作成されました。
>元の****.mdbのテーブルはリンクテーブルではなく、通常のローカルなテーブルの様でした。
>****_be.mdbはフォームなどが無いmdbファイルになっていました。
>これが分割の完成形でよいのでしょうか?
****.mdbはテーブルがリンクテーブルになり、****_be.mdbはテーブルのみなります。

****.mdbのテーブル名の前に"⇒"(MS-ACCESS2003の場合ですが)マークが表示されていますか?

また、****.mdbのテーブルのデザイナービューを表示する際に「'**'テーブルはリンクテーブルです。~」が
表示されますか?
テーブルの数は一致してますか?
表示されている場合でテーブルの数が一致している場合には、正しく分割できています。

表示されない場合または、テーブルの数が一致しない場合は、ローカルテーブルのままです。
メッセージ表示により、分割が失敗したか、中断したと思われます。
データベースの最適化/修復して、それでもだめなら、不正なデータチェックする必要があります。
ただし、壊れているテーブルを特定しないテーブル修復もできないかも…。

>・プロシージャの呼び出し、または引数が不正です。
>とのダイアログが発生しました。

分割処理に際し、Accessがコンパイルします。
その時のエラーではないでしょうか?
フォームもしくは、モジュールのコード画面(フォーム選択後にメニューの「表示」-「コード」を選択)を表示し、
メニューの「デバッグ」-「***のコンパイル」を実行してみてください。
エラーコードの箇所でコンパイルが停止した場合、該当エラーを改修してください。
コンパイルは、エラーがなくなるまで繰り返します。


操作順まとめ
***.mdbはもとのCOPYで行います。(分割に失敗したファイルは使用しません。)
(1)***.mdbのコンパイルエラーを取り除く。
(2)***.mdbの最適化/修復を実行
(3)***.mdbを分割(保存先はローカルDisk)
(4)****_be.mdbのネットワークドライブへの配置(格納)
(5)リンクテーブルマネージャで、****.mdbのテーブルリンクのPATHを変更します。
    • good
    • 0

こんにちは。


#1です。

>テーブル名の変換処理等は…
不要です。
アプリケーション側からは、分割前も後も同じテーブル名でアクセス可能です。

>テーブル名についてあらかじめ考慮しておいた方がいい事があれば、参考意見を頂戴できればありがたいと思います。
すべてのテーブルがMS-ACCESSであれば、特に意識せずにすみます。

現状のMDBファイルのbackupを用意し、試しに分割してみてください。
テーブル名の先頭に”リンク”であることの印がつきますが、テーブル名の変更は行われません。

この回答への補足

ご回答ありがとうございます。

試しに分割を実行してみましたが、、、
・インデックスが有効範囲にありません。
・プロシージャの呼び出し、または引数が不正です。
とのダイアログが発生しました。

一応****.mdbファイルに対して、****_be.mdbファイルは作成されました。
元の****.mdbのテーブルはリンクテーブルではなく、通常のローカルなテーブルの様でした。
****_be.mdbはフォームなどが無いmdbファイルになっていました。
これが分割の完成形でよいのでしょうか?

また、この場合ダイアログのメッセージに対処する事を優先するべきかと思いましたが、
上記のメッセージからどのように進めればよいと思いますか?

プロシージャの呼び出しについては、ある程度フォーム構成を作ってから名前を変えたフォーム名があるので、引数の整合性に問題があるかもしれません。
これはエディター上で目視にて確認する方法でよいでしょうか???

また、インデックスの有効範囲については、能力不足のために理解ができませでした。

WEBで調べながら、進めて行こうと思いますが、ご参考意見を伺えたら幸いです。

補足日時:2007/06/20 16:02
    • good
    • 0

こんにちは。



>原因に心当たりがありましたら…
原因はわからないのですが、ACCESSアプリケーションを複数人で利用する場合には、
DB部分(テーブル)とアプリケーション部分(フォーム、クエリー、レポート…)を分離して利用します。

ツール⇒データベースユーティリティ⇒データベース分割ツール
でDB部分とアプリケーション部分に分離できます。

アプリケーション部分から、各テーブルへはテーブルリンクで参照しています。
ファイルの配置は、以下の様に配置します。

DB部分は、共有HDDに格納。
アプリケーション部分は利用する各PCに格納します。

※配置により、DB部分のPATHが変更されるので、配置後に以下を実行する必要があります。

ツール⇒データベースユーティリティ⇒リンクテーブルマネージャー
でリンクテーブルのPATHをDB部分のファイルPATHに変更する必要があります。

この操作は、標準でインストールされていないので、ACCESSのCDを用意
して操作してください。

各PCのアプリケーション部分を各々で開いて処理する事が可能です。

参考までです。
    • good
    • 0
この回答へのお礼

データベースとアプリケーションの分離について、過去からお勧めはあったようでしたが、
2人しか使わないからいいかなぁ、と考えていました。

丁寧にご回答を頂けたので、これを機会に分離して運用してみます。

ちなみに、データベース分割した場合リンクテーブルでの運用になるようですが、
その場合テーブル名の変換処理等はリンクテーブルマネージャーで簡単に処理できるという事でよいのでしょうか?

若しくはテーブル名についてあらかじめ考慮しておいた方がいい事があれば、参考意見を頂戴できればありがたいと思います。

では。

お礼日時:2007/06/20 08:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!