• 締切済み

バックアップをするたびに当日の日付を付加したファイル名で

 下に作成中のコードを載せておきました。この形式でバックアップをとろうと思っているのですが、バックアップを取るとバックアップを取った日付がファイル名に付加されるようにしたいのです。例えば今日バックアップを取れば「20060531backup.mdb」という感じでバックアップがとられ、同じ日にバックアップを取ればそこに上書きされ、6/1にバックアップを取れば新たに「20060601.mdb」というファイルができるようにしたいのです。元になるテーブルは「T許可書」です。入力文字数の関係で一部おかしくなっていますが、わかる方ならわかると思います。よろしくお願い致します。 Private Sub データバックアップ_Click() Dim curPath As String   Dim rtn As String    Dim cn_o As ADODB.Connection Dim cn_b As ADODB.Connection Dim rs_o As ADODB.Recordset Dim rs_b As ADODB.Recordset Set cn_o = CurrentProject.Connection Set cn_b = New ADODB.Connection curPath = CurrentProject.Path & "\" cn_b.ConnectionString "Provider=Microsoft.Jet.OLEDB.4.0;" "Data Source=" & curPath & "backup.mdb" cn_b.Open Set rs_o = New ADODB.Recordset Set rs_b = New ADODB.Recordset rs_o.Open "T許可書", cn_o, adOpenDynamic, adLockOptimistic rs_b.Open "T許可書", cn_b, adOpenDynamic, adLockOptimistic Do Until rs_b.EOF rs_b.Delete rs_b.MoveNext Loop Do Until rs_o.EOF rs_b.AddNew rs_b!申請日 = rs_o!申請日 rs_b!申請者 = rs_o!申請者 rs_o.MoveNext rs_b.Update Loop End Sub

みんなの回答

noname#60992
noname#60992
回答No.3

No2です。 コネクションを見落としていました。 バックアップmdbをほかの名前でコピーしておけばよいだけの話でしたね。 filecopy "backup.mdb", format(date, "yyyymmdd") & ".mdb" を最後に加えるだけかな。

DT50
質問者

お礼

ご回答ありがとうございました。 メモ帳に 「copy H:\許可書\許可書\許可書.mdb H:\許可書\許可書\許可書_%1.mdb」を記述し、「cp.bat」としてバッチファイルを作成しました。その上で以下のコードをVBAに書き込み、無事完成しました。 みなさん、どうもありがとうございました。 Dim RetVal Dim rtn As String 'メッセージボックスで押されたボタンの情報を入れる変数rtnを定義 'エラー処理 On Error GoTo Err_データ復元_Click 'バックアップを実行するか確認し、「はい」なら実行を開始、「いいえ」なら中止する rtn = MsgBox("バックアップを実行しますか?", vbYesNo + vbQuestion, "確認") If rtn = vbYes Then 'バッチファイルを実行し、「許可書[バックアップ当日の日付].mdb」で保存されるようにする RetVal = Shell _ ("H:\許可書\許可書\cp.bat " & Format(Date, "yyyymmdd"), 1)

noname#60992
noname#60992
回答No.2

アクセス内での話ですね。 ソースはテーブルのコピーを同じmdb内にとっているだけですよね。 これを別mdbとして保存したいということであれば、transfertextなどを使ってテーブルをテキストデータとしてエクスポートするのが一番手っ取り早いと思います。 どうしても、mdbとしてバックアップを取りたいなら、 No1の方がおっしゃっているような方法をとるのがよいかな。 もしくはadoxにてmdbをcreateして、テーブルをつくって、データをいれてというのが手順になると思いますが、手間はかかるし、バックアップの時間もかかるしあまりお勧めしません。 mdbとは別にバックアップを考えたほうが効率よく行うことができると思います。 余計な世話だと思いますがadoでレコードを1件ずつ書いたり、消したりするのはデータが少ないうちはよいかもしれませんが、多くなってくると時間がかかります。 クエリを使ったり、ADOでもSQLでconnection.execute などを使ったほうがよいと思います。

DT50
質問者

お礼

ご回答ありがとうございました。 メモ帳に 「copy H:\許可書\許可書\許可書.mdb H:\許可書\許可書\許可書_%1.mdb」を記述し、「cp.bat」としてバッチファイルを作成しました。その上で以下のコードをVBAに書き込み、無事完成しました。 みなさん、どうもありがとうございました。 Dim RetVal Dim rtn As String 'メッセージボックスで押されたボタンの情報を入れる変数rtnを定義 'エラー処理 On Error GoTo Err_データ復元_Click 'バックアップを実行するか確認し、「はい」なら実行を開始、「いいえ」なら中止する rtn = MsgBox("バックアップを実行しますか?", vbYesNo + vbQuestion, "確認") If rtn = vbYes Then 'バッチファイルを実行し、「許可書[バックアップ当日の日付].mdb」で保存されるようにする RetVal = Shell _ ("H:\許可書\許可書\cp.bat " & Format(Date, "yyyymmdd"), 1)

  • miyuyu
  • ベストアンサー率61% (30/49)
回答No.1

私だったらですが・・・ 雛形MDBにINSERTした後、FileCopyします。 MDB丸ごとならそのままFileCopyします。 FileCopy前に重複するファイルが無いか等は当然チェックしてからです。 #ソースは見ていませんのであしからずです。

DT50
質問者

お礼

ご回答ありがとうございました。 メモ帳に 「copy H:\許可書\許可書\許可書.mdb H:\許可書\許可書\許可書_%1.mdb」を記述し、「cp.bat」としてバッチファイルを作成しました。その上で以下のコードをVBAに書き込み、無事完成しました。 みなさん、どうもありがとうございました。 Dim RetVal Dim rtn As String 'メッセージボックスで押されたボタンの情報を入れる変数rtnを定義 'エラー処理 On Error GoTo Err_データ復元_Click 'バックアップを実行するか確認し、「はい」なら実行を開始、「いいえ」なら中止する rtn = MsgBox("バックアップを実行しますか?", vbYesNo + vbQuestion, "確認") If rtn = vbYes Then 'バッチファイルを実行し、「許可書[バックアップ当日の日付].mdb」で保存されるようにする RetVal = Shell _ ("H:\許可書\許可書\cp.bat " & Format(Date, "yyyymmdd"), 1)