Итак, я сейчас работаю с подключением к базе данных 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.