Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


804 / 2272 ツリー ←次へ | 前へ→

【9880】OpenRecordset ODBC呼出が失敗 人参 07/9/28(金) 15:15 質問[未読]
【9881】Re:OpenRecordset ODBC呼出が失敗 人参 07/9/28(金) 15:34 発言[未読]
【9882】Re:OpenRecordset ODBC呼出が失敗 クロ 07/9/28(金) 16:01 回答[未読]
【9883】Re:OpenRecordset ODBC呼出が失敗 人参 07/9/28(金) 16:14 発言[未読]
【9884】Re:OpenRecordset ODBC呼出が失敗 07/9/28(金) 17:19 発言[未読]
【9885】Re:OpenRecordset ODBC呼出が失敗 人参 07/9/28(金) 17:55 発言[未読]
【9894】Re:OpenRecordset ODBC呼出が失敗 07/10/1(月) 14:41 発言[未読]
【9895】Re:OpenRecordset ODBC呼出が失敗 人参 07/10/1(月) 17:08 発言[未読]
【9900】Re:OpenRecordset ODBC呼出が失敗 小僧 07/10/4(木) 11:56 回答[未読]
【9901】Re:OpenRecordset ODBC呼出が失敗 人参 07/10/4(木) 13:57 質問[未読]
【10019】Re:OpenRecordset ODBC呼出が失敗 VBWASURWTA 07/11/23(金) 15:46 発言[未読]

【9880】OpenRecordset ODBC呼出が失敗
質問  人参  - 07/9/28(金) 15:15 -

引用なし
パスワード
   環境:WindowsXP SP2、Access2003、Oracle8

Access2000(2002)では正しく動いているのですが、2003でエラーが出ます。

  Set WS = CreateWorkspace("ODBC_WS", "", "", dbUseODBC)
  Set CN = WS.OpenConnection("", dbDriverComplete, True, MYCONNECT)
  '------------------------------
  SEL_SQL = "SELECT * FROM TSY1 WHERE NENDO = '" & W_NENDO & "';"

  Set RS = CN.OpenRecordset(SEL_SQL)  ←ここでODBCエラーになります。


SEL_SQLの内容をいろいろ試した結果、
  SEL_SQL = "SELECT * FROM TST2;"
  ※別テーブル全件検索:OK

  SEL_SQL = "SELECT * FROM TST2 WHERE USER_ID = 'AAA';"
  ※別テーブル条件付き検索:OK

  SEL_SQL = "SELECT * FROM TSY1;"
  ※同テーブル全件検索:OK

  SEL_SQL = "SELECT * FROM TSY1 WHERE AREA_CD = 'TOKYO';"
  ※同テーブル別条件検索:OK

  SEL_SQL = "SELECT * FROM TSY1 WHERE NENDO = '2007';"
  ※同テーブル条件固定値検索:NG

(OKというのは、次のステップにちゃんと行くことです。)

この結果を見るかぎり、ODBC自体には問題なさそうで、
「NENDO」という項目に問題がありそうなのですが、
決定的な理由がわかりません・・。
2003から予約語になったとか??

どなたか、お分かりになる方いらっしゃいましたら、ご回答のほど
よろしくお願いします。

【9881】Re:OpenRecordset ODBC呼出が失敗
発言  人参  - 07/9/28(金) 15:34 -

引用なし
パスワード
   追記

>  SEL_SQL = "SELECT * FROM TSY1;"
>  ※同テーブル全件検索:OK

このパターンで次のステップに行った際の処理では問題なく所得できていました。

  R_CNT1 = 0
  Do Until RS.EOF
   R_CNT1 = R_CNT1 + 1
   LO_NENDO(R_CNT1) = Nz(RS!NENDO) ←ここ
   LO_AREA_CD(R_CNT1) = Nz(RS!AREA_CD)
   LO_CNTRY_CD(R_CNT1) = Nz(RS!CNTRY_CD)
   LO_CSTMR_CD(R_CNT1) = Nz(RS!CSTMR_CD)
   LO_CNTRY_NM(R_CNT1) = Nz(RS!CNTRY_NM)
   LO_CSTMR_NM(R_CNT1) = Nz(RS!CSTMR_NM)
   RS.MoveNext
  Loop

【9882】Re:OpenRecordset ODBC呼出が失敗
回答  クロ  - 07/9/28(金) 16:01 -

引用なし
パスワード
   外してたらスミマセン
NENDOのデータ型は?

SEL_SQL = "SELECT * FROM TSY1 WHERE NENDO = " & W_NENDO & ";"

とかではどうでしょうか?

【9883】Re:OpenRecordset ODBC呼出が失敗
発言  人参  - 07/9/28(金) 16:14 -

引用なし
パスワード
   クロ さん、早速のご回答ありがとうございました。

>NENDOのデータ型は?
 情報が足りなくて申し訳ありません、 VARCHAR2(4)です。
 <TSY1はOracleのDB。(ODBC接続)>

>SEL_SQL = "SELECT * FROM TSY1 WHERE NENDO = " & W_NENDO & ";"
>
>とかではどうでしょうか?
 今、試してみましたが、同様にエラーになりました。

【9884】Re:OpenRecordset ODBC呼出が失敗
発言    - 07/9/28(金) 17:19 -

引用なし
パスワード
   こんにちわ。雅です。

エラーの内容を詳しく書くともっと回答があるかもしれません。
For i = 0 To Errors.Count - 1
  Debug.Print Errors(i).Description
Next i

でわ。

【9885】Re:OpenRecordset ODBC呼出が失敗
発言  人参  - 07/9/28(金) 17:55 -

引用なし
パスワード
   雅さん、ご指摘ありがとうございます。

「S1000:[Oracle][ODBC][Ora]ORA-00911:文字が無効です。」

「ODBC--呼び出しが失敗しました。」
という内容でした。

【9894】Re:OpenRecordset ODBC呼出が失敗
発言    - 07/10/1(月) 14:41 -

引用なし
パスワード
   こんにちわ。雅です。

>「S1000:[Oracle][ODBC][Ora]ORA-00911:文字が無効です。」

これがOracleでだしてきているエラーです。
SQLの内容が正しいかを確認してみてください。
エンタープライズマネージャとかで実行できますか?
問題なければDSNの設定に問題がないか確認してください。

でわ。

【9895】Re:OpenRecordset ODBC呼出が失敗
発言  人参  - 07/10/1(月) 17:08 -

引用なし
パスワード
   雅さん、こんにちは。

>>「S1000:[Oracle][ODBC][Ora]ORA-00911:文字が無効です。」
>
>これがOracleでだしてきているエラーです。
>SQLの内容が正しいかを確認してみてください。
>エンタープライズマネージャとかで実行できますか?
>問題なければDSNの設定に問題がないか確認してください。

エラーの内容は理解しましたが、何故そのようになるのか・・。
最初の質問でも書いていますが、
【SEL_SQL = "SELECT * FROM TSY1 WHERE AREA_CD = 'TOKYO';"】
は、ちゃんと動くんです。(※同テーブルの別項目を条件とした検索)
このことにより、DSNの設定には問題がないと考えております。
また、SQLの内容にも疑う部分が・・。
【SEL_SQL = "SELECT * FROM TSY1 WHERE NENDO = '2007';"】
としただけで、エラーになってしまうんです。
DB上NENDOという項目はあります。VARCHAR2(4)

特殊文字など使用していないんですけどねぇ・・。(^^;

【9900】Re:OpenRecordset ODBC呼出が失敗
回答  小僧  - 07/10/4(木) 11:56 -

引用なし
パスワード
   ▼人参 さん:
こんにちは。

Oracleの知識はありませんのでご勘弁を…。

知人にテストしてもらった所、Oralce10gの環境では

SELECT * FROM TSY1 WHERE NENDO = '2007'

の様な SQLは問題なく通るとの事でした。


そこで考えられる事として
・Oracle8 のVarchar2 型に何かの問題がある
・ODBCに問題がある

という事が考えられますね。


雅さんからご提示して頂いた中に
>エンタープライズマネージャとかで実行できますか?

とありますが、
Oracle側でちゃんとSQL文が通ればODBCを疑ってみてはいかがでしょう。

お手元にOracle環境がない場合には
パススルークエリを使ってみてもいいかもしれません。

【9901】Re:OpenRecordset ODBC呼出が失敗
質問  人参  - 07/10/4(木) 13:57 -

引用なし
パスワード
   ▼小僧 さん:
ご回答ありがとうございます。

>知人にテストしてもらった所、Oralce10gの環境では
>
>SELECT * FROM TSY1 WHERE NENDO = '2007'
>
>の様な SQLは問題なく通るとの事でした。
>
>
>そこで考えられる事として
>・Oracle8 のVarchar2 型に何かの問題がある
>・ODBCに問題がある
>
>という事が考えられますね。

こちらでも試してみました。(事後報告でスミマセン)
ほぼ同じ環境(OS、Accessのバージョン)で、Oracle8において障害が出ました。
Oracle7.3では出ていません。(現行)
このことで、Oracle8を疑っていいのかなぁと思えてきました。

具体的な解決策はまだ何もありません・・。

【10019】Re:OpenRecordset ODBC呼出が失敗
発言  VBWASURWTA  - 07/11/23(金) 15:46 -

引用なし
パスワード
   ▼人参 さん:
こんにちは。

Oracle8はExcel VBAで試したことがあります。
この場合そのフィールドにパラメータとして渡すやり方になります。
ただExcel VBAなので同じような感じで出来るかはわかりません。
(実施していません)

Global Const ORAPARM_INPUT = 1
Global Const ORAPARM_OUTPUT = 2
Const test_Sql As String = "select test1fld from test_tbl where test1fld = :testno"

MstSeDatabase.Parameters.Add "testno", "test-1", ORAPARM_INPUT
MstSeDatabase.Parameters("testno").ServerType = ORATYPE_VARCHAR2

Set SelDynaset = MstSeDatabase.CreateDynaset(test_Sql, 0&)

ご参考までに。

804 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free