Excel VBA でサックとDB接続

ページ名:Excel_VBA

ODBCドライバとデータリンクファイルでサクッとDB接続

VBAソース


Private Sub TRFButton_Click()

    Application.ScreenUpdating = False

    Set TRFGetCountSQL = New execSQLds
    TRFGetCountSQL.Pub_datasetPath = Sheets("Conf").Cells(5, 3).Value
    result = TRFGetCountSQL.OpenDB(Sheets("Conf").Cells(5, 3).Value)
'    TRFGetCountSQL.Pub_sqlStr = Sheets("WAI").Cells(7, 3).Value
'    TRFGetCountSQL.execSQL Sheets("WAI").Cells(7, 3).Value
    
    
    ' 表のCOUNTセルから入力されているSQLを順次実行し結果を該当処理年月日にセットする
    
    '
    ' TRFシートの「COUNT」セル=B7 (2,7)
    '
     CntRow = 7
     CntCOl = 2
      
     SatRow = 2
     SatCOl = 1
      
     EndRow = 2
     EndCOl = 2
      
     ShtName = "TRF"
      
    i = 1
    
    'CountするSQLがある文だけ実行する
    Do While (Cells(CntRow, CntCOl + i).Value <> "")
            
            '指定したセルの範囲内を初期化する
            ri = 1
            Do While (Cells(CntRow + ri, CntCOl).Value <> "")
                
                If (Cells(CntRow + ri, CntCOl).Value >= Cells(SatRow, SatCOl).Value _
                     And Cells(CntRow + ri, CntCOl).Value <= Cells(EndRow, EndCOl).Value) Then
                     Cells(CntRow + ri, CntCOl + i).Value = ""
                End If
                ri = ri + 1
            Loop
            'SQL抽出
            TRFGetCountSQL.Pub_sqlStr = Cells(CntRow, CntCOl + i).Value
            TRFGetCountSQL.execSQL Cells(CntRow, CntCOl + i).Value
            Do Until TRFGetCountSQL.Pri_RS.EOF
                Str_OPEYMD = TRFGetCountSQL.Pri_RS("operate_ymd").Value
                Str_COUNT = TRFGetCountSQL.Pri_RS("count").Value
                Set myObj = Sheets("WAI").Range("B8:B500").Find(Str_OPEYMD, LookAt:=xlWhole)
                If Not myObj Is Nothing Then
                   Sheets(ShtName).Cells(myObj.Row, CntCOl + i).Value = Str_COUNT
                End If
                TRFGetCountSQL.Pri_RS.MoveNext
            Loop
            TRFGetCountSQL.CloseRcdSet
        i = i + 1
    Loop
    Application.ScreenUpdating = True
 End Sub

**************************************************************************************************

Public Pub_sqlStr As String         '実行SQL文字列
Public Pub_datasetPath As String    'テータパス(DB接続情報定義ファイルkパス)
Public Pub_sqlErr As String         'SQLエラー

Public eof_flg As Boolean           'EOF判定
Public rs_Cnt As Integer            'レコードセットカウント
Public rs_Max As Integer            '取得レコード数
Public Pri_RS As ADODB.Recordset


'Private
Public Pri_dbcn As ADODB.Connection


'
' メソッド Class_Initialize 初期化
'
'

Private Sub Class_Initialize()

End Sub
'
' メソッド Class_Terminate 終了処理
'
'
Private Sub Class_Terminate()
    '終了
    Set Pri_RS = Nothing
    CloseDB
End Sub


'
' メソッド OpenDB
'
'
Public Sub OpenDB(dataset As String)

    Set Pri_dbcn = New ADODB.Connection
' OLE DBプロバイダを指定して、データソースを開く
    OPstionstr = "File Name=" + Pub_datasetPath + ";"
