2016-09-06 5 views
2

Я пытаюсь выполнить SQL-запрос через R, чтобы получить данные из Access DBВыполнить SQL с «как» заявление в R Язык

Нормальный оператор SQL работает отлично, но когда дело доходит до нравится ничего о своей ошибке метательный

Ниже код:

library(RODBC); 
channel = odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/ADMIN/Documents/R.accdb") 
test = sqlQuery(channel ,paste('SELECT R.ID, R.Template, R.WEDate FROM R WHERE R.Template Like "*slow*"')) 

Ошибка: "07002 -3010 [Microsoft] [ODBC Microsoft Access Driver] Слишком мало параметров Ожидаемые 2." [1]
[2] "[RODBC] ОШИБКА: Не удалось SQLExecDirect«SELECT R.ID, R.Template, R.WEDate FROM R WHERE (R.Template Как \" медленно \") "

Есть способ это исправить.

+1

Просто подумайте, попробуйте использовать '%' вместо '*'. – joran

+0

@joran По-прежнему такая же ошибка –

+1

Попробуйте изменить использование двойных и одинарных кавычек (одинарные кавычки внутри, двойные снаружи). – joran

ответ

2

Рассмотрим как предложений @ Joran с апострофом ограждающих строковых литералов и с использованием ANSI-92 подстановочного оператора %. Вы должны использовать звездочку, * (ANSI-89 режима) при работе с внутренним запрос, а именно внутри программы GUI MSAccess.exe (по умолчанию DAO) или если вы подключаетесь извне к Access с DAO. Между тем, соединения ADO используют символ процента, который большинство внешних интерфейсов, включая RODBC.

Я смог воспроизвести вашу проблему, и оба эти средства защиты сработали. Кроме того, нет необходимости использовать paste(), поскольку вы не объединяете какой-либо другой запрос в запрос.

library(RODBC); 
channel = odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)}; 
          DBQ=C:/Users/ADMIN/Documents/R.accdb") 

test = sqlQuery(channel, 
       "SELECT R.ID, R.Template, R.WEDate FROM R WHERE R.Template Like '%slow%'") 
+0

эта комбинация работает хорошо, спасибо за идею bro –