こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アクセス リンク先バックアップテーブルが重複しない

お世話になっております。

アクセスで、リンクさせたテーブルを
リンク先でバックアップをとっています。

Dim athDB As DAO.Database
Dim tdfSet As DAO.TableDef
Dim strLinkDB As String

Set athDB = CurrentDb
Set tdfSet = athDB.TableDefs("T_サンプル")

strLinkDB = Mid(tdfSet.Connect, 11)
Debug.Print strLinkDB

Set tdfSet = Nothing
Set dbDB = Nothing

'------------------------------------
Dim appAccess As Access.Application
Dim BKname As String

Set appAccess = CreateObject("Access.Application")

With appAccess
.OpenCurrentDatabase strLinkDB

.DoCmd.TransferDatabase acImport, "Microsoft Access", _
strLinkDB, acTable, "T_サンプル", "BK_サンプル_" & Format(Date, "yymmdd")

.Quit
End With

Set appAccess = Nothing

立ち上げ時に上記を実行して
リンクテーブル(T_サンプル)を、リンク先でバックアップをとる処理を設定していますが、
これだと立ち上げる度にバックアップテーブルができてしまいます。

同じテーブル名がある場合は、この処理をしない・・・としたいのですが
どのように設定すると良いのでしょうか?

ご教示のほど よろしくお願いします。

投稿日時 - 2018-03-30 15:05:02

QNo.9483372

困ってます

質問者が選んだベストアンサー

一応、動いているのを確認しています。
あまり、このような事に遭遇したことがないので
中身はあまりスマートではありませんが。
numHanteiという変数を標準モジュールに設定しています。
なお、質問のコードの中で変数の設定に一部書き間違いが
あったので直しています。では、以下で確認してみてください。





Public numHantei


Sub test11()
Dim athDB As DAO.Database
Dim tdfSet As DAO.TableDef
Dim strLinkDB As String

numHantei = 1
Set athDB = CurrentDb
Set tdfSet = athDB.TableDefs("T_サンプル")

strLinkDB = Mid(tdfSet.Connect, 11)
Set tdfSet = Nothing
athDB.Close: Set athDB = Nothing

'------------------------------------
Dim db As DAO.Database
Dim tdf As Object
Set db = OpenDatabase(strLinkDB)

For Each tdf In db.TableDefs
If tdf.Name = ("BK_サンプル_" & Format(Date, "yymmdd")) Then
numHantei = 0
End If
Next tdf
Set tdf = Nothing
Set db = Nothing
'------------------------------------
Dim appAccess As Access.Application

Set appAccess = CreateObject("Access.Application")
With appAccess
.OpenCurrentDatabase strLinkDB
If numHantei = 1 Then
.DoCmd.TransferDatabase acImport, "Microsoft Access", _
strLinkDB, acTable, "T_サンプル", "BK_サンプル_" & Format(Date, "yymmdd")
End If
.Quit
End With
Set appAccess = Nothing
End Sub









以下は上記のコードの真ん中のところの別のコードです。
これを置き換えても動くと思います。


'------------------------------------
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim tdf As Object
Dim strSQL As String

Set db = OpenDatabase(strLinkDB)

strSQL = "SELECT Name FROM MsysObjects " & _
"WHERE Name = " & """BK_サンプル_" & Format(Date, "yymmdd") & """"

Set rs = db.OpenRecordset(strSQL)
If rs.RecordCount > 0 Then
numHantei = 0
End If
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing


'------------------------------------------

エラー等がありましたら補足してください。

投稿日時 - 2018-03-30 20:32:09

お礼

ありがとうございます!!!
「判定」キーを作るなんて、発想もありませんでした!とても参考になりました!!ありがとうございました!

投稿日時 - 2018-04-02 13:32:59

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問