'    Pri_dbcn.Open OPstionstr
' OLE DBプロバイダを指定して、データソースを開く
'    Pri_dbcn.Open "File Name=C:\Users\user\Desktop\FIX\Redshift_sibuA.udl;"
    Pri_dbcn.Open OPstionstr
    

End Sub
'
' メソッド CloseDB
'
'
Public Sub CloseDB()

    If Not Pri_dbcn Is Nothing Then
        
        Pri_dbcn.Close
    
    End If
End Sub
'
' メソッド CloseRcdSet
'
'
Public Sub CloseRcdSet()

    If Not Pri_RS Is Nothing Then
    
        Pri_RS.Close
        Set RS = Nothing
    End If
End Sub

'
' メソッド execSQL SQL実行
'
'
Public Sub execSQL(sqlStr As String)
    
   
    Set Pri_RS = New ADODB.Recordset
    If (sqlStr <> Null) Then
        Pub_sqlStr = sqlStr
    End If
'MsgBox Pub_sqlStr
       Pri_RS.Open Pub_sqlStr, Pri_dbcn, adOpenKeyset, adLockOptimistic
  '確認


End Sub
 

 

**************************************************************************************************

xxx.udl データリンクファイル

。udlファイルを作成してクリックするとダイアログが出てそこで設定&DB接続確認もできる
[oledb]
; Everything after this line is an OLE DB initstring
Provider=MSDASQL.1;Password=yyyyyyyy;Persist Security Info=True;User ID=hogehoge;Mode=Read;Extended Properties="Driver={Amazon Redshift (x64)}; Server=xxxxxxxxyyyyyyyyredshift.amazonaws.com; Database=dev;  Port=5439";Initial Catalog=dev
 


 

シェアボタン: このページをSNSに投稿するのに便利です。


最近更新されたページ

メニュー

Oracle技術検証&nbsp;&nbsp;#Golden Gate&nbsp; 障害時の情報収集あれこれ調査用虎の巻 SQL集 セッション調査 オブジェクト調査 パフォーマンス系 チューニング サー...

データログファイル等

バックグラウンドプロセス、データ・ログファイル等&nbsp;アーカイブRedoログファイルのサイズを確認する。set line 250set pages 1000alter session set N...

CKPTで待機

&nbsp;◆アクティブセッション高沸アクティビティ(アクティブセッション)が高沸、待機イベントを確認すると「log file sync」でセッションに遅延が発生しているとのことRedoLogがいっぱ...

いろいろノウハウ

SQLPLUSでバインド変数を使う方法--SQLのバインド変数と同じ名前・型の変数を宣言variable b1 numbervariable b2 number--以下値をセット@Sampleで実行時...

Tigerのうぃき

&nbsp; スコットのひとり言をまとめるニャぁ&hellip; 江草すごいニャ~ぁ禁止事項 掲示板の趣旨と関係ない書き込み 誹謗・中傷含む書き込み 他サイトやアプリの宣伝 招待URLの書き込み 以上...

雑談質問相談掲示板

はじめにここは、雑談・質問・相談など何でも話題にする掲示板です。掲示板についてお知らせ特にありません。禁止事項 掲示板の趣旨と関係ない書き込み 誹謗・中傷含む書き込み 他サイトやアプリの宣伝 招待UR...

チューニング

チューニングいろいろ&nbsp;Indexの性能劣化確認INDEXは追加や削除を繰り返すと、断片化(リーフブロックが広がったり)階層が深くなりINDEX効率が悪くなる。断片化が20%以上、リーフの階層...

Shared pool 共有プール

共有プール共有プール(shared pool)はヒープ(heap memory)構造を取ります。共有プールはその領域を複数のチャンクに分けて管理・使用します。共有プールを使用するプロセス(SQLの実行...

OracleSQLチューニング

V$SQLの実行回数、パースの回数からみるパフォーマンス問題EXECUTIONS:SQL の実行回数PARSE_CALLS: 解析コールの回数 = ハードパースとソフトパースの合計値LOADS:ハード...