9

RODBC を使用してデータ フレームを mySql データベースに挿入するのに苦労しています。以下は私が使用しているコードです:

data <- data.frame(analysedDataID=c(1,2,3), plateWell=c("a","b","c"), screenPlateOrder=c(1,2,3), wellData=c("A","B","C"))

con <- odbcConnect(DSN, uid="user_id", pwd="some_password")
query <- sqlSave(con, data, tablename = 'wellAnalysedDataTable', rownames=FALSE, append=TRUE)

これを実行しようとすると、次のエラー メッセージが表示されます。

Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test,  : 
missing columns in 'data'

データを挿入しようとしている特定のテーブルは次のとおりです。

+------------------+-------------+------+-----+---------+-------+
| Field            | Type        | Null | Key | Default | Extra |
+------------------+-------------+------+-----+---------+-------+
| analysedDataID   | int(10)     | YES  |     | NULL    |       | 
| plateWell        | varchar(10) | YES  |     | NULL    |       | 
| screenPlateOrder | int(10)     | YES  |     | NULL    |       | 
| wellData         | varchar(30) | YES  |     | NULL    |       | 
+------------------+-------------+------+-----+---------+-------+

ドキュメントを何度も読んだが、これを機能させることができないので、この時点で本当に混乱しています。どんな助けでも大歓迎です!

乾杯!


ありがとう!ご提案いただいた変更を加えましたが、ケースに問題はないようです。ただし、次のエラーメッセージが表示され続けます。

'index column(s) analysedDataID plateWell screenPlateOrder wellData not in data frame'

これを生成する実行中のステートメントは次のとおりです。

sqlUpdate(con, data, tablename="wellAnalysedDataTable", index=c("analysedDataID", "plateWell", "screenPlateOrder", "wellData"))

列は同じ名前のデータ フレームに既にあるため、これは意味がありません。

4

6 に答える 6

2

同じエラーが発生しましたが、問題は宛先テーブルのデータ型でした。可能性のあるデータ変換があったようです。
ソリューションの手順は次のとおりです。

  1. 未使用のテーブル名 (新しいテーブル) を使用します。
  2. append=False を設定し、エラー メッセージに表示された「テーブルの作成」を取得します。
  3. データベースでテーブルを作成することを実行します。
  4. 「saveSql」は、append=False または append=True のいずれかで機能するようになりました。

問題が発生した場所を正確に確認するには、「verbose=T」を設定すると便利です。

于 2016-06-27T20:57:01.467 に答える
0

問題が実際に大文字と小文字の区別にある場合は、「preserve」オプションを使用して関数を変更せずに簡単に修正できるように見えます。これは、Ari B. Friedman が指摘した「nochange=cnames」の行に表示されます。そのため、最初に RODBC チャネルを作成するときに、それを case オプションとして指定するだけです。

my_sql_channel <<- odbcConnect("myOdbc", case="nochange")
于 2015-08-15T14:36:15.393 に答える
0
> str(data)
'data.frame':   3 obs. of  4 variables:
 $ analysedDataID  : num  1 2 3
 $ plateWell       : Factor w/ 3 levels "a","b","c": 1 2 3
 $ screenPlateOrder: num  1 2 3
 $ wellData        : Factor w/ 3 levels "A","B","C": 1 2 3

数値を整数に、因数を文字にしようとしましたか?

 data <- data.frame(analysedDataID=as.integer(c(1,2,3)), plateWell=c("a","b","c"), screenPlateOrder=as.integer(c(1,2,3)), wellData=c("A","B","C"),stringsAsFactors=FALSE)
于 2011-08-02T10:44:08.767 に答える