- 締切済み
AccessからOracleへのリンクテーブル時の型情報?
Access始めたばかりの初心者です。 現在Oracle10gのデータベースのとあるテーブルを をAccess2000でリンクし、クエリで抽出したものをレポートに表示 しようとしています。 そのテーブル上に、 Oracle上ではVARCHAR2(6バイト)の日付データがあります。 例) 200806 これをAccessのクエリ上で変換し、 "6月" と表示させたいのですが、 なぜかうまくいきません。 Oracle上の項目名が YM だとすると、 Replace(Right([YM], 2), "0", "") & "月" こういった関数でうまくいきそうなものですが・・ もしかしてOracleのVARCHAR2はリンクすると文字列型以外の型として 扱われるのでしょうか・・ どなたかご存じの方、ご教授くださいませ。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- 3rd_001
- ベストアンサー率66% (115/174)
Oracle11gとAccess2000で試しました。 (1)オラクルデータ型 SQL> desc xxx 名前 NULL? 型 ------ ------ ------------------------------------ XXX VARCHAR2(6) (2)Accessリンクテーブル XXX テキスト型 (3)SQLの実行結果 SELECT Replace(Right([xxx], 2), "0", "") & "月" FROM SCOTT_XXX; 6月 提示されたSQLは通りましたよ。 上手くいかないとは、どういう事象が発生しているのでしょうか。
- nda23
- ベストアンサー率54% (777/1415)
VARCHAR2は文字型です。テーブルをデザイン・ビューで見てください。 >なぜかうまくいきません。 何がどう上手くいかないのでしょう? (1)クエリの実行時エラー ア.Oracleのエラー イ.Accessのエラー (2)実行されるが、結果が期待したものと異なる。 ア.どのように異なっているか これによって原因が分かるかも知れません。
お礼
すいません、 要は「何がわかっていないかわかっていない」 という超初心者状態です。。 ええと (1)オラクルのリンクテーブルを作成(仮にTBLという名前にする) (2) TBL からデータを抽出するクエリを作成 (3) クエリの結果をレポートで表示 その際、200806 を6月と表記したいため、 レポートにはりついているエディットボックス? のようなものの中に関数を・・ それが Replace(Right([YM], 2), "0", "") & "月" です。実行するとその領域が #Error となります。 そうとうイライラされるかと思いますがご容赦ください。。
- nora1962
- ベストアンサー率60% (431/717)
access2000ではクエリのSQLで直接replace関数を使えなかった気がします。 MDBのモジュールで Public Function myreplace(source, str1, str2) myreplace = Replace(source, str1, str2) End Function という関数を定義して myeplace(Right([YM], 2), "0", "") & "月" でやってみてください。
補足
ご回答ありがとうございます! >access2000ではクエリのSQLで直接replace関数を使えなかった気がします。 そ、そんな仕様があるのですね。。 了解しました。 ちょっとやってみます。
お礼
なるほど、SQLを発行して試すという手がありますね。。 とりあえずSQLをスマートに発行する方法が よくわからなかったのでフォームをひとつ作り、 そこからボタンを押下した時のコールバック関数の中で 上記SQLを発行させてみたところ、 問題ありませんでした。 とすると表示上のエラーかなにかだと思います。 事象はQ2の方の返答で説明させていただきました。 分かりづらくてもうしわけございません。。
補足
自己解決致しました! どうやらフォームのコントロール識別名とクエリの項目名 が同じだと、表示がうまくいかないようです。 テキストボックス名 :YM クエリの項目名 :YM ↓ テキストボックス名 :日付 クエリの項目名 :YM これでなんとかうまくいきました。 いろいろとお知恵を貸してくださいましてありがとうございました。