Я импортирую файл CSV с сетевого диска, на котором есть много столбцов, содержащих текст SG_
. В настоящее время я переименовываю эти столбцы с помощью кода, выполнив 1-й запрос, чтобы создать набор записей со SELECT TOP 1* FROM FILENAME.EXT
строками. Затем я зацикливаю recordset.Fields
и удаляю префиксный текст, например nnn_
, используя MID Function
и использую оставшийся текст, чтобы использовать их как Aliases
для этих SG
столбцов. Итак, моя первая созданная VBA строка SQL выглядит следующим образом:
StrSQL = "SELECT [Food],[Bev],[Meds],[Average 1],[Midpoint],[Average 2],[SG_ABC],[SG_DEF],[SG_GHI]
Отсюда я хочу выбрать столбцы, содержащие SG_
.
Пример кода VBA:
Set oCon = CreateObject("ADODB.Connection")
Set oRs = CreateObject("ADODB.Recordset")
strCon = "Driver=Microsoft Access Text Driver (*.txt, *.csv);Dbq=" & sFullDirectory & ";Extensions=asc,csv,tab,txt;HDR=Yes;"
strSQL = "SELECT TOP 1 * FROM " & FILE1
oCon.Open strCon
Set oRs = oCon.Execute(strSQL)
i = 1
strSQL = "SELECT "
For Each Fld In oRs.Fields
Select Case True
Case Is = InStr(1, Fld.Name,"SG_") > 0
TempSG=Trim(Mid(Fld.Name,InStr(1,Fld.Name,"SG_"),Len(Fld.Name)))
strSQL = strSQL & " CDbl([" & Fld.Name & "]) AS [" & TempSG & "], "
....more Cases...
End Select
Next Fld
oRs.Close
....more code.
Затем я присоединяю этот strSQL
запрос к другим таблицам для выбора других столбцов и загрузки результата в набор записей ado. В настоящее время я использую Microsoft Access Text Driver в Excel, используя VBA.
strSQL1 = "SELECT G.[lbl], A.[tval], Q.*"
strSQL1 = strSQL1 & " FROM "
strSQL1 = strSQL1 & " (SELECT G.[pos], A.[pos], G.[lbl], A.[tval] FROM " & FILE2 & " G," & FILE3 & " A WHERE G.[ID] = A.[ID]) T, (" & strSQL & ") Q "
strSQL1 = strSQL1 & " WHERE (CLng(T.[G].[pos]) = CLng(Q.[gval])) AND (CLng(T.[A].[pos]) = CLng(Q.[pos]))"
strSQL1 = strSQL1 & " ORDER BY CLng(Q.[gval]), CDbl(Q.[Aggregate 1]) DESC, G.[lbl];"
Set oRs = oCon.Execute(strSQL1)
В приведенном выше коде Q.*
представляет таблицу ниже, из которой я хочу выбрать только столбцы SG_
. Надеюсь, это проясняет ситуацию. например,
SELECT G.[lbl], A.[tval], Q.* LIKE 'SG_'
Таблица CSV:
Food | Bev | Meds | Average | Midpoint | Average | 434_SG_ABC | 236_SG_DEF | 121_SG_GHI |
--------------------------------------------------------------------------------------------------
cheese | Rum | cold | 1.22 | 4.98 | 0.24 | 23.43 | 54.67 | 89.33 |
Butter | Wine | heat | 3.56 | 2.40 | 0.98 | 12.12 | 90.23 | 33.43 |
Olive | Beer | rain | 4.33 | 7.11 | 1.45 | 11.55 | 10.31 | 87.22 |
Rice | Gin | hail | 2.02 | 7.86 | 3.36 | 25.82 | 29.44 | 65.70 |
Есть ли способ выбрать эти столбцы?