2017-02-07 1 views
0

を使用して特定の行をクリアします。テーブル全体を上書きするのではなく、そのテーブルから特定の行だけを削除してから、データフレームを最後に追加する方法を探しています。は、私は部分的にデータフレームを使用してMicrosoft Accessのテーブルを上書きする<strong>RODBCパッケージ</strong>を使用したいRODBC

フレームを追加するための私の方法は非常に簡単です。私は次の関数を使用します。

sqlSave(ch, df, tablename = "accessTable", rownames = F, append = T) 

挑戦は私が事前にAccessのテーブルから特定の行番号をクリアすることができます機能を見つけることです。彼らは、全体として、テーブル全体を削除するか、クリアするか以来sqlDropsqlClear機能は、そこに私を取得していないようです。

このタスクを達成するために、任意の勧告ははるかに高く評価されるだろう!

+0

アクセスフレームと同じ正確な列数ですか? – Parfait

+0

はい、データフレームの構造はAccessテーブルとまったく同じです。フレームの大部分は基本的に新しい時系列データで構成されていますが、重複するエントリもあります。したがって、追加する前に元の表からこれらの重複レコードを削除しようとします。私は現在潜在的な解決策のためにRODBCパッケージの* sqlQuery *関数を調べています... – lombax2019

+0

FYI、これらの重複するエントリには、更新された結果が潜在的に含まれています。そのため、データフレームのバージョンを保持し、Accessテーブルのバージョンを削除する必要があります。 – lombax2019

答えて

0

確かに、わざわざappend = FALSEと元のAccessテーブルを上書きし、現在のデータフレームと最後にsqlSaverbindそして、あなたが維持したい行のあなたのAccessテーブルをサブセットするsqlQueryを使用することを検討してください。もちろん

# IMPORT QUERY RESULTS INTO DATAFRAME 
keeprows <- sqlQuery(ch, "SELECT * FROM [accesstable] WHERE timedata >= somevalue") 

# CONCATENATE df to END 
finaldata <- rbind(keeprows, df) 

# OVERWRITE ORIGINAL ACCESS TABLE 
sqlSave(ch, finaldata, tablename = "accessTable", rownames = FALSE, append = FALSE) 

あなたはまた、指定されたロジックあたりのテーブルから行を削除し、その後sqlSaveで(上書きしない)を追加、カウンターの操作を行うことができます

# ACTION QUERY TO RUN IN DATABASE 
sqlQuery(ch, "DELETE FROM [accesstable] WHERE timedata <= somevalue") 

# APPEND TO ACCESS TABLE 
sqlSave(ch, df, tablename = "accessTable", rownames = FALSE, append = TRUE) 

キーを指定するSQLロジックを見つけることですあなたが保持しようとする行。

+0

ありがとう、パフェ。 2番目のスクリプトは私の解決策だと思われます!私は最初のオプションを考えていましたが、テーブルをインポートすることを避けたかったのです(かなり大きかったので)。私はすぐにコードをテストします... – lombax2019

+0

ちょうどフォローアップ:このアプローチは完全に働いた。再度、感謝します。 – lombax2019

関連する問題