2016-07-08 2 views
0

RODBC 패키지를 사용하여 데이터 프레임을 Microsift Access 데이터베이스로 내보내는 방법을 배우고 있습니다. 데이터베이스에는 이미 데이터 프레임을 내보내려고하는 테이블이 있습니다.Microsoft Access 데이터베이스와 sqlSave 사용

쿼리 : INSERT INTO "Trip"("CruiseID", "VessName", "LOA", "HrsePowr", "DocNum", "PermNum") 쿼리를 내보내려고하면 다음과 같은 오류 메시지가 나타납니다. , "Captain", "GearWid", "CrewSize", "Grounds", "DateBeg", "DateEnd", "ProjDesc", "Comments") VALUES (?,?,?,?,? ,,,,,,) odbcUpdate (채널, 쿼리의 MyData, coldata [m,, 테스트 = 테스트에서 오류??????에서 누락 기둥 '데이터'

데이터 프레임 수출하려고합니다.

trip_3<-dput(trip_3) 
structure(list(CruiseID = 201602:201605, `Vessel Name` = structure(c(3L, 
4L, 2L, 1L), .Label = c("KATE", "F/V Celtic", "F/V Carolina Capes II", 
"Sea Hawk"), class = "factor"), LOA = c(NA, NA, 100L, NA), HrsePowr = c(NA, 
NA, 1150L, NA), DocNum = c(NA, NA, 591971L, 1159450L), PermNum = c(NA, 
NA, 410146L, 410561L), Captain = structure(c(NA, NA, 2L, 1L), .Label = c("William Hullbig", 
"Charlie Quinn"), class = "factor"), GearWid = c(14L, NA, 8L, 
15L), CrewSize = c(6L, 6L, 6L, 13L), Grounds = structure(c(NA, 
3L, 2L, 1L), .Label = c("CAII ", "NLCA", "MAB"), class = "factor"), 
    DateBeg = structure(c(1462248000, 1463544000, 1464926400, 
    1466481600), class = c("POSIXct", "POSIXt"), tzone = ""), 
    DateEnd = structure(c(NA, NA, NA, 1467172800), class = c("POSIXct", 
    "POSIXt"), tzone = ""), ProjDesc = structure(c(3L, 4L, 2L, 
    1L), .Label = c("CAII Survey", "2016 RSA NLCA Survey ", "MAB Survey Leg 1", 
    "2016 RSA MAB Survey Leg 2"), class = "factor"), Comments = structure(c(3L, 
    4L, 2L, 1L), .Label = c("survey dredge 9 on port and NB dredge on starboard", 
    "Survey dredge on Port #8, 14 ft NBD on Stbd.", "MAB Survey Leg 1, dredge 8 on starboard side", 
    "survey dredge on starboard side, no 9"), class = "factor")), .Names = c("CruiseID", 
"Vessel Name", "LOA", "HrsePowr", "DocNum", "PermNum", "Captain", 
"GearWid", "CrewSize", "Grounds", "DateBeg", "DateEnd", "ProjDesc", 
"Comments"), class = "data.frame", row.names = c(3L, 4L, 2L, 
1L)) 

데이터 프레임을 새 테이블로 내 보내면 VessName 필드가 변경 되더라도 작동합니다. 원래는 Vessel Name으로 가져 왔지만 VesseName으로 변환하면 데이터베이스의 이름이 변경되었습니다. 데이터베이스에 올바른 이름을 지정하고 싶습니다.

것은 내가 다른 포트를 읽고있다

db2016<-odbcDriverConnect("db2016",case="nochange") 

에 대한 ODBC 연결을 설정 한 오류 메시지를 처리하려고하려면 다음을 시도 : 내가 할 수있는

tmp <- sqlColumns(db2016, "Trip") 
varTypes = as.character(tmp$TYPE_NAME) 

[1] "VARCHAR" "VARCHAR" "SMALLINT" "SMALLINT" "INTEGER" 
[6] "INTEGER" "VARCHAR" "SMALLINT" "SMALLINT" "VARCHAR" 
[11] "DATETIME" "DATETIME" "VARCHAR" "VARCHAR" 


names(varTypes) = as.character(tmp$COLUMN_NAME) 

CruiseID VessName  LOA HrsePowr  DocNum 
"VARCHAR" "VARCHAR" "SMALLINT" "SMALLINT" "INTEGER" 
    PermNum Captain GearWid CrewSize Grounds 
"INTEGER" "VARCHAR" "SMALLINT" "SMALLINT" "VARCHAR" 
    DateBeg DateEnd ProjDesc Comments 
"DATETIME" "DATETIME" "VARCHAR" "VARCHAR" 

colspec<-list(tmp$TYPE_NAME) 

[[1]] 
[1] "VARCHAR" "VARCHAR" "SMALLINT" "SMALLINT" "INTEGER" 
[6] "INTEGER" "VARCHAR" "SMALLINT" "SMALLINT" "VARCHAR" 
[11] "DATETIME" "DATETIME" "VARCHAR" "VARCHAR" 

유일한 방법 내보낼 데이터를 가져 오는 것은 데이터를 새 테이블로 이동하는 것입니다. 필자는 내보낼 다른 여러 데이터 프레임을 가지고 있으며 데이터베이스의 관계가 이미 정의되어 있으므로 새 테이블을 생성하고 싶지 않습니다.

R 정보

R version 3.3.1 (2016-06-21) 
Platform: i386-w64-mingw32/i386 (32-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] datasets utils  stats  graphics grDevices methods 
[7] base  

other attached packages: 
[1] xlsx_0.5.7   xlsxjars_0.6.1  rJava_0.9-8   
[4] stringr_1.0.0  rgdal_1.1-10  plyr_1.8.4   
[7] data.table_1.9.6 gmt_1.2-0   lubridate_1.5.6  
[10] maptools_0.8-39  sp_1.2-3   MASS_7.3-45   
[13] RODBC_1.3-13  latticeExtra_0.6-28 RColorBrewer_1.1-2 
[16] lattice_0.20-33  

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.5 chron_2.3-47 grid_3.3.1  magrittr_1.5 
[5] stringi_1.1.1 tools_3.3.1 foreign_0.8-66 

Microsoft Access에서 정보 : 마이크로 소프트 오피스 프로페셔널 플러스 2010 32 비트.

답변

0

여기에 무슨 문제가 있습니까? 나는 두 배로

INSERT INTO "Trip" (

    "CruiseID", "VessName", "LOA", "HrsePowr", "DocNum", "PermNum", 
     1   2   3  4   5   6 
    "Captain", "GearWid", "CrewSize", "Grounds", "DateBeg", "DateEnd", 
     7   8   9   10   11  12 
    "ProjDesc" 
     13 
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) 
      1 2 3 4 5 6 7 8 9 1 1 1 
          0 1 2 

13 개 분야, 12 자리 ...

+0

내 코드를 확인하고 모든 reran. 비슷한 오류 메시지가 표시되지만 이번에는 필드와 자리 표시 자의 수가 일치합니다. – user41509