2016-08-18 4 views
0

私はMicrosoft Accessを初めて使用していますが、先週に行ったように学習しています。しかし今、私は立ち往生しています。私は、ユーザーが自分のデスクトップから現在のデータベースバージョンをサーバー上のデータベースバージョンと比較して使用しているかどうかをチェックするVBAコードを書いています。バックエンドに各ユーザーのバージョンの数値を保持するテーブルを作成し、サーバー上の最新バージョンの数値も格納するテーブルを作成しました(変更時に管理者によって変更されました)。現在のコードは、値を比較して、開いたコピーが最新バージョンであるかどうかを判断します。そうでない場合は、サーバー上のバージョンを開き、バックエンドテーブルのユーザーのバージョンを変更します。しかし、私はデスクトップ上のコピーを変更したいので、次回ユーザーがコピーを開くときには、コードがバージョンが "更新された"ことを識別するので、それは新しいバージョンです。Access VBAを使用すると、サーバー上のバージョンではないデスクトップ上のファイルが上書きされます

My.Computer.FileSystem.CopyFile()を使用すると、1つのファイルを新しい場所にコピーしてそこにあるファイルに上書きすることができますが、これを使用すると開いているファイルを上書きし、.CopyFile()コマンドを生成しているコードを実行していますか?私は既に.CopyFile()コマンドの前にアクセスしているサーバー上のバージョンを持っていますが、実際に実行されるかどうかわかりません。私は、サーバーバージョンが開かれた後にユーザーがユーザー名とパスワードを再入力する必要があるという事実が好きかどうかもわかりません。誰もが知っているユーザーなしでデスクトップ上のファイルを上書きする方法を知っていますか?

+0

なぜアップデートが利用可能で、インストールされるのかを隠そうとするのはなぜですか?ユーザーにこれが起こることを伝えるプロセス、フロントエンドを閉じて新しいバージョンをインストールして再オープンするプロセスです。 – dbmitch

答えて

1

私は既に以前のデータベースでこれを行いましたが、いくつかの変更を加えれば、あなたのニーズに合ったものにすることができます。

私はあなたがバージョンをチェックし、利用可能な最新のものか古いものかを見つけた時点から始めます。

If Not updated Then 
    Select Case MsgBox("An update is available for your client!!!" _ 
    + " You would be able to use this client version but without new features and support!" _ 
    + " Do you want to update now?", vbYesNo Or vbInformation Or vbDefaultButton1, "Available Update") 
     Case vbYes 
      'Call MsgBox("Please contact your administrator to receive your new client version!!!", vbExclamation Or vbDefaultButton1, "Available Update") 
      Shell "cmd /c ""<whatever path you want>\doupdate.cmd"", vbHide" 'calls a cmd script to do the dirty job of copy -> see below 
      Application.CloseCurrentDatabase 'closes the current database 
      Exit Sub 
     Case vbNo 
      <whatever you want on no> 
    End Select 
End If 

あなたは上記のコードで選択を削除することができ、それが毎回更新された変数は、ユーザに尋ねることなく、Falseで実行されます。

CMDスクリプトコードは以下の通りです:

@Echo OFF 

SLEEP 3 
copy "\\server\groups\<whatever path>\file.accde" "%userprofile%\Desktop\file.accde" /Y 
call "%userprofile%\Desktop\file.accde" 
exit 

上記のスクリプトがあるため初めに待って忙しい3秒で確実に完璧ではないですが、私はアクセスがクローズする時間を持っていることを確認したいです。

上記のコマンドまたはコマンドMy.Computer.FileSystem.CopyFile()をデータベースのクローズイベントに追加することもできますが、その場合は更新はユーザーの後に行われます

この場合、私は、他の理由でデータベースとは別に更新するスクリプトを望んでいましたが、更新のためにvbaを使用しても主な原則は同じです。上書きする前にファイルを閉じる必要があります

+0

これを試してみます。私が現時点で持っているのは、1つのデータベースが2番目に開いていてそれ自体が閉じていても動作します。 2番目のデータベースはチュートリアルとして機能し、ローカルコンピュータ上のコピーを更新します。 – StarkAE

+0

あなたがやっていることは上記と似ていますが、上記の方がより洗練された解決策であるという違いがあります。実際には、使用されているファイルを上書きすることはできません。上記に加えて、ユーザー名とパスワードを引数として渡してから、データベースを再度開くときに自動的に接続することができます。それからあなたはあなたが望む機能を持っています。 – Blenikos

関連する問題