LoginSignup
0
4

More than 3 years have passed since last update.

ACCESSで必ず使う エクスポートしたクエリのSQLを復元する

Last updated at Posted at 2017-10-10
Sub RecoveryQueryFromExpostText()
Dim cDB As DAO.Database: Set cDB = CurrentDb
Dim oFolder, oFil, fs
Dim Q As QueryDef
Dim buf As String
Dim sr 'As ADODB.Stream
Dim ar() As String, i As Long
Dim Qname As String
Const adModeReadWrite = 3
Const adTypeText = 2
Const adReadAll = -1
'Set sr = New ADODB.Stream
Set sr = CreateObject("ADODB.Stream")
sr.Mode = adModeReadWrite
sr.Charset = "Shift_Jis"
sr.Type = adTypeText
Set fs = CreateObject("Scripting.FileSystemObject")
Set oFolder = fs.GetFolder("C:\Hoge\Hoge_Text") 'データのあるフォルダ
'クエリ
i = 0
For Each oFil In oFolder.Files
    If fs.GetExtensionName(oFil) = "txt" And Right(fs.GetBaseName(oFil), 4) = "_SQL" Then
    If Left(fs.GetBaseName(oFil), 1) <> "_" Then
    ReDim Preserve ar(0 To i)
    ar(i) = oFil.Path: i = i + 1
    End If
    End If
    Next
    Set fs = Nothing: DoEvents
    sr.Open
    For i = LBound(ar) To UBound(ar)
    sr.LoadFromFile ar(i)
    Debug.Print ar(i)
    'Do While Not sr.EOS
     '次の行を読み取る
    buf = buf & sr.ReadText(adReadAll) '& vbCrLf
    'Loop
    Set fs = CreateObject("Scripting.FileSystemObject")
    Qname = Replace(fs.GetBaseName(ar(i)), "_SQL", "", 1, -1)
    Set fs = Nothing: DoEvents
    DoEvents
    For Each Q In cDB.QueryDefs
    If Q.Name = Qname Then DoCmd.DeleteObject acQuery, Qname: Exit For
    Next
    Set Q = cDB.CreateQueryDef(Qname, buf)
    cDB.QueryDefs.Refresh
    buf = ""
Next
End Sub

使用条件

Accessで必ず使うVBA ほぼ完全なエクスポート 全オブジェクト+参照設定リストをエクスポート のVBA/VBSで出力したフォルダの
第一文字目がアンダーバーではない
Shift Jisのテキストファイルで
"_SQL.txt"
となっているもの。
を対象としています。

Set oFolder = fs.GetFolder("C:\Hoge\Hoge_Text")
"C:\Hoge\Hoge_Text" これを出力したフォルダ名に書き換えてください。

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4