『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

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

環境
SQLServer2005Express
Access2002

よろしくお願いします。

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

A 回答 (1件)

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

    • good
    • 0
この回答へのお礼

ありがとうございました。主キーを設定したら改善しました。

お礼日時:2009/02/12 01:13

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

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

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

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

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

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

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

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

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

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

Aベストアンサー

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

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

QSQLサーバーのテーブルの値が更新できません

お尋ねします。
SQLサーバー2005にDB1というデータベースにdbo_TB1というテーブルがあります。そのテーブルの特定の列の値を更新したいので、AC.mdbというアクセスのファイルにテーブルのリンクをし、更新したいファイルを用意して、アクセスのクエリでデータを更新しようとしましたところ、更新ができませんでした。
 dbo_TB1を更新可能にするためには、どのようにして権限を与えればいいでしょうか。
 SQLサーバー2005の知識を習得しようと学習を始めたばかりで、よく理解できていません。よろしくお願いします。

Aベストアンサー

通常SQL Serverの権限はデータベース/ユーザ単位につけるもので、個別のテーブルに権限をつけることは極めて稀です。
また、SQL Serverにはテーブル単位で読み取り専用にする機能もありません。
実際に更新権限をはずしても、表示されるメッセージは異なります。
ということで、ずいぶん悩みましたが、可能性が1つありました。

そのテーブルには主キーがなく、しかも、主キーを指定しないままリンクしたのではありませんか?
主キーのないリンクテーブルは更新できません(ODBCドライバの仕様上)。
その点を確認してみていただけますか?

QAccessでデータ更新できない

Accessのクエリでデータを書き換えようとしてもできません。データベースは、更新可能な権限でアクセスしており、データソースも読み取り専用にチェックをつけていません。SQL*plusにて、おなじサービス名、ユーザー、パスワードで、updateはできるのです。どなたかご教授お願いします。

Aベストアンサー

オラクルにODBC接続で、Accessでリンクテーブルを張っているのであれば、オラクルのテーブルにキーは張ってありますか?
リンクテーブルを張るときに、キーの問い合わせダイアログが出ているようでは、クエリやテーブルからのExcelのセル感覚での更新はできませんよー

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

QAccessとSQL Serverの連携について

現在Accessで組まれているデータベースがあるのですが、複数人で入力をする必要が出てきたため、SQL Serverへ移行したいと思っています。
ただ、まだデータベースの内容が完全にFIXしておらず、項目に変更や追加が発生する可能性があります。

そこで、
●Accessを管理画面として使い、
●Access上で内容を変更したら、システム全体もその通り変わる
ような仕組みを作りたいのですが、可能でしょうか。
(完全にSQL Serverへ移行するのではなく、AccessとSQL Serverを連携させる?)

よき方法がありましたら教えて頂けましたら幸いです。
ちなみにコストはあまり大きくはかけられません・・。
どうぞよろしくお願いします。

(※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。なお、説明がおかしなこともあるかと思いますがご容赦ください。)

Aベストアンサー

>※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。

でもやることは十分玄人の領域な気が…。なので簡単に、は不可能でしょう。
以下、#1さんと同じように、AccessファイルからSQLServerへデータ読込、書込する環境を構築することを目指します。違うのは概要だけ。#1さんはきちんとシステムを構築する方法を書かれていますが、私は概要だけ。なんで概要だけかは後述。

(1)SQL Server Expressをダウンロードして、サーバー(もしくはサーバーに見立てたPC)にインストール。
(2)Accessのテーブルを(1)のSQL Serverに作成。
(3)ここからはPC側の作業
(4)ODBC接続を作成
(5)現行のAccessに(4)を使ってリンクテーブル作成。
(6)(5)のAccess内のクエリ、フォーム、レポートなどを必要に応じた修正を行う。
(7)動作確認
(8)各PCにODBC接続を設定&Accessファイルを配布。

概要はここまでです。如何でしょう、ご自分でできそうですか?

作業の概要はこの通りなんですが、サーバー機の選定とか"細かい"作業はかなり省略…というか書いてません書けません。特に(6)は実際にAccessファイルを見ないときっちりアドバイスはできませんし、作業ボリュームや難易度も見えてきません。…ということで(業者への発注は想定外のようですがw)業者も見積には難渋するでしょう。さくっと見積もりが出てくることもあるでしょうけど、かなりバッファをとった高額なお見積りかと。正直、見積もり作るのにお金がほしい内容です。

