2

次のコードがあります。

Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "\Working.mdb")
obj.Run "Routine"
obj.CloseCurrentDatabase
Set obj = Nothing

私が実験している問題は、Access が他のデータベースにフォーカスを設定できないことを知らせるポップアップです。コードからわかるように、別の mdb でサブルーチンを実行したいと考えています。これを達成するための他の方法は高く評価されます。

MS Access 2003 を使用しています。

これは断続的なエラーです。これは 1 か月に 1 回しか実行されないプロダクション コードであるため、再現するのは非常に難しく、現時点では正確なテキストと番号をお伝えすることはできません。これが起こったのは2か月目です。

これは、誰かがこのデータベースまたは他のデータベースで作業しているときに発生する可能性があると思われます。

データフローは、1 つのデータベースで月に 1 回すべての「プロジェクト」を更新し、この情報を他のデータベースで利用できるようにすることです。

おそらく、「Routines」コードの最初の行が原因です: If vbNo = MsgBox("Do you want to update?", vbYesNo, "Update") Then Exit Function End If

MsgBox を使用しない別のサブルーチンを作成します。

この動作を再現できました。これは、呼び出されたデータベースにフォーカスを移動する必要があるときに、ユーザーが最初のデータベースにフォーカス ([ALT]+[TAB]) を設定した場合に発生します。「解決策」は、ユーザーを教育することでした。


これは断続的なエラーです。これは 1 か月に 1 回しか実行されないプロダクション コードであるため、再現するのは非常に難しく、現時点では正確なテキストと番号をお伝えすることはできません。これが起こったのは2か月目です。

これは、誰かがこのデータベースまたは他のデータベースで作業しているときに発生する可能性があると思われます。

データフローは、1 つのデータベースで月に 1 回すべての「プロジェクト」を更新し、この情報を他のデータベースで利用できるようにすることです。

おそらく、「Routines」コードの最初の行が原因です: If vbNo = MsgBox("Do you want to update?", vbYesNo, "Update") Then Exit Function End If

MsgBox を使用しない別のサブルーチンを作成します。


開発データベースでこれを試してみましたが、うまくいきます。これは、他のコードも開発中に正常に動作するため、何の意味もありません。

4

3 に答える 3

1

「開発」でエラーを再現できました。

「他のアプリケーションがビジー状態のため、この操作を完了できません。アクティブ化するには、[切り替え] を選択してください ....」

非常に速く点滅しているため、メッセージの残りの部分が本当に見えません。このエラーは、2 つのデータベース間の「切り替え」によるものだと思います。ユーザーを教育することで、これがなくなることを願っています。

フィリップ、あなたの答えはもちろん正しいです。「ルーチン」を事前に開発していなかったら、私はその道を選んだでしょう。

「私はこの動作を再現することができました。フォーカスが呼び出されたデータベースに移動する必要があるときに発生しますが、ユーザーは最初のデータベースにフォーカス ([ALT]+[TAB]) を設定します。「解決策」はユーザーを教育します。」Windowsではユーザーによるアプリケーションの切り替えを防ぐことはできませんので、この件はクローズさせていただきます。

于 2008-09-17T08:18:49.783 に答える
1

関数を実行する別の方法が必要な場合は、次の方法を試してください。

Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "\Working.mdb")

obj.DoCmd.RunMacro "MyMacro"
obj.CloseCurrentDatabase
Set obj = Nothing

MyMacro 」には、 Working.mdb で実行したい関数名を持つ「 RunCode 」のアクションがあります

于 2008-09-17T00:35:16.480 に答える
1

このエラー メッセージは、データベースの 1 つの状態に関連していると思います。ここで Jet 接続と Access オブジェクトを使用していますが、複数の理由 (マルチユーザー環境、LDB ロック ファイルを削除できないなど) により、アクティブなデータベースを適切に閉じて別のデータベースを開くことができない場合があります。したがって、私によると、解決策は、Jet エンジンを忘れて、別の接続を使用して「他の」データベースのデータを更新することです。

「データフローは、1つのデータベースで月に1回すべての「プロジェクト」を更新し、この情報を他のデータベースで利用できるようにすることです」と言うとき、「ルーチン」の役割は、SQLを介していくつかのデータを更新することであると思います手順または同等のレコードセットの更新。

他のデータベースへの接続を開き、(1) 対応する SQL 命令を送信するか、(2) レコードセットを開いて要求された更新を行うことにより、対応する更新を行ってみませんか?

たとえば、次のようなアイデアがあります。

Dim cn as ADODB.connexion, 
    qr as string, 
    rs as ADODB.recordset

'qr can be "Update Table_Blablabla Set ... Where ...
'rs can be "SELECT * From Table_Blablabla INNER JOIN Table_Blobloblo  

set cn = New ADODB.connexion
cn.open

You can here send any SQL instruction (with command object and execute method) 
or open and update any recordset linked to your other database, then

cn.close

これは、ODBC 接続 (および DAO.recordsets) を介して行うこともできるため、お気に入りのオブジェクトを選択できます。

于 2008-09-16T15:35:56.637 に答える