1

Delphiの子孫コンポーネントを介して、DBF/CDX インデックス ファイルでAdvantage Database Server 9.1 (Netware) を数年間正常に使用してきました。TDataSet(これは、統計/レポート目的で必要なレガシー データです。)

数週間前、ネットワーク オペレーティング システムを Netware から Win2K8 に切り替え、ADS 9.1 に移行しました。SELECTこれにより、サーバー データベースに対してクエリを実行するローカル クライアントからのクエリの機能が壊れていました。

たとえば、次のクエリは、ARC32 の SQL ウィンドウで Netware バージョンの ADS 9.1 で正常に機能し、ローカル接続で実行して のテーブルを解放しC:\Dataます。

INSERT INTO MyLocalDB 
  SELECT TOP 10 * FROM [\\MyServer\Data\MyRemoteDB.dbf] WHERE somecondition

代わりに、サーバーのディレクトリにマップされたドライブを使用して、同じクエリが機能しました。

INSERT INTO MyLocalDB 
  SELECT TOP 10 * FROM [S:\Data\MyRemoteDB.dbf] WHERE somecondition

これはフリー テーブルであり、データ ディクショナリの一部ではないことに注意してください。これは、格納されているサーバー上のフォルダーへの読み取り/書き込みアクセス権を持つ場所にある空きテーブルです。ローカル クライアント接続のフォルダーは完全にアクセス可能です (データへのローカル接続を使用して、アプリケーションを日常的にテストするために使用されます)。通常のアプリケーションは、クライアント上でローカル接続データまたはリモート接続データのいずれに対しても問題なく実行できます。問題なのは、サーバー データを取得するためのローカル接続からのクエリだけであり、以前は正しく機能していました唯一の違いは、OS と ADS の両方で Netware から Win2k8 に切り替えたことであり、ドキュメント (以下の引用されたヘルプ ファイルの内容を参照) によると、引き続き動作するはずです。

Windows バージョンの ADS 9.1 に切り替えた後、上記のクエリは両方とも失敗し、

エラー 7008: 指定されたテーブル、メモ ファイル、またはインデックス ファイルを開くことができませんでした。テーブル名 \MyServer\Data\MyRemoteDB.dbf (または S:\Data\MyRemoteData.dbf)。

今週、システムを ADS 10.10 にアップグレードしました (および ADS 10.10 TDataSet10.10 コンポーネントにもアップグレードしました) が、上記のクエリは依然として失敗します。

これは単に Windows バージョンの ADS ではサポートされていないのでしょうか? ドキュメントでは、最初のものが機能するように見えます。

テーブル名のパスのドライブ文字は、Advantage Local Server でのみ使用できます。NT または NetWare 用の Advantage データベース サーバーを使用する場合、クライアント側のドライブ文字が意味を持たないサーバーで SQL ステートメントが解析されるため、完全修飾パスは UNC を使用する必要があります ("\server\volume\path\table" など)。このように参照される表は、標準外の文字が含まれているため、二重引用符または [] (大括弧) で囲む必要があることに注意してください。

[]UNC パスは角かっこで適切に囲まれており、パスまたはテーブル名のどこにもスペースはありません。.dbf拡張子を追加して、または追加せずに試しました。エラーメッセージは同じままです。

4

2 に答える 2

3

独自のロックで変更が発生していると思われます。アドバンテージ データベース サーバーに変更が加えられ、独自のロックが使用されている場合に他のアプリケーションへのアクセスを完全に拒否するデフォルトの動作が作成されました。これはやや紛らわしい名前のNONEXCLUSIVE PROPRIETARY LOCKING構成設定で無効にすることができます。その構成値を1に設定すると、希望どおりに機能すると思います。

その構成設定を 1 に変更して ADS を再起動すると、ローカル サーバー接続は、サーバーが開いている DBF テーブルへの読み取り専用アクセスを取得できるようになります。

于 2013-03-22T15:36:57.367 に答える
0

(ALSではなく)リモートADSサーバーを使用していると仮定すると、この機能を取得するにはサーバー側のエイリアスを使用する必要があります。

http://devzone.advantagedatabase.com/dz/webhelp/advantage9.0/extprocs/server_side_aliases.htm

これをC:\adsserver.iniファイルに入れますMyServer(またはADSログが配置されている場所):

[ServerAliases]
Data=X:\Data

テーブルファイルX:\Dataの場所はどこですか。MyRemoteDB.dbf

ただし、これは、共有がある場合、または設定を設定した場合にのみ正しく機能しIgnoreRightsます。

サーバー側のエイリアスは、Advantageクライアントの「権利を無視する」設定と常に組み合わせて使用​​する必要があります。詳細については、データベースセキュリティのトピックを参照してください。そうしないと、ファイルの存在チェックが発生し、クライアントからのサーバー側エイリアスが使用されて失敗し、AE_FILE_NOT_FOUND(5004)エラーが発生します。

ALSの場合は、通常のWindowsファイル共有を使用できます。

于 2013-03-22T13:48:22.197 に答える