2016-10-02 12 views
0

JOINのSQL文を生成するコードです:エクセルVBA ADO SQLは、私は以下のエクセル& VBAを使用してい

enter image description here

Function getVehicleById(p_vehicleId As Long) As clsVehicle 

Dim dbConfig As clsConfig_Db 

Dim queryString As String 
Dim selectClause As String 
Dim fromClause As String 
Dim whereClause As String 

Dim conDb As New ADODB.Connection 
Dim rs As New ADODB.Recordset 

Dim vehicle As New clsVehicle 

Set dbConfig = Factory.getDbConfig 

selectClause = " SELECT * " 

fromClause = " FROM " & _ 
    " [" & dbConfig.VEHICLES_TABLE_NAME & "$] veh " & _ 
    ",[" & dbConfig.CONTACTS_TABLE_NAME & "$] con " & _ 
    ",[" & dbConfig.TRANSMISSION_TYPES_TABLE_NAME & "$] tt " & _ 
    ",[" & dbConfig.FUEL_TYPES_TABLE_NAME & "$] ft " & _ 
    ",[" & dbConfig.COLOURS_TABLE_NAME & "$] col " & _ 
    ",[" & dbConfig.MAKES_TABLE_NAME & "$] mke " & _ 
    ",[" & dbConfig.MODELS_TABLE_NAME & "$] mod " & _ 
    ",[" & dbConfig.ENGINE_SIZES_TABLE_NAME & "$] es " 

whereClause = " WHERE " & _ 
    " veh." & dbConfig.VEH_CON_ID_COLUMN_NAME & " = " & " con." & dbConfig.CON_ID_COLUMN_NAME & _ 
    " AND veh." & dbConfig.VEH_TT_ID_COLUMN_NAME & " = " & " tt." & dbConfig.TT_ID_COLUMN_NAME & _ 
    " AND veh." & dbConfig.VEH_FT_ID_COLUMN_NAME & " = " & " ft." & dbConfig.FT_ID_COLUMN_NAME & _ 
    " AND veh." & dbConfig.VEH_COL_ID_COLUMN_NAME & " = " & " col." & dbConfig.COL_ID_COLUMN_NAME & _ 
    " AND veh." & dbConfig.VEH_ES_ID_COLUMN_NAME & " = " & " es." & dbConfig.ES_ID_COLUMN_NAME & _ 
    " AND veh." & dbConfig.VEH_MOD_ID_COLUMN_NAME & " = " & " mod." & dbConfig.MOD_ID_COLUMN_NAME & _ 
    " AND mod." & dbConfig.MOD_MKE_ID_COLUMN_NAME & " = " & " mke." & dbConfig.MKE_ID_COLUMN_NAME & _ 
    " AND veh." & dbConfig.VEH_ID_COLUMN_NAME & " = " & p_vehicleId 

queryString = selectClause & fromClause & whereClause 

Debug.Print queryString 

conDb.Open dbConfig.DSN_NAME 
rs.Open queryString, conDb 

If Not IsNull(rs.Fields(dbConfig.VEH_ID_COLUMN_NAME).value) Then 
    vehicle.id = CLng(rs.Fields(dbConfig.VEH_ID_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.VEH_VIN_COLUMN_NAME).value) Then 
    vehicle.vin = CStr(rs.Fields(dbConfig.VEH_VIN_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.VEH_VRM_COLUMN_NAME).value) Then 
    vehicle.vrm = CStr(rs.Fields(dbConfig.VEH_VRM_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.MKE_ID_COLUMN_NAME).value) Then 
    vehicle.makeId = CLng(rs.Fields(dbConfig.MKE_ID_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.MKE_MAKE_COLUMN_NAME).value) Then 
    vehicle.make = CStr(rs.Fields(dbConfig.MKE_MAKE_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.MOD_ID_COLUMN_NAME).value) Then 
    vehicle.modelId = CLng(rs.Fields(dbConfig.MOD_ID_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.MOD_MODEL_COLUMN_NAME).value) Then 
    vehicle.model = CStr(rs.Fields(dbConfig.MOD_MODEL_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.ES_ID_COLUMN_NAME).value) Then 
    vehicle.engineSizeId = CLng(rs.Fields(dbConfig.ES_ID_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.ES_ENGINE_SIZE_COLUMN_NAME).value) Then 
    vehicle.engineSize = CStr(rs.Fields(dbConfig.ES_ENGINE_SIZE_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.FT_ID_COLUMN_NAME).value) Then 
    vehicle.fuelTypeId = CLng(rs.Fields(dbConfig.FT_ID_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.FT_FUEL_TYPE_COLUMN_NAME).value) Then 
    vehicle.fuelType = CStr(rs.Fields(dbConfig.FT_FUEL_TYPE_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.TT_ID_COLUMN_NAME).value) Then 
    vehicle.transmissionId = CLng(rs.Fields(dbConfig.TT_ID_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.TT_TRANSMISSION_TYPE_COLUMN_NAME).value) Then 
    vehicle.transmission = CStr(rs.Fields(dbConfig.TT_TRANSMISSION_TYPE_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.COL_ID_COLUMN_NAME).value) Then 
    vehicle.colourId = CLng(rs.Fields(dbConfig.COL_ID_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.COL_COLOUR_COLUMN_NAME).value) Then 
    vehicle.colour = CStr(rs.Fields(dbConfig.COL_COLOUR_COLUMN_NAME).value) 
End If 

If Not IsNull(rs.Fields(dbConfig.CON_ID_COLUMN_NAME).value) Then 
    vehicle.contactId = CLng(rs.Fields(dbConfig.CON_ID_COLUMN_NAME).value) 
End If 

rs.Close 
conDb.Close 
Set rs = Nothing 
Set conDb = Nothing 

Set getVehicleById = vehicle 
Set vehicle = Nothing 

End Function 

そしてここでは、上記のコードから生成されたSQLですデバッグ印刷:

SELECT * 
FROM [vehicles$] veh, 
     [contacts$] con, 
     [refdata_transmission_types$] tt, 
     [refdata_fuel_types$] ft, 
     [refdata_colours$] col, 
     [refdata_makes$] mke, 
     [refdata_models$] mod, 
     [refdata_engine_sizes$] es 
WHERE veh.veh_con_id = con.con_id 
     AND veh.veh_tt_id = tt.tt_id 
     AND veh.veh_ft_id = ft.ft_id 
     AND veh.veh_col_id = col.col_id 
     AND veh.veh_es_id = es.es_id 
     AND veh.veh_mod_id = mod.mod_id 
     AND mod.mod_mke_id = mke.mke_id 
     AND veh.veh_id = 1 

コードを実行すると、メートル以下のエラー取得:

enter image description here

は、誰かが私が間違ってやっていると指摘助けることができますか?

+2

コードとエラーメッセージを画像として転記するのではなくテキストとして転記してください。 –

+0

情報を要請して投稿してください。 – Zahanghir

+0

ところで - 私は明らかにしなかった場合に備えて、別のExcelシートからExcelスプレッドシートを照会しています。とにかく、これらのテーブルからデータを取得していて、正常に動作している他のコードがあるので、これらのテーブルがすべて存在することは確かです。確かにテーブルが存在しない場合、 '構文エラー'は発生しません。 – Zahanghir

答えて

0

が解決

おかげ -

私は例えば、私のSQLでの別名としてSQLキーワードを使用していました:

[refdata_models$] mod, 

私は 'MOD' 実現がキーワードです。そして、これが問題を作り出していました。エイリアスを別のものに変更しましたが、現在は正常に動作しています。