Ошибка с sqlSave - PullRequest
       5

Ошибка с sqlSave

2 голосов
/ 16 ноября 2011

Я борюсь с sqlSave, чтобы добавить свою матрицу B, которая выглядит следующим образом:

Noinscr
88877799
45645687
23523521
45454545

в таблицу SQL.

, поэтому я запускаю следующую команду:

sqlSave(channel, b, "[testsFelix].[dbo].[TREB]", append = TRUE,
  rownames = FALSE, colnames = FALSE, safer = TRUE, fast = FALSE)

и я получаю следующую ошибку:

Erreur dans sqlSave(channel, b, "[testsFelix].[dbo].[TREB]", append = TRUE,  : 
  42S01 2714 [Microsoft][SQL Server Native Client 10.0][SQL Server]
    There is already an object named 'TREB' in the database.
  [RODBC] ERROR: Could not SQLExecDirect
    'CREATE TABLE [testsFelix].[dbo].[TREB]  ("Noinscr" int)'

Видя, что не нужно стереть таблицу, даже если есть append=TRUE, я попытался стереть свою таблицу SQL и снова запустил тот же код.

Я получаю следующую ошибку:

Erreur dans sqlColumns(channel, tablename) : 
  ‘[testsFelix].[dbo].[TREB]’: table not found on channel

Так что я в замешательстве, когда я хочу добавить R говорит, что не может, потому что таблица там, а когда таблицы нет, R говорит, что не может поместить в нее информацию, потому что таблицы там нет. Я пошел в SQL, чтобы убедиться, что ничего не произошло, но я увидел, что R создал таблицу с правильным именем столбца (Noinscr), но таблица пуста.

Пожалуйста, скажите мне, что я делаю неправильно. Спасибо

Ответы [ 5 ]

3 голосов
/ 21 августа 2014

У меня была такая же проблема.Я понял, что по умолчанию sqlSave создаст таблицу в схеме «Master».Я запустил Администратор источника данных ODBC, изменил базу данных по умолчанию, выбрал нужную базу данных, и она заработала.

2 голосов
/ 07 января 2013

Я нашел этот пост в поисках аналогичной проблемы.Проблема сохраняется после перезагрузки R, а также перезагрузки системы.Я сузил проблему до базы данных, открыв новое соединение с другой базой данных и записав в нее, используя sqlSave.

Странно, проблема с исходной базой данных была исправлена ​​открытием и закрытием ее с помощью R:

DBchannel <- odbcConnectAccess(access.file = "C:/myPath/Data.mdb")
odbcClose(DBchannel)

После этого следующий тест работал нормально:

require(RODBC)
dd <- data.frame('normal' = rnorm(100), 'uniform' = runif(100))
DBchannel <- odbcConnectAccess(access.file = "C:/myPath/Data.mdb")
sqlSave(DBchan, dd, tablename='testtable')
odbcClose(DBchannel)

(что неплохо, поскольку моим первоначальным (не) решением было перестроить базу данных)

0 голосов
/ 15 сентября 2016

Вы должны снять скобки ([]), и тогда все должно работать нормально.

0 голосов
/ 27 апреля 2012

Пожалуйста, попробуйте это

sqlSave(channel, b, "_b", append = TRUE,
    rownames = FALSE, colnames = FALSE, safer = TRUE, fast = FALSE)

Я обнаружил, что Excel добавит «_» перед именем файла по умолчанию, если вы добавите его к имени файла, Excel найдет таблицу.

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

Я боролся с той же проблемой с тобой. Я могу вызвать odbcQuery для вставки данных построчно. Тем не менее, мой data.frame имеет десятки миллионов строк. Это как бы вставить их. Если ваш набор данных не большой, вы можете попробовать его.

...