プロが教える店舗&オフィスのセキュリティ対策術

Access始めたばかりの初心者です。

現在Oracle10gのデータベースのとあるテーブルを
をAccess2000でリンクし、クエリで抽出したものをレポートに表示
しようとしています。
そのテーブル上に、
Oracle上ではVARCHAR2(6バイト)の日付データがあります。
例) 200806

これをAccessのクエリ上で変換し、 "6月" と表示させたいのですが、
なぜかうまくいきません。
Oracle上の項目名が YM だとすると、

Replace(Right([YM], 2), "0", "") & "月"

こういった関数でうまくいきそうなものですが・・
もしかしてOracleのVARCHAR2はリンクすると文字列型以外の型として
扱われるのでしょうか・・

どなたかご存じの方、ご教授くださいませ。

A 回答 (3件)

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関数を使えなかった気がします。

そ、そんな仕様があるのですね。。
了解しました。
ちょっとやってみます。

補足日時:2008/07/04 13:15
    • good
    • 0

VARCHAR2は文字型です。

テーブルをデザイン・ビューで見てください。

>なぜかうまくいきません。
何がどう上手くいかないのでしょう?
(1)クエリの実行時エラー
 ア.Oracleのエラー
 イ.Accessのエラー
(2)実行されるが、結果が期待したものと異なる。
 ア.どのように異なっているか

これによって原因が分かるかも知れません。
    • good
    • 0
この回答へのお礼

すいません、
要は「何がわかっていないかわかっていない」
という超初心者状態です。。

ええと
(1)オラクルのリンクテーブルを作成(仮にTBLという名前にする)

(2) TBL からデータを抽出するクエリを作成

(3) クエリの結果をレポートで表示
  その際、200806 を6月と表記したいため、
  レポートにはりついているエディットボックス?
  のようなものの中に関数を・・
  それが

  Replace(Right([YM], 2), "0", "") & "月"

  です。実行するとその領域が #Error となります。

そうとうイライラされるかと思いますがご容赦ください。。
  

お礼日時:2008/07/04 13:49

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は通りましたよ。
上手くいかないとは、どういう事象が発生しているのでしょうか。

この回答への補足

自己解決致しました!

どうやらフォームのコントロール識別名とクエリの項目名
が同じだと、表示がうまくいかないようです。

テキストボックス名 :YM
クエリの項目名 :YM



テキストボックス名 :日付
クエリの項目名 :YM

これでなんとかうまくいきました。
いろいろとお知恵を貸してくださいましてありがとうございました。

補足日時:2008/07/04 14:19
    • good
    • 0
この回答へのお礼

なるほど、SQLを発行して試すという手がありますね。。

とりあえずSQLをスマートに発行する方法が
よくわからなかったのでフォームをひとつ作り、
そこからボタンを押下した時のコールバック関数の中で
上記SQLを発行させてみたところ、
問題ありませんでした。

とすると表示上のエラーかなにかだと思います。
事象はQ2の方の返答で説明させていただきました。

分かりづらくてもうしわけございません。。

お礼日時:2008/07/04 13:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!