人に聞けない痔の悩み、これでスッキリ >>

社内にOracleデータベースでのシステムが立ち上がっているのですが、管理帳票の出力用に、OracleのデータをAccessで読み込みたいと思っています。
テーブルのリンクそのものは知っており、成功しているのですが、Oracleデータベースのデータを壊さないようにするため、このリンクテーブルを読み取り専用にしたいと思っています。どのようにすれば良いでしょうか。

なお、Oracle側で読み取り専用ユーザを作成して、そのユーザでリンクすれば良いことは理解していますが、それは最後の手段にしたいと思っています。別の方法でうまくできないでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

Accessからは、ODBCでOracleにリンク接続しているのでしょうか?


それであれば、ODBCの設定画面(コントロールパネル→管理ツール→データソース(ODBC))で、「読み取り専用接続」という設定がありますので、そこにチェックをすればOKだと思います。
    • good
    • 0

>リンクテーブルを読み取り専用にしたいと思っています。

どのようにすれば良いでしょうか。

ADOでadLockReadOnlyで開けば読み取り専用になります。
一般的に例えば
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

cn.ConnectionString = "Provider=MSDAORA; Data Source=xxx; USER ID=xxx; PASSWORD=xxx;"
cn.Open
rs.Open "オラクルのテーブル", cn, adOpenKeyset, adLockReadOnly
    • good
    • 0

Oracle側で読み取り専用ユーザを作成するというのが一般的ですが、それが最後の手段となると…



リンクテーブルではなく、インポートしてはどうですか?
管理帳票の出力となると、一旦〆てからの作成になると思うので、不都合はないと思いますが…

インポートの時間はかかるでしょうが、インポートするテーブルに必要なインデックスを作成すれば、処理時間は短くなりますよ。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QODBCリンクの際にACCESSでは読み取り専用にしたい!

OracleデータベースをODBCでリンクしてACCESSで利用する際に、ACCESSではデータの更新をできないように(つまり読み取り専用に)したいんですが、どのように設定したらいいのでしょうか?基本的な質問で恐縮ですが、ご教示ください。

Aベストアンサー

ODBC接続で使用するOracle側のユーザにselect権限だけ付与すればどうでしょうか?
つまり・・・ACCESSで使用するOracle側のユーザと、更新作業?を行うユーザを分けるということです。

すんません。ACCESSでもできそうだけど、そっちはよくしらないので・・・・。
意図していることと違ったらごめんなさい。

QAccessのリンクされたテーブルでリンク先ではデータを変更出来ないようにするには?

AccessでAに元のデータベースファイルがあり、そこに社員一覧のテーブルがあります。Bでその社員一覧のテーブルをリンクで取り込みました。社員一覧テーブルはリンク先のBでは編集・変更など一切出来ないようにすることは可能でしょうか?
他にも、元データのテーブルを参照するだけの(変更不可)の方法があれば教えて下さいませ。
どうぞよろしくお願い致します。

Aベストアンサー

リンクテーブルのプロパティには閲覧のみを許可する・・・
と言うようなものは有りませんので不可能かと思います。当方Access2002
2003や次期Accessがどうなっているのかは分かりませんけど。
データベースを共有して使用する方法
http://support.microsoft.com/kb/882219/ja
↑最後の方の関連情報もご覧下さい。

2002以前であれば
案1
社員一覧テーブルの更新頻度が少なければ、元のMDBにリンクするのではなく
ダミー(元のMDBのコピー)にリンクさせておき、
社員にはテーブルを変更しても正規のMDBには反映されない、
変更しても突然元に戻る場合がある、と通知する。
ご質問者は定期的に元MDBのデータをダミーMDBに反映させる。

案2
リンクテーブルとそれを使ったクエリは非表示にしておいて、
フォームを作成し、プロパティで編集ロックにしておく。
(少しでもAccessを知っている人には効き目が有りません。)

案3
リンクテーブルは作らないで全てVBA・SQL文で作る
作るのが面倒です。

案4
リンク先にあるようにユーザーレベルのセキュリティを設定すれば
運用は一番楽ですが、設定が分かり辛くて難しい。
Access データベースとそのオブジェクトにユーザーレベル セキュリティを設定する (MDB)
http://office.microsoft.com/ja-jp/assistance/HP052578501041.aspx
(全て表示をクリックしてみて下さい)

かな?

リンクテーブルのプロパティには閲覧のみを許可する・・・
と言うようなものは有りませんので不可能かと思います。当方Access2002
2003や次期Accessがどうなっているのかは分かりませんけど。
データベースを共有して使用する方法
http://support.microsoft.com/kb/882219/ja
↑最後の方の関連情報もご覧下さい。

2002以前であれば
案1
社員一覧テーブルの更新頻度が少なければ、元のMDBにリンクするのではなく
ダミー(元のMDBのコピー)にリンクさせておき、
社員にはテーブルを変更しても正規のMDB...続きを読む

QACCESSにODBC経由でORACLE接続

ACCESSのプロジェクト(帳票印刷など)ですが、データはORACLEに置いています。
ORACLEのクライアントをインストールしないで、ODBCを経由して、接続できますか?

Aベストアンサー

お使いになるODBCドライバによりますが、MS製ドライバもオラクル製ドライバも
ドライバの稼働条件がオラクルクライアント必須のため、そのような事は出来ません。
(ODBCドライバ内部で、オラクルクライアントを使うような仕組みです)

