Добавление новых данных в локальный файл базы данных Access с помощью r после успешного подключения - PullRequest
0 голосов
/ 31 октября 2018

Итак, я сейчас работаю с подключением к базе данных Access. Я могу подключиться к БД Access, которая находится в моей локальной системе. Это на самом деле связано со списком SharePoint. Я хотел бы автоматизировать процесс обработки этого списка SharePoint с помощью комбинации R и Access! То, что я хочу сделать на самом деле довольно просто, я хочу представить новые данные через .csv, который обрабатывается для соответствующего контента и затем сравнивается с текущей базой данных Access и, наконец, с новой информацией, загруженной из r в Access.

Я узнал, что вам нужно соединить битовую версию ОС Windows, версию Office и версию R. Так что я х64 на все вышеперечисленное. Это позволило мне подключиться к БД Access. Вам также необходим «Распространяемый компонент Microsoft Access Database Engine 2016», который по сути является драйвером для соединения.

Итак, что я имею до сих пор:

    library(odbc)
    library(DBI)   
    file_path <- "C:/user/Documents/R Projects/...pathtofile.../filename.accdb"

        accdb_con <- dbConnect(drv = odbc(), .connection_string = paste0("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=",file_path,";"))

        access.db <- dbReadTable(accdb_con, "sNPS Deep Dives")

Это теперь соединяет! Затем я читаю в .csv новой информации

new.df <- read.csv("C:/user/Documents/R projects/...pathtofile.csv", header=T, stringsAsFactors=FALSE, na.strings=c("","NA"))

пример набора данных может выглядеть примерно так:

date <- c("15/10/2018","15/10/2018", "16/10/2018", "12/11/2018", "07/09/2018")
score <- c("6", "10", "7", "10", "9")
group <- c("a","b", "b", "a", "b")
CaseID <- c("301", "302", "303", "304", "305")

new.df <- data.frame(date,score,group,CaseID)
new.df$date <-  as.character(new.df$date)
new.df$score <- as.numeric(new.df$score)
new.df$group <- as.character(new.df$group)
new.df$CaseID <- as.numeric(new.df$CaseID)

Примечательно, что в БД Access есть еще столбцы, которые люди будут заполнять вручную для получения дополнительной информации.

и я обработал его, чтобы быть готовым, иди в БД Access.

probably not that interesting...

Затем я сравниваю новые данные с БД Access следующим образом:

library(dplyr)    
new <- anti_join(new.df, access.db, by= "Case.ID")

Теперь я попробовал:

dbWriteTable(access.db.copy, new, append = TRUE)
dbAppendTable(access.db.copy, new)

Кажется, я не могу заставить это пойти куда-либо

Я получаю ошибку:

Error in (function (classes, fdef, mtable)  : unable to find an inherited method for function ‘dbWriteTable’ for signature ‘"ACCESS", "data.frame", "missing"’

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

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

Буду признателен за любое направление, которое вы все сможете обеспечить.

Спасибо!

Редактировать:

Похоже, что Бинг Сан был прав, мне не хватало аргумента. Похоже, нам нужно что-то вроде:

dbWriteTable(access.db.copy, "Name of table",new, append = TRUE)

Что выдает ошибку:

Error in result_insert_dataframe(rs@ptr, values) : 
      nanodbc/nanodbc.cpp:1944: HY104: [Microsoft][ODBC Microsoft Access Driver]Invalid precision value 

Интересно, может ли это что-то, что является ошибкой в ​​Access по поводу типа файла?

теперь, если я использую приложение, я не получаю ошибку, я получаю 0 для вывода

 dbAppendTable(access.db.copy, "Name of table", new, append= TRUE)

С выходом:

[1] 0

Но я не вижу никаких новых значений при проверке файла Access.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...