2016-10-05 4 views
0

Ich versuche, die folgenden Daten über RODBC in eine Datenbank zu schreiben. Wie kann ich den folgenden Fehler beheben oder welche zusätzlichen Schritte zur Fehlerbehebung?"Inkompatible Typen" -Fehler mit sqlUpdate beheben

writeData <- structure(list(`__ActivityID` = c("8000002", "8000003", "8000005"), 
`__ID` = c("ZRH_06d88315", "ZRH_8161772a", "ZRH_b9f9798a")), 
.Names = c("__ActivityID", "__ID"), row.names = c(NA, 3L), class = "data.frame") 

Hier ist der Befehl, der die Datenbank aktualisieren sollte. Ich habe versucht, es auch mit test = false:

sqlUpdate(channel = liveConnection, dat = writeData, 
      tablename = "__Marketing Activities", 
index = "__ActivityID", nastring = NULL, test = TRUE) 

Es diesen Fehler zurückgibt:

# Query: UPDATE "__Marketing Activities" SET "__ID"=? WHERE "__ActivityID"=? 
Error in sqlUpdate(channel = con$liveConnection, dat =  
res$writeDataNewPKs$`__Marketing Activities`, : 
HY000 8309 [FileMaker][FileMaker ODBC] FQL0013/(1:36): 
Incompatible types in assignment.[RODBC] 
ERROR: Could not SQLPrepare 'UPDATE "__Marketing Activities" 
SET "__ID"=? WHERE "__ActivityID"=?' 

Hier ist die Strukturinformationen über die __ID Säule:

TABLE_CAT TABLE_SCHEM    TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS 
1  <NA>  <NA> __Marketing Activities  __ID  12 VARCHAR  1000000  1000000    NA 
    NUM_PREC_RADIX NULLABLE REMARKS COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE 
1    NA  0 <NA>      12    NA   1000000    180   NO 

Hier ist die strukturelle Informationen über die __ActivityID Spalte:

TABLE_CAT TABLE_SCHEM    TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS 
1  <NA>  <NA> __Marketing Activities __ActivityID   8 DECIMAL   15    8    15 
    NUM_PREC_RADIX NULLABLE REMARKS COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE 
1    -1  1 <NA>      8    NA    NA    39   YES 

Ich habe versucht, andere Daten in die gleichen Spalten schreiben und ich bekomme immer noch den gleichen Fehler.

writeData <-structure(list(`__ActivityID` = c("8000002", "8000003", "8000005", 
"8000008", "8000009", "8000010"), `__ID` = 1:6), .Names = c("__ActivityID", 
"__ID"), row.names = c(NA, 6L), class = "data.frame") 

Beim Schreiben in andere Spalten in der gleichen Datenbank habe ich keine Probleme.

Ich habe auch versucht, beide Spalten in writeData zu diesen Klassen konvertieren: numerisch, Zeichen, Ganzzahl.

Ich vermute, dass etwas über den Datentyp in der __ID Spalte, die ich auf der Datenbankseite nicht verstehe. Dies ist übrigens eine Verbindung zu einer FileMaker 11-Datenbank.

Schließlich, hier sind einige Daten über die Verbindung selbst. Es wurde mit diesem Befehl erstellt:

sqlTypeInfo(con$liveConnection, type = "all", errors = TRUE, as.is = TRUE) 

Und hier ist der Ausgang:

structure(list(TYPE_NAME = c("VARCHAR", "CHARACTER VARYING", 
"DECIMAL", "NUMERIC", "INT", "DECIMAL", "DECIMAL", "BLOB", "VARBINARY", 
"LONGVARBINARY", "BINARY VARYING", "DATE", "TIME", "TIMESTAMP" 
), DATA_TYPE = c(12L, 12L, 3L, 2L, 4L, 6L, 8L, -4L, -4L, -4L, 
-4L, 9L, 10L, 11L), COLUMN_SIZE = c(-1L, -1L, 10L, 10L, 10L, 
15L, 15L, -1L, -1L, -1L, -1L, 10L, 10L, 19L), LITERAL_PREFIX = c("'", 
"'", NA, NA, NA, NA, NA, "X'", "X'", "X'", "X'", "{d '", "{t '", 
"{ts '"), LITERAL_SUFFIX = c("'", "'", NA, NA, NA, NA, NA, "'", 
"'", "'", "'", "'}", "'}", "'}"), CREATE_PARAMS = c("length", 
"length", "precision,scale", "precision,scale", NA, NA, NA, NA, 
NA, NA, NA, NA, "length", "length"), NULLABLE = c(1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), CASE_SENSITIVE = c(1L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), SEARCHABLE = c(3L, 
3L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L), UNSIGNED_ATTRIBUTE = c(NA, 
NA, 0L, 0L, 0L, 0L, 0L, NA, NA, NA, NA, NA, NA, NA), FIXED_PREC_SCALE = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), AUTO_UNIQUE_VALUE = c(NA, 
NA, 0L, 0L, 0L, 0L, 0L, NA, NA, NA, NA, NA, NA, NA), LOCAL_TYPE_NAME = c("varchar", 
"character varying", "decimal", "numeric", "int", "decimal", 
"decimal", "blob", "varbinary", "longvarbinary", "binary varying", 
"date", "time", "timestamp"), MINIMUM_SCALE = c(NA, NA, 0L, 0L, 
0L, NA, NA, NA, NA, NA, NA, NA, NA, 0L), MAXIMUM_SCALE = c(NA, 
NA, 15L, 15L, 0L, NA, NA, NA, NA, NA, NA, NA, NA, 0L), SQL_DATA_TYPE = c(12L, 
12L, 3L, 2L, 4L, 6L, 8L, -4L, -4L, -4L, -4L, 9L, 9L, 9L), SQL_DATETIME_SUB = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1L, 2L, 3L), NUM_PREC_RADIX = c(NA, 
NA, 10L, 10L, 10L, 10L, 10L, NA, NA, NA, NA, NA, NA, NA), INTERVAL_PRECISION = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_)), .Names = c("TYPE_NAME", 
"DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREFIX", "LITERAL_SUFFIX", 
"CREATE_PARAMS", "NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", 
"UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_UNIQUE_VALUE", 
"LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", 
"SQL_DATETIME_SUB", "NUM_PREC_RADIX", "INTERVAL_PRECISION"), row.names = c(NA, 
14L), class = "data.frame") 

enter image description here

Antwort

1

Der Fehler durch Änderung der IS_NULLABLE Parameter der __ID Spalte auf true behoben ist.

In FileMaker wird dies durch Deaktivieren der Feldoption Not empty wie unten angezeigt.

Vielleicht kann jemand auch erklären, warum das so ist? Ich habe nur getestet, dass es funktioniert und konnte in die Spalte schreiben.

enter image description here