問題タブ [rodbc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
excel - RODBC を使用して数式を Excel ファイルに書き込む
RODBC
パッケージを使用して、データ フレームを Excel ファイルに書き込むことができます。
ここで、いくつかの式を含めたいと思います。たとえば=A1
、Excel ファイルを開くとそのように解釈されます。データ フレームにテキストとして「=A1」を含めると、Excel ファイルでは文字列エントリ「=A1」になり (数式バーに表示される値は'=A1
)、数式として解釈されません。
r - RODBC 使用時の MS Access ファイル名の取得
接続名を入力すると、 のような行が表示されDBQ=Path\to\DB
ます。この値を取得するにはどうすればよいですか? 私が試してみました
conn$DBQ
conn[DBQ]
conn['DBQ']
conn[,'DBQ']
値を返すものはありません。試しtypeof(conn)
てみたところ"integer"
、class(conn)
-> "RODBC"
、mode(conn)
->が得られ"numeric"
ました。
r - Access からの RODBC でのデータ インポート エラー
Access データベースで実行されたクエリの結果を R にインポートしようとしています。RODBC パッケージを使用して接続を確立でき、レコードを取得できるため、データベースとの接続は問題になりません。問題は、R に読み込むと 2 つの列が不正確になることです。
Access のクエリは、テーブルからデータを読み取り、実行した計算に基づいて 2 つの追加の列を生成します。18 列をインポートします。そのうち 16 列はテーブルから直接取得され、残りの 2 列は計算列です。アクセスでこのクエリを実行すると、すべて問題ありません。Access の 2 つの計算列の結果 (多くの IIF ステートメントの結果) (V1 および V2 と呼びます) は、クエリを実行した後、access で次のようになります。
V1 は 3 つの値 (A、B、C) を取り、V2 には約 -.35 から 1.5 の範囲の浮動小数点数が含まれます。
これらの値はまさに私が望んでいるものなので、アクセスで実行するとクエリが機能することがわかります。
R でこれらと同じ値を取得したいので、上記の結果を生成したのと同じクエリをアクセスで次のように実行します。
繰り返しますが、データベースとの接続は問題ではありません。R からこのクエリを実行しようとした後、2 つの計算列 (V1 と V2) の結果が、アクセスでクエリを実行したときの結果と一致しません。計算なしでテーブルから直接読み取られる他の列は、本来あるべき状態です。R V1 および V2 でクエリを実行すると、次のようになります。
V1 では、すべての値が同じになりました (A)。V2 の場合、一部の値は正しく読み込まれますが、すべてではありません。多くの値が 0 に変更され、V2 の最小値は -.07 になりましたが、アクセスで同じクエリを実行すると、V2 の最小値は -.35 になりました。0 に変更されていない値が正しいです。
私の次のアイデアは、アクセスのクエリからテーブルを作成し、その新しいテーブル全体を読み込もうとすることです。ただし、最初に計画した方法でデータを取得することを強く望んでおり、将来的に回避できるように、この問題を把握したいと考えています。
編集: 独自の作業の一部であるため、実際のクエリを表示することはできませんが、非常によく似たクエリを次に示します。
rodbc - RRODBC-sqlSaveの10進精度の問題
RODBCを使用してRからOracleへのsqlSaveを使用しています。小数点以下の桁数を保存し、小数点以下の桁数を増やしています。例えば:
Rからの195.45は次のように表示されます
Oracleの192.45000000000002
sql - RODBC: sqlUpdate() がインデックス列を認識しない
私のデータベーステーブルはおおよそ次のようになります。
最初の列 (ID1) は PK として定義されます。ただし、ID2 も一意です。
今、パッケージから変更FilePath2
しStatus
てRを使用できるようにしたいと思います。だから私は次のことを試します:sqlUpdate()
RODBC
ここdb.df
で は、データベース テーブル内の名前に対応する 1 つの行と列の名前を持つデータ フレームです (ただし、この場合、いくつかの列を省略しています。可能であれば、もFilePath1
省略したいと思います)。ID1
私の目的は、次のものを取得することです。
次のエラーが表示されます。
この問題の原因は何ですか?
編集:直接SQLクエリを送信することで問題を回避しました:
これはきちんとした方法ではないかもしれませんが、やるべきことを行います。しかし、私はまだ何が問題なのか理解していないsqlUpdate
ので、誰かがそれを明らかにしてくれることを願っています.
excel - Excel 列に先頭の NA が含まれている RODBC 読み取りエラー
R
パッケージを使用するために Excel シートを読み込んでいますRODBC
が、Excel ODBC ドライバーで問題が発生しました。(十分な) 先頭の NA を含む列は論理的に強制されます。
Excel では、データは次のように表示されます。
私はデータを読み込んだ:
これは、 2 番目の列全体を として読み取りますNA
。これは、論理的であると推測されているため、後続の数値が無効であると評価されているためだと思いますNA
。
この強制が論理にならないようにする方法を見つけようとしていますが、これがその後のエラーの原因になっていると思います。
SO を検索してこのQ+Aを見つけましたが、私は仕事をしていて、提案されているようにレジストリを編集して DWORD のデフォルトを変更することを許可される見込みはありません(ここで設定した値によって、事前に必要な NA の数が決まることを理解しています)。 Microsoft はデータ型を推測し、私の読み取りを爆撃します)。
今のところ、Excel でデータを反転させて、逆さまに R に読み込むのが最善の解決策ではないかと考えています。
私は良いハックが大好きですが、きっともっと良い解決策がありますか?
r - RODBC sqlQuery()は、正常に実行されるとエラーメッセージを返します
これは、時間に敏感な/緊急の問題です。RODBCパッケージを使用した多数のSQLクエリを含むRコードがいくつかあります。このコードは、専用のLinuxサーバーで毎朝実行されます。データを取得し、統計を実行して、データをMSSQLDBに挿入し直します。
今日、私たちのsysarchはUbuntu 12.04.1にアップグレードしました。それ以来、ODBCで多くの問題が発生しています。いくつかの変更を加えた後、ODBC接続を確立できるようになりましたが、今ではさらに大きな問題があります。基本的に、識別されたテーブルが作成/削除されても、CREATEまたはDROPコマンドを実行するたびにRODBCからエラーメッセージが表示されます。例(bts.connect
の結果ですodbcConnect([connection information])
):
したがって、#tempscoresテーブルが存在します
存在していても、ドロップすることは「できません」
しかし、私たちはそれを落としました。
また、作成することはできませんが、存在し、そこから選択することができます。
sqlQuery(bts.connect、 "SELECT OBJECT_ID('tempdb.dbo。#tempscores')")1 1066251024 sqlQuery(bts.connect、 "SELECT * FROM #tempscores")[1]ダミー<0行>(または長さ0 row.names)
私は機知に富んでいます。明日の朝、クライアントのためにこれを正常に実行するには、これが本当に必要です。誰かがこの奇妙な行動を引き起こしている可能性があるものを知っていますか?
mysql - tablename が 18 文字を超えると sqlSave が失敗する
現在、FTP サーバーから一連の .csv をダウンロードし、各 .csv を独自のテーブルとして MySQL データベースに配置するスクリプトを作成しています。
RCurl を使用して FTP から .csv をダウンロードし、すべての .csv を作業ディレクトリに配置します。各 .csv からテーブルを作成するために、テーブル名が .csv と同じ名前である RODBC パッケージの sqlSave 関数を使用しています。これは、.csv 名が 18 文字未満の場合は正常に機能しますが、それよりも大きい場合は失敗します。「失敗」とは、R がクラッシュすることを意味します。バグを追跡するために、sqlSave でデバッグを呼び出しました。
R をクラッシュさせる sqlSave が呼び出す関数が少なくとも 2 つあることがわかりました。1 つ目は RODBC:::odbcTableExists で、これは非表示の関数です。関数のコードは次のとおりです。
テーブル名の長さが 18 文字を超える場合、これは失敗します。
これを次のように変更して修正しました。
次に、assignInNamepace を使用してこのコード変更を行い、名前空間で同じ名前 (odbcTableExists) の関数を再割り当てします。
RODBC:::odbcTableExists が原因で問題が発生しなくなりました。ただし、sqlSave() 内から sqlwrite が呼び出されると、R は引き続きクラッシュします。sqlwrite でデバッグを呼び出したところ、テーブル名が長すぎると RODBC:::odbcColumns (別の非表示関数) がクラッシュすることがわかりました。残念ながら、以前のように RODBC:::odbcColumns を変更してバグを回避する方法がわかりません。
R 2.15.1 を使用しており、プラットフォームは x86_64-pc-ming32/x64 (64 ビット) です。また、これを仕事用のコンピューターで実行しようとしていることに注意してください。ただし、まったく同じコードを自分のコンピューターで実行しても、R はクラッシュしません (バグはありません)。職場のコンピューターは Windows 7 Professional を実行し、自宅のコンピューターは R 2.14.1 で Windows 7 ホーム プレミアムを実行します。
sql - RODBCはsqlQueryのテーブルにデータフレームを結合します
私は職場で RODBC を使用して DB2 データベースに接続してきましたが、これまでのところすべてうまく機能しています。sqlQuery を使用してテーブルをプルし、データベース内のテーブルを結合してからデータ フレームとして戻すことができます。ただし、SAS では、テーブルを取得して操作し、それらをデータベースに結合することで、プロセスを高速化することがよくありました。Rでこれをやろうとすると、問題が発生します。こんな感じでいきたいと思います。
問題は、R が「データフレーム」を認識しないことです。ワークスペースにどのような「スキーマ」があるのか わからないので、「schema.dataframe」部分と関係があると思います。sqlQuery でデータベースのテーブルにデータ フレームを結合する方法はありますか? または、どうにかしてデータ フレームを一時テーブルにして、そこから結合できますか?
sql - RODBCルックアップ用のSQLテーブルとしてRベクトルからルックアップリストを提供
R ベクトルに ID のリストがあります。
次のような句を含む RODBC sqlQuery を書きたいと思います
テーブル全体を読み取ってから、R 内の idList ベクトルにマージする必要がありますか? または、これらの値を RODBC ステートメントに提供して、関心のあるレコードのみを復元するにはどうすればよいでしょうか?
注:リストは非常に長いため、以下の回答のように個々の値を SQL ステートメントに貼り付けてもうまくいきません。