0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クエリのSQLをVBAで一部編集(置換)する

Posted at

やったこと

クエリをエクスポートに使う際、パラメータ付クエリだとできなかったので、
特定の箇所のみクエリを直接変更して使いたいと思い、以下のようにできました。

Sub ReplaceSQLString()
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim originalSQL As String
    Dim newSQL As String
    Dim findStr As String
    Dim replaceStr As String
    
    ' 現在のデータベースを取得
    Set db = CurrentDb()
    
    ' 既存のクエリ "MyQuery" を開く
    Set qdf = db.QueryDefs("MyQuery")
    
    ' 現在のSQL文を取得
    originalSQL = qdf.SQL
    
    ' 置換する文字列を設定
    findStr = "OldValue"      ' 置換対象の文字列
    replaceStr = "NewValue"   ' 置換後の文字列
    
    ' SQL文の文字列を置換
    newSQL = Replace(originalSQL, findStr, replaceStr)
    
    ' 置換されたSQL文をクエリに設定
    qdf.SQL = newSQL

    ' 変更を保存してクエリを閉じる
    qdf.Close
    Set qdf = Nothing

    ' クエリ結果を別DBへエクスポート
    DoCmd.TransferDatabase acExport, "Microsoft Access", "DBのフルパス", acTable, "MyQuery", "出力テーブル名", False
    
    ' 既存のクエリ "MyQuery" を開く
    Set qdf = db.QueryDefs("MyQuery")
    
    ' 実行後、元のSQL文に戻す
    qdf.SQL = originalSQL
    
    ' 変更を保存してクエリを閉じる
    qdf.Close
    Set qdf = Nothing
    Set db = Nothing
End Sub

やってみてわかったこと

  • 実際はエクスポート先が動的でない場合は、エクスポート先のテーブルが存在したら削除してからエクスポートしないといけない。
  • フォームを作ってたので置換するよりもこちらでフォームと連動するようにクエリにSQLパラメータ指定してる方がスマートだった
0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?