ただし、オラクルクライアントの全てを必要とするわけではありません。
(NETサービス等必要なモノだけインストールすれば良い)

Qaccess ODBCリンクテーブルの作り方

 自分のPCで、あるaccessの業務システムを作成し、それを数人で共有してデータの入力をするようにする為に、ODBCリンクテーブルというものを作る必要があると思っています。

 既存で業務的に違う別のシステムがあり、そこでODBCリンクテーブルというものは使用しています。(退職した前担当者が作成。)

 ODBCリンクテーブルというものは、どのうようにして作るのですか?
 (地球マークのテーブルです。)

Aベストアンサー

Accessのテーブルの画面で
何もないところで右クリックすると、「テーブルのリンク」とあると思います。
それをクリックすると今度はファイルを開くダイアログが出てきます。
そこの「ファイルの種類」のドロップダウンリストの一番下の「ODBCデータソース」
を選択するとODBCデータソースの選択画面になります。

但しここで選べるものは、あらかじめ登録されているODBCデータソースだけです。
ODBCデータソースは各PCでコントロールパネル(管理ツール)のODBCデータソースから設定する必要があります。
(ODBCデータソースの登録の方法については長くなるので省きますが)

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QOracle10g・・ODBCで接続できない

Oracle10gのStandardEditionをサーバーにインストールし、データベースを作成しました。

それに対してクライアントにも10gをインストールし、ローカルメソッド名を設定して、接続テストも通りました。SQL*Plusを起動して接続することもできました。

ですが、Accessを使ってテーブルの中身を見ようと思い、ODBCを設定したのですが接続テストをすると固まってしまいます。どうすればODBCで接続できるようになるのでしょうか?

Aベストアンサー

tnspingの引数がわかりませんが、成功しているようですね。

tnspingはリスナーへの接続が成功するかどうかの確認です。

リスナーに接続した後、クライアント用に専用サーバプロセスが起動し、DBに接続します。
この部分が失敗しているようです。

要はリスナーには接続できているが、DBには接続できていない状態です。

一点気になる点がありますので、それを変更して試してもらえますか?

tnsnames.oraを変更してください。

> (CONNECT_DATA =
> (SERVICE_NAME = dev.dev_domain)
> )
> )

この部分を

(CONNECT_DATA=(SID=ORCL)

に変更してください。
SIDはサーバ側のlistener.oraかlsnrctlで調べてみてください。
(間違うとどつぼにはまりますので慎重に確認してみてください)

念のため、tnsnames.oraのサンプルをアップしておきます。

DEV =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST = DEVSV001)(PORT = 1521))
)
(CONNECT_DATA=(SID=ORCL))
)

SIDだけ違ったら変えて、既存のtnsnames.oraと入れ替えてもかまいません。

これでも不可な場合、サーバ側のlistener.oraと
> lsnrctl status
の出力結果を補足に記入してみてください。

たぶんいけると思うのですが...。

tnspingの引数がわかりませんが、成功しているようですね。

tnspingはリスナーへの接続が成功するかどうかの確認です。

リスナーに接続した後、クライアント用に専用サーバプロセスが起動し、DBに接続します。
この部分が失敗しているようです。

要はリスナーには接続できているが、DBには接続できていない状態です。

一点気になる点がありますので、それを変更して試してもらえますか?

tnsnames.oraを変更してください。

> (CONNECT_DATA =
> (SERVICE_NAME = dev.dev_domain)
> )
> )

...続きを読む

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

QODBCで接続するとDBに変更/追加出来ない。

SQLServerのフロントエンドとしてACCESSを使用しDBを参照しています。
SQLServerには、5つのテーブルを用意しています。
1つのテーブルは変更も追加も出来るのですが他のテーブルが参照のみとなってしまって困っています。
何が問題なのか、ご存知の方教えて頂けますでしょうか。

環境
SQLServer2005Express
Access2002

よろしくお願いします。

Aベストアンサー

リンクテーブルならば、更新できないテーブルに主キーを設定していますか?または、主キーを指定してリンクしましたか?

QOfficeアクセス テーブル「テキスト型」⇒「日付型」への変換について

テーブルにデータが保管されており、そのフィールドの一つに「テキスト型」で”20080301”のようなデータを持っています。これを「日付/時刻型」”2008/03/01”のように変換したいのですが、どのようにすればよいのでしょうか。

※ちなみにこのオリジナルデータは毎日、自動的にテーブルにダウンロードされており、このテーブル自体の型を予め「日付/時刻型」に変換すると、日々のデータ取得時にエラーとなってしまいます。ですので、「日付/時刻型」のフィールドを持った新規のテーブルに、この”20080301”のデータを変換し格納したいのですがどのようにすればよろしいでしょうか。

テーブル⇒デザインより、該当のフィールドの型を「テキスト型」⇒「日付/時刻型」へ直接変換してしまうと、「データの変換中にエラーが発生しました。○○件のレコードのデータが失われました。」と表示されます。素人のため、なるべく追加クエリや更新クエリや簡単な関数のみでの方法を教えていただけたら幸いです。

Aベストアンサー

テーブルに日付時刻型フィールドを追加して、
更新クエリを使って、#1さんが提案されている
数式を使えばよいのでは?

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング