0

ODBC経由で Oracle テーブルのデータをレコードセットにフェッチするための vba コードがあります。ただし、Oracle テーブルにタイムスタンプ フィールドがある場合は、特定されていないエラーが表示されます。

100 以上のテーブルがあり、どのテーブルにタイムスタンプがあるかわかりません。データを取得するためにループ内のクエリの下で実行しています。

Query = "Select End_Time from MyTable" 'this table has End_Time timestamp(6) field
CmdSQLData.CommandText = Query
CmdSQLData.CommandType = adcmdText  
CmdSQLData.Timeout=0 set rs = CmdSQLData.Execute() 'This line shows unspecified error then the table is having timestamp field 
'Then code for store data here...

実行時エラー '-2147467259 (80004005)'; 不明なエラー

Oracle テーブルの構造は次のとおりです。

create table MyTable    (
Date_id Integer,
Date_Today Date,
End_Time Timestamp(6)
)

次のようなことを提案しないでください。

my_table から to_char(timestamp_field) を選択

上記のクエリを実行すると、問題は発生しません。 100以上のテーブルがあるため、テーブルにタイムスタンプフィールドがあるかどうかがわからない可能性があるため、レコードセットのタイムスタンプを処理するための永続的なコードが必要です

4

2 に答える 2

1

次のような問題が発生している可能性があります: https://forums.oracle.com/forums/thread.jspa?messageID=4210331

ODBC クライアントをアップグレードしてみてください。

于 2012-07-27T11:14:35.027 に答える
0

次のコードは私にとってはうまくいきます:-

Dim con As New ADODB.Connection
Dim cmd As New ADODB.command
Dim rs As New ADODB.Recordset

con.Open "DSN=Oracle", "test", "test"
con.Execute "drop table tstest "
con.Execute "create table tstest ( a int, b Timestamp(6))"
con.Execute "insert into tstest values ( 1, current_timestamp ) "

q = "select * from tstest"
cmd.ActiveConnection = con
cmd.CommandText = q
cmd.CommandType = adCmdText
Set rs = cmd.Execute

Debug.Print rs.Fields(1)

con.Close

これは、Oracle ドライバー バージョン 11.1.0.7 で ADO 2.8 を使用しています。

*注: Oracle ドライバーはOracleから提供されています- 動作させるには、次の操作を行う必要があります:-

Instant Client パッケージ - Basic
Instant Client パッケージ - ODBC

ドライバーを機能させるには、両方のパッケージが必要です。次に、ODBC データ ソースで Instant Client 接続を使用する必要があります。たとえば、次のようにします。

192.168.0.25:1521/orcl

IP:ポート/名前

于 2012-07-26T15:35:55.210 に答える