-1

インターネットで見つけた多くのコードには、変数が定義および設定されていることに気付きました。

Dim db as Database Dim rs as Recordset Set db = CurrentDB Set rs = db.OpenRecordset

これを次のように書きます。

Dim rs as Recordset Set rs = CurrentDB.OpenRecordset

上部に 2 行Set db = Nothing、最後に 1 行のコードを保存します。何百ものサブシステムと関数が実際に追加される可能性があります...

しかし、ほとんどのコーダーはどちらを優先するのでしょうか? どちらか一方を使用する実際の理由はありますか? 全体を実際に定義して綴ることに利点はありますか?? 私のやり方でそれを行うことで、さらに数分間心皮トンネルを食い止める以外に、本当に節約できることはありますか?

4

2 に答える 2

1

実行に関しては、2 つの VBA メソッドに実際の違いはありません。ただし、 Workspace.OpenDatabaseメソッドdbを使用して、オブジェクトをローカル DAO データベースまたは外部 DAO データベースのいずれかに設定できるため、最初のバージョンはより一般的なバージョンです。2 つ目は、通常は必要なレコードセット、クエリ定義などを作業中のローカル データベースから派生させるため、よりショートカット バージョンです。以下は、外部データベースを参照する例です。

ショートカットバージョン:

Set db = OpenDatabase ("C:\Path\ToExternalDB\someotherdb.accdb")

完全なジェネリック バージョン:

Set db = DBEngine.Workspaces(0).OpenDatabase("C:\Path\ToExternalDB\someotherdb.accdb")

したがって、開発者がデータベース環境 (つまり、ローカル データベース ソースから外部データベース ソースへの移行) やワークスペースを変更した場合、開発者が最初に名前空間のみを使用していた場合、コードにこの行を追加する代わりに、簡単に行を変更できます。set db = ...CurrentDb

これは、効率 (スクリプト化されていない行) とスケーラビリティ (翻訳可能な行) の間のトレードオフの決定の良い例です。

于 2015-06-12T19:19:10.997 に答える
1

「CurrentDb メソッドは、現在のデータベースの別のインスタンスを作成します... CurrentDb メソッドを使用すると、現在のデータベースを参照するデータベース型の複数の変数を作成できます」https://msdn.microsoft.com/en-us/からlibrary/office/aa221178%28v=office.11​​%29.aspx?f=255&MSPPError=-2147217396 .
したがって、コードで CurrentDB を 1 回だけ使用する場合は、それを宣言しなくても問題ありませんが、複数回使用すると同じインスタンスにはならず、常に新しいインスタンスが作成され、奇妙なバグが発生する可能性があります。

于 2015-06-12T19:13:29.963 に答える