どうしてこんなことをグチグチ書いているかというと、大変申し上げにくいのですが、自称素人の方には難易度高め。業者に任せるか、類似のパッケージを探された方が、不具合などのリスクも軽減され、業務への影響も少ないかと。

ご健闘をお祈りしております。

>※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。

でもやることは十分玄人の領域な気が…。なので簡単に、は不可能でしょう。
以下、#1さんと同じように、AccessファイルからSQLServerへデータ読込、書込する環境を構築することを目指します。違うのは概要だけ。#1さんはきちんとシステムを構築する方法を書かれていますが、私は概要だけ。なんで概要だけかは後述。

(1)SQL Server Expressをダウンロードして、サーバー(もしくはサーバーに見立てたPC)にインストール。
(2)Accessのテー...続きを読む

QAccess:リンクテーブルでの参照、更新処理

マスターmdbにメインとなるテーブルを置き
(ID,課,担当者名,商品番号,商品名,価格・・・)
3課まであるのですが、各課の専用フォルダに編集するmdb
(仮に編集mdbとします)を置いて
メインテーブルをリンクし、同じフィールドを用意した編集用テーブルを置き、フォームやクエリを作成して作業しようとしています。
基本的に同じ顧客に一斉に手を加える事はないので
編集用テーブルに一旦格納したデータを追加クエリでリンクしたメインテーブルへ書き込み、削除クエリで編集用テーブルを綺麗にしています。
が。そもそも新規ばかりではなくメインテーブルに既存のデータを読み込んで編集したい事もあります。
この処理をどうしたら良いのか分かりません。誰かがメインテーブルを参照していたら他の人が見れないと思うし、1レコードだけ見るのであればそれだけ一旦編集用テーブルへ置けば良いのかと思いましたが、
一覧を見てソートしてみたりする事もあります。
管理者が全部のデータを掌握したいのでマスターmdbにメインとなるテーブルを置いたのですが、これを課ごとのテーブルに分ければ良いのでしょうか?
Accessをいじればいじる程毎回発見がありますので、知らないだけで他に簡潔な方法などありましたら教えて下さい。宜しくお願いします。

マスターmdbにメインとなるテーブルを置き
(ID,課,担当者名,商品番号,商品名,価格・・・)
3課まであるのですが、各課の専用フォルダに編集するmdb
(仮に編集mdbとします)を置いて
メインテーブルをリンクし、同じフィールドを用意した編集用テーブルを置き、フォームやクエリを作成して作業しようとしています。
基本的に同じ顧客に一斉に手を加える事はないので
編集用テーブルに一旦格納したデータを追加クエリでリンクしたメインテーブルへ書き込み、削除クエリで編集用テーブルを綺麗にしてい...続きを読む

Aベストアンサー

> メインテーブルをリンクし、同じフィールドを用意した編集用テーブルを置き、
(中略)
> 編集用テーブルに一旦格納したデータを追加クエリでリンクしたメインテーブルへ
> 書き込み、削除クエリで編集用テーブルを綺麗にしています。

これができているのでしたら、既存データの編集もそれほど難しくはないかと思います。
但し、1画面で「上書き更新」と「削除」の双方に対応すると少し複雑になりますので
(→新規追加/既存編集/既存削除とも、同時に複数レコードを扱うことを想定)、
ここでは更新と削除は別として考えることにします。
(メニュー画面に、「新規追加」「既存編集」「データ削除」の3つのボタンがあって、
 それぞれ専用のフォームがあるイメージです)

現在行われている「新規レコードの追加」と、今回ご希望の「既存レコードの編集」
及び「既存レコードの削除」を比較して、概要を説明してみます:

<新規レコードの追加>
1)【削除クエリ】編集用テーブルのレコードを全て削除
 ※前回作業時に、何らかのエラーで削除が行われなかった場合への対応です。
2)【ユーザー】編集用テーブル(を元にしたフォーム)に対して、新規レコードを追加
3)【追加クエリ】コマンドボタンのクリックで、編集用テーブルからメインテーブルに
 書き込み
4)【削除クエリ】編集用テーブルのレコードを全て削除

<既存レコードの編集>
1)【削除クエリ】編集用テーブルのレコードを全て削除
 ※編集用テーブルは、新規レコードの追加用とは別に作成し、「更新」フィールド
   (データ型はYes/No型、既定値はNo)を追加しておきます。
