Excel、ACCESSの2003を使用しています。
Excelで、指定した期間の情報をmdb上よりExcel側に出力する処理を考えています。
mdbファイルの接続先がテーブルならうまく処理できます。
しかし今回の接続先がクエリの為か、処理を動かしてもエラーは出ないのですが値が無い扱いになっています。
mdbのテーブルにはリンクテーブルで2つのテーブルがあります。
クエリ側で2つのテーブルをリレーションしており、クエリで表示している内容をExcel側に返したいのです。
下記の処理はクエリに接続をしていないのでしょうか?
Option Explicit
Const cnsADO_CONNECT1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
Dim dbCon As New ADODB.Connection
Dim dbRes As New ADODB.Recordset
Dim dbCol As ADODB.Field
Dim strSQL As String, strStartDate As String, strEndDate As String
Dim lngGyo As Long, lngCol As Long
Dim strRootPath As String, strFileName As String, strPath As String
Dim intField As Integer, i As Integer, j As Integer
Public Sub ACCESS接続()
strRootPath = "\\11.111.11.1\00_テストフォルダ\" 'IPアドレスとフォルダ選択
strPath = "00_環境設定\01_テスト用\" 'パス先
strFileName "テスト.mdb" 'mdb名
dbCon.Open cnsADO_CONNECT1 & strRootPath & strPath & strFileName 'mdb接続
strStartDate = "#09/01/2014# AND "
strEndDate = "#09/23/2014#)"
'''''SQLビューの内容をそのまま'''''
strSQL = "SELECT テーブルA.年月日, テーブルA.実績No., テーブルB.依頼数, テーブルA.略号, テーブルA.作成No., テーブルA.数値No., テーブルA.名称, テーブルA.CD, テーブルA.長さ, テーブルA.場所, テーブルA.フラグ, "
strSQL = strSQL & "Format([年月日],""yyyy/mm/dd"") AS 作成年月日"
strSQL = strSQL & vbNewLine & "FROM テーブルB INNER JOIN テーブルA ON テーブルB.依頼No.=テーブルA.実績No."
strSQL = strSQL & vbNewLine & "WHERE (((テーブルA.年月日) Between "
strSQL = strSQL & strStartDate
strSQL = strSQL & strEndDate
strSQL = strSQL & " AND ((テーブルA.CD) Not Like ""%KN%"") AND ((テーブルA.場所) Like ""*IO*"") AND ((テーブルA.フラグ) Is Null))"
strSQL = strSQL & vbNewLine & "ORDER BY テーブルA.年月日;"
'''''SQLビューの内容をそのまま'''''
dbRes.Open strZisseki_SQL, dbCon, adOpenKeyset, adLockReadOnly 'レコードセット
intField = dbRes.Fields.Count
lngGyo = 1
dbRes.MoveFirst
Do Until dbRes.EOF
lngGyo = lngGyo + 1
lngCol = 0
For Each dbCol In dbRes.Fields
lngCol = lngCol + 1
Cells(lngGyo, lngCol) = dbCol.Value
Next dbCol
dbRes.MoveNext
Loop
dbRes.Close: Set dbRes = Nothing
End Sub
お礼
ご丁寧にありがとうございます。 Debug.print strSQLを実行させて、クエリのSQLビューと照らし合わせていたのですが原因がよく分かりませんでした。 >深く読んで無いですが、ワイルドカードの%KN%と、*IO*の混在は気になります。ADOのワイルドカードは%です。 そして原因はここでした・・・。 %にしていないがために表示されていなかったようです。 ご迷惑おかけしました、そしてありがとうございました。