2015-02-12 4 views
2

Я пытаюсь записать в базу данных msaccess с помощью sqlSave из пакета RODBC. У меня нет проблем с открытием подключения к базе данных. Я могу читать из таблиц. Я могу даже сделать некоторые простые обновления с помощью sqlSave, но для следующей таблицы и следующего обновления R передняя часть сбой. Это происходит как при выполнении этого из Rscript с реальными вычисленными данными, так и из Rstudio, когда я запускаю следующие команды. Я запускаю R 3.1 в 32-битном режиме (для обеспечения совместимости с доступом).RODBC sqlSave сбой R front end

я создал канал «ч» и я собираюсь написать таблицу под названием «test_table» в базе данных под названием «data.mdb»

test <- c(1,"Fixed","Upward","Gas", "2014-07-31",14,0.99) 

test.df <- as.data.frame(t(test)) 

names(test.df) <- c("ID","Contract_Type","Direction", "Name_Of_Underlying","Data_Date","Months_To_Maturity","Absolute_Price_Move") 

types <- c("integer","varchar","varchar","varchar","datetime","integer","double") 
names(types) <- names(test.df) 

sqlSave(ch, dat = test.df, tablename = "Test_Table",varTypes = types, append = T, verbose = T,safer = T) 

Я также попытался это с более безопасным = F.

Когда я запускаю это в RStudio, я получаю знак «бомба», и меня просят начать новый сеанс. Когда я запускаю Rscript, вывод командной строки указывает на то, что все правильные привязки происходят и что параметры верны. Затем появляется окно, чтобы сказать, что R для Windows front-end перестает работать, и ничего не было записано в базу данных.

Любые мысли приветствуются.

+0

Когда я отлаживаю Rscript в Visual Studio, я получаю следующее сообщение об ошибке: Необработанное исключение в 0x6C72A6E4 (R.dll) в Rscript.exe: 0xC0000005: Место чтения нарушения доступа 0x00000000. – physicistintheory

+0

немного больше информации, если я удаляю поле datetime, это сохранение работает. он также падает, когда я конвертирую строку datetime в POSIX. – physicistintheory

+0

Я получил это, чтобы работать с помощью инструкции INSERT INTO и sqlQuery, но мне все равно хотелось бы знать, как сделать sqlSave трюком. – physicistintheory

ответ

7

У меня была аналогичная проблема, когда я пытался добавить данные в существующую таблицу в MS SQL с помощью sqlSave(). Он начал работать, когда я добавил аргумент rownames = FALSE в sqlSave. В описании пакета RODBC есть:

rownames: Если логически, сохраните имена строк в качестве первых столбцов столбцов таблицы в таблице?

Значение по умолчанию TRUE, поэтому я думаю, что RStudio разбился, потому что у меня не было столбца для имен строк в таблице в базе данных.

+1

Это не сработало для меня, и, конечно, даже если это было ошибкой R? – user2981639

0

У меня это случалось несколько раз при добавлении строк. В моих случаях наличие дополнительных столбцов в dataframe, казалось, было проблемой. когда я удалял столбцы из фрейма данных, которые не были в таблице, он работал.