2)【追加クエリ】メインテーブルから編集用テーブルに書き込み
 ※新規追加の時とは逆方向にデータをコピーするということです。
  なお、追加クエリでも選択クエリと同様に、絞り込み条件を指定できますので、
  担当の課に限定するとか、更に商品名を曖昧検索で抽出する、といったことも
  検討してみて下さい。
3)【ユーザー】編集用テーブル(を元にしたフォーム)に対して、既存レコードを変更
 ※フォームのプロパティシートの『データ』タブで以下を設定しておきます:
   「追加の許可」=「いいえ」、「削除の許可」=「いいえ」
 ※フォームの「更新後」イベントで、「更新」フィールドの値を「Yes」にします。
  (フォームにはチェックボックスとして設置の上、プロパティシートの「書式」タブで
   「可視」を「いいえ」にしておきます)
4)【更新クエリ】コマンドボタンのクリックで、編集用テーブルで「更新」フィールドが
 Yesのもののみ、メインテーブルのレコードを上書き
 ※双方のテーブルで、共にIDが主キーだと思いますので、このIDで両テーブルを
   結合させてクエリを作成し、更新クエリのデザインビューの「レコードの更新」欄に
   「[編集用テーブル].[担当者名]」等を記入します(→添付画像)
 ※主キーであるIDは、上書き更新の対象から外し、それ以外のフィールドを更新。
5)【削除クエリ】編集用テーブルのレコードを全て削除

<既存レコードの削除>
1)【削除クエリ】編集用テーブルのレコードを全て削除
 ※編集用テーブルは、既存レコードの編集用のものと同様に新たに作成し、
  「削除」フィールド(データ型などは「更新」と同じ)を追加します。
2)【追加クエリ】メインテーブルから編集用テーブルに書き込み
3)【ユーザー】編集用テーブル(を元にしたフォーム)に対して、削除したいレコードの
 「削除」チェックボックスをYesに更新
4)【削除クエリ】コマンドボタンのクリックで、編集用テーブルで「削除」フィールドが
 Yesのもののみ、メインテーブルのレコードを削除
 ※この削除クエリも、上と同様にIDで双方のテーブルを結合させて作成します。
5)【削除クエリ】編集用テーブルのレコードを全て削除


・・・以上のように、新規レコードの追加の場合に比べて、メインテーブルからの
レコードのコピーが入るのと、編集用テーブルからメインテーブルへの反映に使用する
のが追加クエリか更新クエリ/削除クエリかの違い、です。
(・・・そのわりに、長文になってしまいましたが・・・(汗))

> メインテーブルをリンクし、同じフィールドを用意した編集用テーブルを置き、
(中略)
> 編集用テーブルに一旦格納したデータを追加クエリでリンクしたメインテーブルへ
> 書き込み、削除クエリで編集用テーブルを綺麗にしています。

これができているのでしたら、既存データの編集もそれほど難しくはないかと思います。
但し、1画面で「上書き更新」と「削除」の双方に対応すると少し複雑になりますので
(→新規追加/既存編集/既存削除とも、同時に複数レコードを扱うことを想定)、
ここでは更新と削...続きを読む

QODBC--リンクテーブル'XXXX'での更新に失敗しました

同じ現象がなさそうでしたので質問させていただきます。
インポートしたテーブルであれば問題なくレコードの更新が出来るのですが
実際のODBCで繋いだDBでは「ODBC--リンクテーブル'XXXX'での更新に失敗しました」となってしまいます。

DAOとADO両方試してみました。以下のものになります

こちらは教えていただいたものです。

Private Sub Sample3()
Dim rs As New ADODB.Recordset
Dim i As Integer
Const フィールド名 As String = "連番" ' ☆1
Const テーブル名 As String = "元テーブル" ' ☆1
Const 抽出 As String = "登録番号" ' ☆1
Const 並び替え As String = "登録番号" ' ☆1

i = 1
rs.Source = "SELECT " & フィールド名 & " FROM " & テーブル名 & _
" WHERE " & 抽出 & " LIKE 'ZZZZ%' ORDER BY " & 並び替え & ";"
rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic
While (Not rs.EOF)
rs(フィールド名) = "ZZZZ" & Format(i, "0000")
rs.Update
rs.MoveNext
i = i + 1
Wend
rs.Close
End Sub

