Присоединение к выражению, которое не поддерживается, произошло, когда осталось присоединиться к двум листам из двух разных книг
Я хотел бы оставить два листа из двух разных книг. Ниже мой код, и я столкнулся с ошибкой «JOIN выражение не поддерживается», когда я выполнил sql.
Sub RunSELECT() Dim cn As Object, rs As Object, output As String, sql As String Dim pre_reviewed_file As String, cond As String Dim fso As Object, outfile As String, file_obj As Object Set fso = CreateObject("Scripting.FileSystemObject") outfile = "C:\Users\ZhouK\Desktop\offline comments\offline-comments\result.txt" Set file_obj = fso.CreateTextFile(outfile, True) pre_reviewed_file = "56022473AML2002 OFFLINE listings 20161010 - reviewed.xls" 'MsgBox ActiveWorkbook.FullName '---Connecting to the Data Source--- Set cn = CreateObject("ADODB.Connection") With cn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & ActiveWorkbook.Path & "\" & ActiveWorkbook.Name & ";" & _ "Extended Properties=""Excel 12.0 Xml;HDR=YES"";" .Open End With cond = "1=1" With ActiveWorkbook.Sheets("LIS01").Rows(3) For i = 1 To 24 cond = cond & " and a.[" & .Cells(i).Value & "]=b.[" & .Cells(i).Value & "]" Next End With sheet_name = "LIS01" '---Run the SQL SELECT Query--- sql = "SELECT b.[COMMENTS] FROM [" & sheet_name & "$A3:AZ3000] a left join [Excel 12.0;HDR=Yes;Database=" & ActiveWorkbook.Path & _ "\" & pre_reviewed_file & ";].[" & sheet_name & "$A3:AZ3000] b on " & cond file_obj.Write (sql) file_obj.Close Set rs = cn.Execute(sql) ActiveWorkbook.Sheets("me").Range("A1").CopyFromRecordset rs 'Do 'output = output & rs(0) & ";" & rs(1) & ";" & rs(2) & vbNewLine 'Debug.Print rs(0); ";" & rs(1) & ";" & rs(2) 'rs.Movenext 'Loop Until rs.EOF 'MsgBox output '---Clean up--- rs.Close cn.Close Set cn = Nothing Set rs = Nothing End Sub
Настоящий sql
select b.[COMMENTS] from [LIS01$A3:AZ3000] a left join [Excel 12.0;HDR=Yes;Database=C:\Users\ZhouK\Desktop\offline comments\offline-comments\56022473AML2002 OFFLINE listings 20161010 - reviewed.xls;].[LIS01$A3:AZ3000] b on 1=1 and a.[Study Site Identifier]=b.[Study Site Identifier] and a.[Unique Subject Identifier]=b.[Unique Subject Identifier] and a.[CM Record Number]=b.[CM Record Number] and a.[Medication]=b.[Medication] and a.[Indication]=b.[Indication] and a.[AE-Date-Term1]=b.[AE-Date-Term1] and a.[AE-Date-Term2]=b.[AE-Date-Term2] and a.[AE-Date-Term3]=b.[AE-Date-Term3] and a.[AE-Date-Term4]=b.[AE-Date-Term4] and a.[AE-Date-Term5]=b.[AE-Date-Term5] and a.[MH-Date-Term1]=b.[MH-Date-Term1] and a.[MH-Date-Term2]=b.[MH-Date-Term2] and a.[MH-Date-Term3]=b.[MH-Date-Term3] and a.[MH-Date-Term4]=b.[MH-Date-Term4] and a.[MH-Date-Term5]=b.[MH-Date-Term5] and a.[Prohylaxis or Other]=b.[Prohylaxis or Other] and a.[Dose]=b.[Dose] and a.[Dose Unit]=b.[Dose Unit] and a.[Dose Form]=b.[Dose Form] and a.[Frequency]=b.[Frequency] and a.[Route]=b.[Route] and a.[Ongoing]=b.[Ongoing] and a.[CM Start Date]=b.[CM Start Date] and a.[CM End Date]=b.[CM End Date]
Я действительно не знаю, какая часть ошибочна. Не могли бы вы заглянуть в мой код?
- Как автоматизировать передачу данных в excel
- Как выполнить SQL-запрос через VBA?
- Запрос в Excel без заголовка - Oracle
- Есть ли способ использовать SSIS для выполнения операторов SQL, которые хранятся в файле Excel?
- круглое значение sql до ближайшего часа
- Расчет времени и времени Sql
- SQL SELECT / CASE запрос с несколькими столбцами возвращает системная ошибка: & H80040E14 (-2147217900)
- Параметр метода XPath в Excel
- Импорт нескольких файлов / листов Excel в таблицу SQL
- При вставке или импортировании результатов SQL Server 2012 в Excel 2007. Результаты SQL Server показывают 2600 строк, но excel показывает более 5000
- Изменение даты SQL Server 2012
- как настроить пользователя sql-сервера для строки подключения aceess?
- Форматирование даты SQL для сводных таблиц Excel
Проблема заключается в вашем SQL JOIN
поскольку выражение on 1=1
не разрешено в предложении ON
для диалекта Jet / ACE SQL. Поскольку вам нужен этот элемент, чтобы инициировать строку для вашего цикла, подумайте об удалении его после цикла:
con = Replace(con, "on 1=1 and ", "on ")
В качестве альтернативы перезапишите эквивалентный запрос, перемещая выражения ON
в WHERE
и разделяя запятую таблицы FROM
. Это называется неявным соединением, а не явным соединением с использованием JOIN
, оба из которых равны оценке и производительности:
select b.[COMMENTS] from [LIS01$A3:AZ3000] a, [Excel 12.0;HDR=Yes;Database=C:\Users\ZhouK\Desktop\offline comments\offline-comments\56022473AML2002 OFFLINE listings 20161010 - reviewed.xls;].[LIS01$A3:AZ3000] b where 1=1 and a.[Study Site Identifier]=b.[Study Site Identifier] and a.[Unique Subject Identifier]=b.[Unique Subject Identifier] and a.[CM Record Number]=b.[CM Record Number] and a.[Medication]=b.[Medication] and a.[Indication]=b.[Indication] and a.[AE-Date-Term1]=b.[AE-Date-Term1] and a.[AE-Date-Term2]=b.[AE-Date-Term2] and a.[AE-Date-Term3]=b.[AE-Date-Term3] and a.[AE-Date-Term4]=b.[AE-Date-Term4] and a.[AE-Date-Term5]=b.[AE-Date-Term5] and a.[MH-Date-Term1]=b.[MH-Date-Term1] and a.[MH-Date-Term2]=b.[MH-Date-Term2] and a.[MH-Date-Term3]=b.[MH-Date-Term3] and a.[MH-Date-Term4]=b.[MH-Date-Term4] and a.[MH-Date-Term5]=b.[MH-Date-Term5] and a.[Prohylaxis or Other]=b.[Prohylaxis or Other] and a.[Dose]=b.[Dose] and a.[Dose Unit]=b.[Dose Unit] and a.[Dose Form]=b.[Dose Form] and a.[Frequency]=b.[Frequency] and a.[Route]=b.[Route] and a.[Ongoing]=b.[Ongoing] and a.[CM Start Date]=b.[CM Start Date] and a.[CM End Date]=b.[CM End Date]