システムwiki

msアクセス内からのタスクスケジューリング?

Mikefro 受付中 最終更新日:2022-05-15 09:45

こんにちは.

Accessでスケジュールされた仕事をしようとしています.一部のジョブは、他のユーザーが同時に使用する可能性のあるtableにデータをインポートします(たとえば、外部ソースからの1時間ごとのデータプルです).私の調査によると、誰もがWindowsタスクスケジューラを使用してこれを行っているようです.ただし、Accessを開始し、マクロ/関数を実行してから、Accessを終了しているようです.

私の質問は、サーバーが複数のユーザーを持つ分割システム(フロントエンドとバックエンド)としてセットアップされ、常に実行されている場合、このモデルは問題を引き起こしますか?不思議に思うのはAccessの起動です.Accessを予期せず終了すると、ロックファイルが保持され、データベースが読み取り専用モードで開くことがあります.スケジュールされたジョブが、実行中のアクセスプロセスによってデータベースがロックされるのと同じ課題に遭遇するかどうか疑問に思いました.

ここでのコミュニティの集合的な経験に感謝します.

ありがとう、

マイク

返信リスト(回答:8)

7 #
TomvanS

>Accessを予期せず終了すると、ロックファイルが持続し、データベースが読み取り専用モードで開くことがあります

これは、このフォーラムでよく議論されているバグであり、個別に処理する必要があり、プロジェクト全体を考慮する必要はありません.

別の(仮想)ワークステーションが最善のアイデアだと思います.再起動時にドメインアカウントに自動的にログインするように設定し、Windowsタスクマネージャーを使用します.車輪の再発明をする必要はありません.

アクセスは本質的にマルチユーザーであるため、問題が発生することもありません.

応答7# ->にスキップ
5 #
Mikefro

そうではありません. これをどうやってやるのかと思っただけです. 環境に依存せずにプログラムでデータベースへの接続を開く方法を見たことがありません. これは、データベースオブジェクトと対応するレコードセットオブジェクトを作成するときに組み込まれています. Set db=currentDBのバリアントだと思います. 他の技術者との長い間忘れられていた過去から、サーバーへのある種のオープンな接続があり、資格情報を介して特定のデータベースインスタンスに接続し、それからあなたは行く準備ができていました. アクセスがどれだけ隠されているかは理解できましたが、今は裏を覗く必要があるようです.

正しい検索用語を使用していないと確信しています.

8 #
theDBgu

こんにちはマイク.前述のような潜在的な問題を回避する1つの方法は、スケジュールされたタスクを実行するためだけに、個別のAccessFEを作成することです.

応答8# ->にスキップ
6 #
Mikefro

ありがとう、DBGuy.

OK、わかったと思います. 確認のために、別のaccdbファイルに次のようなモジュールを作成します

Dim objAccess As Access.Application
DimdbAsDAO.Database
SetobjAccess= NewAccess.Application
Setdb= objAccess.DBEngine.OpenDatabase(strDBPath、False、False)
'ここで、strDBPathは私のaccdbファイルを指し、他のパラメーターを把握します

次に、データを取得し、rs.addnew/rs.updateを実行してから、

db.close

Set db= none

DoCmd.quit

それから私はトムが言ったようにスケジューラーをします.

これは私のグーグルで私を助けました. そして信用を与えるために、これはautomaticExcel.comからです. よろしくお願いします.

応答6# ->にスキップ
4 #
theDBgu

やあ.それが一つの方法だと思います.私が提案したのは、スケジュールされたタスクに対して実行する必要のある機能のみを使用して、ブランク/シェルFEを作成することだけです.

たとえば、現在のFEに、データをプルするクエリがあり、クエリデータをExcelにエクスポートするマクロがあるとします.したがって、必要なのは、リンクされたtable、クエリのコピー、およびマクロのコピーを備えた新しいFEだけです.それでおしまい.元のFEの他のすべての部分を関与させる必要はありません.

ちょうど私の2セント...

応答4# ->にスキップ
2 #
Mikefro

それがあなたの言っていることだと思いました. しかし、私は新しいFEを作成する方法を見つけていません.私はまだアプリを分割していません-私はそれが何であるかを確認するために早い段階でテストversionを行いました. FEの複数のversionを使用できるかどうかは調べていませんでした. 残念ながら、これが可能だとは知りませんでした. フォームを介してフローを分割する役割を作成する多くの作業を回避できたはずです. 特定のFEの役割に固有のフローを作成することもできました.

同じバックエンドに複数のFEを作成する方法を確認する必要があります. 私がグーグルで検索したとき、私が見つけたのは私がリストした方法だけでした. だから私はあなたがFEとして何を意味するのか誤解したと思いました. 手順を確認できる検索用語があれば、よろしくお願いします.

応答2# ->にスキップ
1 #
TomvanS

あなたはそれを考えすぎていると思います.新しいFEを作成するには、Windowsエクスプローラーでコピーして貼り付けます.

次に、通常、/cmdコマンドラインオプションを使用して特別なプロセスを呼び出します.
msaccess.exethe.accdb/cmd DoThis

次に、スタートアップコードで、「DoThis」のcommand $を確認し、そのプロシージャを呼び出します.

応答1# ->にスキップ
3 #
Mikefro

D'oh! それは非常に理にかなっています. ありがとう. 多くの義務があります.

マイク