Сбой RODBC: «недопустимое значение символа для спецификации приведения» - Excel 2007 - PullRequest
7 голосов
/ 15 октября 2011

Я пытаюсь использовать RODBC для записи в файл Excel2007 и продолжаю получать ошибки.Я свел проблему к этому очень простому случаю, к 1-строчному элементу data.frame с символами, цифрами, датой и логическими типами данных:

toWrite = data.frame( Name = "joe" , Date = as.Date("2011-01-01"), Value = 2 , Paid = FALSE )
xlFile = odbcConnectExcel2007( "REPLACE_WITH_XLSB_FILE_PATH" , readOnly = FALSE )
sqlSave( xlFile , toWrite , tablename = "worksheet1" , rownames = FALSE )

Ошибка:

Error in sqlSave(xlFile, toWrite, tablename = "worksheet1", rownames = FALSE) : 
  [RODBC] Failed exec in Update
22018 39 [Microsoft][ODBC Excel Driver]Invalid character value for cast specification 
In addition: Warning message:
In odbcUpdate(channel, query, mydata, coldata[m, ], test = test,  :
  character data 'FALSE' truncated to 1 bytes in column 'Paid'

Если я преобразовываю и дату, и логические столбцы в символ, тогда все работает нормально.Проблема в том, что теперь они являются символами в Excel и не могут использоваться в качестве предполагаемых типов данных без преобразования.Я копался в коде sqlSave, и он, кажется, делает правильные вещи.Кто-нибудь еще сталкивался с этой проблемой?

Ответы [ 4 ]

12 голосов
/ 12 июня 2017

Для тех, кто спотыкается об этом (5 лет спустя), в R вы можете использовать аргумент varTypes в sqlSave(), например sqlSave(..., varTypes = c(somecolname="datetime", anothercolname= "datetime",...)).

4 голосов
/ 11 января 2017

Сегодня я тоже столкнулся с такой же проблемой.Я хочу обновить таблицу в R до SQL-подачи.Это дает мне точно такое же сообщение об ошибке.Затем я изменил все поля типа «Дата» на тип «символ».Я снова обновился, все заработало.

Похоже, что SQL-сервер не может правильно распознать переменную типа "Date" из R.

1 голос
/ 25 октября 2011

Я слышал об этой проблеме раньше:

Обходной путь:

  • Используйте «0» для false,
  • Установить Оплачено как текстовое поле
  • Измените логику приложения, чтобы использовать! = 0 для True

Я попытаюсь найти для вас билет с ошибкой # для отслеживания

0 голосов
/ 02 ноября 2011

закрываем этот вопрос. Там, кажется, не является хорошим решением, кроме преобразования в характер. Я решил написать программу командной строки, которая записывает данные во временный файл CSV, открывает Excel и импортирует CSV.

...