ADOだからダメなのかと思い
こちらは教えて頂いたものをDAOにしてみました。



Private Sub Sample3()
Dim Db As DAO.Database
Dim rs As DAO.Recordset
Dim i As Integer
Const フィールド名 As String = "連番" ' ☆1
Const テーブル名 As String = "元テーブル" ' ☆1
Const 抽出 As String = "登録番号" ' ☆1
Const 並び替え As String = "登録番号" ' ☆1

i = 1
Set Db = CurrentDb()
Set rs = Db.OpenRecordset("SELECT " & フィールド名 & " FROM " & テーブル名 & " WHERE " & 抽出 & " LIKE 'ZZZZ*' ORDER BY " & 並び替え & ";")

While (Not rs.EOF)
rs.Edit
rs(フィールド名) = "ZZZZ" & Format(i, "0000")
rs.Update
rs.MoveNext

i = i + 1
Wend
rs.Close
End Sub

両方とも「ODBC--リンクテーブル'XXXX'での更新に失敗しました」
となってしまいます。
どうすれば更新に失敗せずにできるのでしょうか?

同じ現象がなさそうでしたので質問させていただきます。
インポートしたテーブルであれば問題なくレコードの更新が出来るのですが
実際のODBCで繋いだDBでは「ODBC--リンクテーブル'XXXX'での更新に失敗しました」となってしまいます。

DAOとADO両方試してみました。以下のものになります

こちらは教えていただいたものです。

Private Sub Sample3()
Dim rs As New ADODB.Recordset
Dim i As Integer
Const フィールド名 As String = "連番" ' ☆1
Const テーブル名 As Str...続きを読む

Aベストアンサー

#1です


> やはりアクセス権限が怪しいですが、そのフィールドのみ書き込みで
> きなくするとか出来るのでしょうか?
> あるPCからなら書き込みできるとか・・・

PostgreSQL自体、1度触ったくらいなので、なんとも・・・
1つのフィールドだけと言うのも、変ですね
例えば、プライマリキーに設定されていて、他のテーブルとの関係で、操作出来なくなっているとか?考えられませんか?

「PostgreSQL」側で、操作可能な方法が、あるか?どうか?
そっちで、聞いてみるのも手かもしれませんね^^;

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QODBCの接続に失敗しました(3146)について

どうにもならなくて困ってしまいメールいたします。
現在、ウインドウズ98、アクセス2000という環境で作業をしています。このアクセスでは、日に1回、本社とのデータのやりとりを行っていますが、ある日から「ODBCの呼び出しに失敗しました エラーメッセージ3146」と出てしまうようになってしまいました。何が原因かもさっぱり分かりません。どんなことでもいいので助言お願いします。

Aベストアンサー

ODBCのエラーは、簡単には原因がわからない場合が
ほとんどです。

通常はコントロールパネルのODBCデータソースアドミニ
ストレータの「トレース」タブの中に、「トレースの開始」
というボタンがありますから、適当なファイル名を指定
してからこれを押します。

それからエラーがでる処理をAccessでやってみます。

するとODBCの呼び出し、通信の内容がログに吐かれます
からこれが解決の手がかりになると思います。専門家に
直してもらうにしてもこの情報は必要ですよ。

おそらく3146ならば、MDACがらみかと推測しますけど、
自信はありません。WindowsUpdateとかIEを6にしたとか
サービスパックとか・・考えられる原因はいっぱいあり
すぎて・・

QODBC接続で新しいレコードを追加できない

OS XP SP3、ACCESS2003 DBはSQLserver2005express です
SQL Server Management Studio Express を使って
新しいDB、テーブル、項目は作成できました。
また同じツールを使って手入力でデータを追記することもできます

質問はこのテーブルを ACCESSからODBC接続して
追加クエリーを実行したいのですが
リンクしてテーブルを開いた時点で新規レコードが追加できない状態です。

サーバーの更新をしたく、少ないデータであれば手入力でも
大量のデータでは…ACCESSのクエリーを使いたいと思っております。

ODBC接続の設定が読み取り専用になっているのか
そうであれば その設定はどこにあるのか 教えてもらえないでしょうか?

宜しくお願いいたします

Aベストアンサー

主キーが無いのでは?
AccessでODBC接続のリンクテーブルは
主キーがないと更新可能になりません。


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

人気Q&Aランキング