Borland Database Engine エラー $2109 初期化中にエラー
Aパソコン \d\work\Pay.exe pay.db等(今作成中のすべて入っています。)
↑
|
Bパソコン ___| ファイルの共有でつながっています。
上記のようにパソコンをハブでつないで検索(今作成中)プログラムを
立ち上げましたら,Aパソコンでは何の問題も無くプログラムが動きます。
これは当然と思われます。
Bパソコンでは上記のエラーメッセージがでます。
プログラムはBでも立ち上がりますが,Pay.db(データ)がない状態です。
この意味は推測できますが、どうしたら回避できるのでしょうか?
ヘルプをみてもどこがどうやらわからない状態です。
申し訳ありませんがご存知でしたらご教示願いたいのですが。。。
データーベースへの接続は何を使っているのでしょうか?
BDEでしたら、そのAlias等はどのようになっているのでしょうか?
このあたりが分からないとどうしようもありません。
BDE - Paradox7
TTable-TDatasource-TDBGridの構成で、データベースファイルをファイル指定(エイリアスはなし)して試験的にアプリを作ってみました。
そして、MicrosoftNetwork経由でアプリ起動してみましたが、問題ないですし、ネットワークドライブも割り当てて実行してみましたが、問題なしでした。
ただ、この構成ですと、Aパソコンでデータベースファイルを使用している状態で、Bパソコンからアクセスすると保証は出来ないと思うのですが、、、
TSessionを置いて、NetDirの設定等が必要になるのではないでしょうか?
多分ファイル共有でしたら、@っしーさんのおっしゃるように、
NetDirの設定が必要です。
ただ、この場合、Bパソコンからつながらないのは、BDEの設定で回避できると思います。
プログラムで、TTableかTQueryかTDataBaseのDataBaseプロパティに設定しているAliasがBパソコンでAパソコンのPay.dbのあるディレクトリを指しているかどうかが問題です。
HOtaさんのご指摘に追加して、、、
データベースファイルをフルパス指定しているとか。
EXEと同じ場所にデータベースファイルがあるんですから、データベースファイル名のみ指定したら走りませんか?
もしくは、"./pay.db"(ダブルクォーテーションは除く)にするとかはどうでしょう?
ファイル共有ですから、フルパス指定でするよりも、BDEのAliasを使って、
それぞれのパソコンで同じ名前でパソコンAのデーターファイルを指すように
すれば、いけます。
プログラムでは、TTableかTQueryかTDataBaseのDataBaseプロパティに
Aliasを設定します。
また憶測ですが、、、
BパソコンからAパソコンのPay.exeにはどのようにアクセスされてるのでしょうか? >万年中年さん
BパソコンにAパソコンのPay.exeのエイリアスを作成されてアクセスされているのであれば、エイリアスのプロパティを開いて、作業ディレクトリを確認してみてください。
少し難しくなると混乱してしまいます。
答えを頂戴しておいて申し訳ありませんが,
@っしーさんの書かれました,TSession NetDir の設定のことがわかりません。
エイリアスは設定していません。
DatabaseName のところは空白です。
Query1.DatabaseName := ExtractFilePath(Application.ExeName);
データベースを指定しています。(?)
まず、
1: Bのパソコンにショートカットキーを作りそれを実行してみました。
1: BからAのフォルダーに入りプログラムを実行してみました。
最初に掲載しました、エラー表示が出まして、
どちらもデータのない状態でプログラムは立ち上がります。
現在は同じやり方で
AパソコンのフォルダーにExcellで検索マクロを二つ作り
AとBのパソコンでそれぞれショートカットキーを画面のトップに作り検索マクロを
動かしています。
これと同じようにできるんじゃないかと思ったのですが,。。
HOta さんの書かれた、
BDEのAliasを使って、それぞれのパソコンで同じ名前でパソコンAのデーターファイル
を指すようにすれば、いけます。
プログラムでは、TTableかTQueryかTDataBaseのDataBaseプロパティに
Aliasを設定します。
これをやってみます。
万年中年さん、こんにちは。
TSession NetDir
はこれから行おうとしている、ファイル共有におけるシステムを
作成しようとすると、パソコンAからレコードを変更しようとしていると、
同じレコードをパソコンBからは変更できなくする機能です。
これをしていないと、おかしなことになり、プログラムが動作しなくなります。
方法は、まずマニュアルで調べてみて下さい。それから質問してみて下さい。
万年中年さん
FormのCreate時にSession.NetFileDirを設定してから、DataSetをOpenしてみてください。
procedure TForm1.FormCreate(Sender: TObject);
begin
Session.NetFileDir := '\\{サーバ名}\{データベースのPath}';
Query1.Open;
end;
//タイプミスがあれば適宜修正してください。 m(__)m
いろいろとご面倒かけます。
TSession NetDir の意味はわかりました。調べてみます。
こんな考えだったのですが?
まちがっているのでしょうか?
1:Aパソコンのフォルダーにプログラムとデータを入れて
2:BパソコンからはそのAパソコンの実行ファイルのショートカットキー
でAパソコンのプログラムを実行する。
それが・・・
こんな風に感じてきました。
Bのパソコンの場合はプログラムをBパソコンに作りAにあるデータを利用する。
プログラムをAとBにおいてそれぞれエイリアス等を設定する。
パソコンの数だけプログラムを作成するのでしょうか?
なんかトンチンカンな質問で申し訳ありません。
家に調度2台のパソコンがありますの会社と同じようにハブでつないで実験してみます。
万年中年さん、こんにちは
データーファイルを、ネットワークのファイル共有で使う場合です。
BパソコンからAパソコンの実行ファイルを実行する場合、
そのままだと、データーファイルの位置が違ってきます。
実行ファイルは、それぞれのパソコンのBDE設定を調べます。
実行するのはAパソコンの実行ファイルでも、環境はそれぞれの
パソコンになりますので、Aパソコンから見たデーターパスが
C:\プログラムパス\データーパス
でも他のパソコンから見れば、
Aパソコン\\C:\プログラムパス\データーパス
になります。このあたりを吸収するのがBDEになります。
一般的な使い方は、それぞれのパソコンにインストールシルドで
インストールします。
HOta さん
>Aパソコン\\C:\プログラムパス\データーパス
>になります。このあたりを吸収するのがBDEになります。
>一般的な使い方は、それぞれのパソコンにインストールシルドで
>インストールします。
わかりやすい解説ありがとうございます。
上記のことがわかっただけでもおお助かりであります。
会社でのパソコンはまだ解決していませんけれども、
なんとなくどういうことかがわかりましたので時間をかけて
自分なりにやってみますので一応解決としていただきます。
無理でしたらもう一度新規発言をさせていただきます。
ありがとうございました。
ツイート | ![]() |