あなたの映画力を試せる!POPLETA映画検定(無料) >>

教えてください。
ACCESSのDBに複数のユーザが同時にアクセスして、
データを追加・編集したいのですが、
やはり、不可能でしょうか?

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

A 回答 (4件)

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして


データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」

というのがありますから、最初に作ったdb1をたどり、リンクしたいテーブルを
選択します。

こうすることにより、db2にdb1のテーブルがリンクされ(リンクテーブルと
呼ばれます。アイコンが通常のテーブルと違います。)、db1に格納された
データをdb2で編集することができます。

db2で、db1からのリンクテーブルを元にクエリーを作成することもできます。
リンクテーブルに対してできないことはテーブル構造の変更くらいで
他のことはだいたいできると思っていいかと思います。

このような形をとれば、ローカルエリアネットワーク内の複数のコンピュータ
から同時に同じアクセスデータベースにアクセスすることは可能かと思います。

このやり方にはおそらく問題もあるだろうと思うのですが、昔私がやって
いた頃は、特段支障もなく業務を行なうことができました。問題は、これを
読んだ他の誰かが指摘してくださるかと思います。

同じレコードに複数ユーザが同じタイミングでアクセスするとややこしい
ことになります。これを回避するためには、db2にワークテーブルを備えておき、
リンクテーブルからレコードを一度db2に格納し、編集を終了したのちに
リンクテーブルのレコードを削除し、ワークテーブルで編集したレコードを
リンクテーブルに追加する、などのルーティンをマクロやVBAで構築するのが
よいかと思います。私はそのようにしていました。

他に、ADOを使う方法などもあります。方法はいくつかありますから、
少し研究してみるといいですよ。(^-^)

この回答への補足

ご回答ありがとうございます。
リンクテーブルのところまでは理解できました。

複数ユーザが、フォームを使ってデータを登録・編集するようにしたいのですが、
その場合、db2に対するフォームを作ればよいのでしょうか?

また、同じレコードに複数ユーザが同じタイミングでアクセスする説明なんですが、
動作はわかるのですが、それを実行するためのマクロ・VBAが分かりません…。
すいません、初心者なもので…。

補足日時:2004/03/09 13:21
    • good
    • 9

 #1 です。

当方で再現してみました。
 サーバー内に「db1.mdb(テーブル1)」を作成、パソコンA上のマイドキュメント内に「db2.mdb(テーブル1=リンク)」を作成、この「db2.mdb」をパソコンBにコピーし、パソコンAとBで同時にテーブル1への追加をしましたが、問題なくできました。
 やってみて気付いたのですが、当方ではテーブル1を作成する際、主キーとしてはオートナンバーのフィールドを設けましたので、キーの重複が発生していません。
 ひょっとして主キーのフィールドが手入力するようになっていて、かつ「重複なし」になっていませんか?
    • good
    • 4
この回答へのお礼

わざわざ、ありがとうございました。
主キーの設定等は問題なかったのですが、
同じDBは操作できましたが、同じレコードにアクセスするときに問題が発生してました。
別の方法で一応、逃げ対策ではありますが解決しました。
ありがとうございました。

お礼日時:2004/03/09 17:21

#2です。



>また、同じレコードに複数ユーザが同じタイミングでアクセスする説明なんですが、
>動作はわかるのですが、それを実行するためのマクロ・VBAが分かりません…。

動作が理解できるようでしたら、あとは確かにマクロやVBAを習得するのみです。
きっとイケますよ。フォームはdb2の中に作ってください。

残念ながら、マクロの組み方やフォームの作り方、さらにはVBAなどの詳しい
説明は、キリがないのでここではできませんし、とても1日2日で習得できるものでも
ないかと思います。そういう意味で、先にお示しした方法は、00hiroto00様が
現在急を要するようですと、有効性が薄いです。ごめんなさい。

ただ、今後もアクセスをお仕事などに使っていかれるようでしたら、
こういったことをステップにして少しずつ知らなかったことをご自分の
ものにしていかれると、スキルアップを図ることができるのではないかと
思います。

たいした回答もできませんですいませんでしたが、そんなところでお許しください。
    • good
    • 2
この回答へのお礼

いえいえ、ありがとうございました。
VBAの使用ではないのですが、ひとまず問題は解決しました。
ありがとうございました。

お礼日時:2004/03/09 17:19

当方ACCESS2000ですが、


 ツール→オプション→詳細
 既定の開くモード=共有モード
 既定のレコードロック=ロックしない
 レコードレベルでロックして開く=オン
これで実現できると思います。

他の方のために、バージョンなどを補足してください。

この回答への補足

回答有難うございます。
私の使用しているバージョンもACCESS2000です。

回答いただいた設定を確認いたしましたが、
最初からそのような設定になっていました。

しかし、同時に二人のユーザで同じテーブル等に追加処理を行うと、
最後に編集した方に「どちらの変更を保存しますか?」と表示されてしまいます。
二人の編集を別々のレコードでそれぞれ追加できませんか?

補足日時:2004/03/09 11:52
    • good
    • 1

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

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

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

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

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

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

QMS Accessを共有した際にファイルが壊れるのを回避する方法

ちょっとしたツールをAccessで開発したいのですが、
Accessファイルを共有するとファイルが頻繁に壊れると伺いました。

そこで以下のような回避策を考えてみたのですが、
効果はありますでしょうか。
これでは、あまり意味がないとか、他に注意したほうが良い点等ありましたら、アドバイスいただければと思います。

なお、ツールは、50名位が使用(同時アクセスは3名~4名程度)予定で、
サーバ上にメインのmdbファイル(以下「サーバmdb」)を、各クライアントにもそれと連携するmdbファイル(以下「クライアントmdb」)を置くことを想定しています。

(1) データは全てサーバmdbで保持する。クライアントmdbには、入力用のフォームと、サーバmdbから取得したデータを一時的に保持するテンポラリのテーブルを持つ。

(2) クライアントmdbからサーバmdbにアクセスし、必要なデータをクライアントmdbにインポートする。

(3) クライアントmdbで、取り込んでデータをもとに、データの追加・修正を行い、当該データをサーバの所定のディレクトリにCSVで出力する

(4) サーバmdbは、日次で、所定のディレクトに配置された、クライアントmdbから出力されたファイルを読み込み、データを更新する

(5) (4)の読込み・更新作業中は、クライアントmdbからサーバmdbにはアクセスしない(外部ファイルで制御)

以上です。
要は、クライアントmdbが、直接サーバmdbを更新しないようにし、参照のみにするということです。

よろしくお願いします。

ちょっとしたツールをAccessで開発したいのですが、
Accessファイルを共有するとファイルが頻繁に壊れると伺いました。

そこで以下のような回避策を考えてみたのですが、
効果はありますでしょうか。
これでは、あまり意味がないとか、他に注意したほうが良い点等ありましたら、アドバイスいただければと思います。

なお、ツールは、50名位が使用(同時アクセスは3名~4名程度)予定で、
サーバ上にメインのmdbファイル(以下「サーバmdb」)を、各クライアントにもそれと連携するmdbファイル(以下「ク...続きを読む

Aベストアンサー

No.1です。
「同時アクセス」という言葉は実にあやふやな言葉です。おそらく質問者さんやNo2さんのいう「同時アクセス」は同時に複数人がそのシステムを使用しているという程度の同時アクセスだと思います。
ところが世の中は広くて通常同時アクセスは、同時にデータベースの更新をする人の数を言います。通常データベースの更新は0.1秒とかで終わりますのでその0.1秒を同時に複数人がいくような状況を言います。

No2さんのシステムでは、「クエリ(実際にはDoCmd.RunSQL)で更新」が同時におこる状況を言います。
これが、たまたまであれ同時におこるとやばいわけです。No2さんのシステムはおそらく同時に更新は起こらないシステムなのではないでしょうか?

「数台で同時に入力が発生するテーブルについては 入力用の作業テーブルをクライアント側のプログラム用のMDB内に持たせました。」まぁそれでもいいですけど、.NETアーキテクチャはこんな感じですよね。私はこれはとっても嫌いです。本気で複数人がデータを入力したければ、1行ずつを瞬間瞬間でINSERTしていくべきだと私は考えてます。つまりテーブルあるいはデータベースをロックする時間はセッションを越えてはありえないと思っています。理由は、入力用の作業テーブルを作るとその内容を他人によってすでに変更されてるかもしれないからです。こういう事態についてマイクロソフトは、エラーとして対処せよと言ってますが、そんなことできるわけないですよね。面倒ですもの。

No.1です。
「同時アクセス」という言葉は実にあやふやな言葉です。おそらく質問者さんやNo2さんのいう「同時アクセス」は同時に複数人がそのシステムを使用しているという程度の同時アクセスだと思います。
ところが世の中は広くて通常同時アクセスは、同時にデータベースの更新をする人の数を言います。通常データベースの更新は0.1秒とかで終わりますのでその0.1秒を同時に複数人がいくような状況を言います。

No2さんのシステムでは、「クエリ(実際にはDoCmd.RunSQL)で更新」が同時におこる状況を...続きを読む

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で別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

QAccessのファイル共有がうまくできません。

Microsoft Accessの共有に関しての質問です。

一つのAccessのファイルを共有して複数のパソコンで同時に開きたい場合は、何か特別な設定が必要なのでしょうか?

Access2000を使用して顧客管理のデータベースを作成しました。
そのファイルを複数のパソコンから開けるようにしたく、現状では元のファイルを共有ドキュメントに入れて、複数台のパソコンでデスクトップにショートカットのアイコンを出しています。

しかし、他のパソコンでファイルを開いていると、もう一方のパソコンではアイコンをダブルクリックしても全く反応が無かったり、開く際に「セキュリティの警告」が表示され、そのメッセージ内にある「開く」をクリックするとようやく開けたりと、スムーズにできません。

ちなみに、元となるAccessのファイルは「オプション」内で「既定の開くモード」を「共有モード」にしてあります。

情報が少ないかもしれませんが、何か問題点、対処方法等が分かりましたら教えてください。
よろしくお願いします。

Aベストアンサー

Accessは元々スタンドアローン用に開発されたので
共有での使用は、設計段階から考慮してシステムを作らないと
MDB破損や、データの競合などが発生してしまうことがあります。

下記URLのサイトさんの説明がわかりやすく、非常に参考になります。
http://www.naboki.net/access/achell/achell_02.html

また、下記のURLも参考になると思います。
http://support.microsoft.com/default.aspx?scid=kb;ja;882219
http://support.microsoft.com/kb/300216/JA/
http://office.microsoft.com/ja-jp/access/HP052408601041.aspx

参考URL:http://www.naboki.net/access/achell/achell_02.html

QAccessを開くと「排他モードじゃないので変更しても保存できない」との旨の表示が出てしまう。

「Access 2000」を使用して顧客管理用のデータベースを作成し、複数のパソコンで使用できるように原本を共有ドキュメントに入れて、ネットワーク上の他のパソコンではショートカットを作成し、それぞれがそのデータベースを開いたり編集したり出来るようにしています。

しかし、特定のパソコンだけそのデータベースを開く際に「現在、このデータベースは排他モードでアクセスしていません。変更しても、後で保存できない可能性があります。」と表示され、中身を編集したり保存出来ないようになっています。

たしかに、「規定の開くモード」は「共有モード」になっており、排他モードにはしていないです。

この設定で会社の大多数のパソコンでは上記メッセージが出ることなくちゃんと編集ができるのに、どうして特定のパソコンだけこのようなメッセージが表示されて編集を保存できないのでしょうか?
現在の設定のまま使えるようにするための方法はありますでしょうか?

まだAccessを使い始めたばかりで、記載した情報も少ないかもしれませんが、何か分かりましたら教えてください。

「Access 2000」を使用して顧客管理用のデータベースを作成し、複数のパソコンで使用できるように原本を共有ドキュメントに入れて、ネットワーク上の他のパソコンではショートカットを作成し、それぞれがそのデータベースを開いたり編集したり出来るようにしています。

しかし、特定のパソコンだけそのデータベースを開く際に「現在、このデータベースは排他モードでアクセスしていません。変更しても、後で保存できない可能性があります。」と表示され、中身を編集したり保存出来ないようになっています。

...続きを読む

Aベストアンサー

> 特定のパソコンだけそのデータベースを開く際に「現在、このデータベースは排他モードで
> アクセスしていません。変更しても、後で保存できない可能性があります。」と表示

<可能性・1>
ご質問の「特定のパソコン」の『既定の開くモード』が「共有モード」で、「大多数のパソコン」では
「排他モード」になっているのだとすると、「現在の設定のまま」というのは難しいと思います。
(逆にいうと、ご質問の現象が『既定の開くモード』に起因したものなら、その設定の変更で対応
 できるはず、ということ)

なお、Accessの「排他モード」には、私が知る限り少なくとも2種類あります。
で、『既定の開くモード』で指定する「排他モード」であれば、Access2000では、実際には他の
人が使用中であっても、同じファイルを開くことができたと思いますので、まずはその設定を
変更することで問題が解決できないか、確認されてみてはいかがでしょうか。

2種類の排他モードについての参考として、以前の回答へのリンクを載せておきます:
http://oshiete1.goo.ne.jp/qa3688575.html
※念のため今回再試したところ、『既定の開くモード』の「排他モード」でも、重複起動させると
  「使用できませんでした」とのメッセージが返されました。(Access2003にて確認)
  もしかしたら、Office2003 SP2でこの辺りは修正が掛かったかもしれません。
  ただ、今回のご質問のAccess2000では、従来の動作のままのはずですので、試してみる
  価値はあるかと思います。


<可能性・2>
他の大多数のパソコンでも『既定の開くモード』が「共有モード」だとすると、上記の話は
成り立ちません。
・・・というより、同時に使用している場合、他のパソコンでも「後で保存できない可能性が」
とのメッセージが出るはずの状況です。(Accessの仕様として、そうなっているはず、と)

この場合は、念のため、他のパソコンのショートカットのリンク先が、本当にネットワーク上の
原本を開く形になっているか、確認してみてください。
というのは、Accessによるの運用方法として、「データを保存するテーブルのみのファイル」と
「フォームなど、テーブル以外のものからなるファイル」の二つを作成して、後者から前者に
テーブルのリンクを張る(リンクテーブル)、というものがあり、他のパソコンのショートカットが、
実は各パソコンにコピーされたファイル(フォームなど+リンクテーブル)にリンクしたもの、
という可能性が考えられるためです。
※これは、shocola_ttさん以外の方がそのデータベースを作成されたと想像しての回答です。

この構成の場合は、「特定のパソコン」にその原本のコピーを作成して、作業はこのファイル
で行う、という形にすれば、問題が解決すると思います。
(上記の通りなら、原本内にあるのはテーブルではなくリンクテーブルなので、入力/編集の
 対象となるデータ自体は共有されていることになります)

> 特定のパソコンだけそのデータベースを開く際に「現在、このデータベースは排他モードで
> アクセスしていません。変更しても、後で保存できない可能性があります。」と表示

<可能性・1>
ご質問の「特定のパソコン」の『既定の開くモード』が「共有モード」で、「大多数のパソコン」では
「排他モード」になっているのだとすると、「現在の設定のまま」というのは難しいと思います。
(逆にいうと、ご質問の現象が『既定の開くモード』に起因したものなら、その設定の変更で対応
 できるはず、というこ...続きを読む

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccessのフォームのみ表示させたい

Accessを起動した際、フォームのみ表示するにはどうすればよいのでしょうか?
(Accessを起動すると、オブジェクトメニュー?(テーブルやクエリ等のオブジクトを選択するウィンドウ)を表示させないで、フォームのみを表示させるには?)
また、上記と同じようにして、なおかつAccessを起動させないでフォームで起動や終了といったことが出来るのでしょうか?
やはりこれはVB等プログラミングでないと出来ないのでしょうか?ちなみに私はプログラミングは全く出来ません。
わかる方、教えて下さい。宜しくお願いします。

Aベストアンサー

ツールメニュー
”起動時の設定”を開き

フォーム/ページの表示にて起動時に表示させたいフォームを選択すれば、そのMDBを開いた時に、該当のフォームが表示されます。

メニュー画面等を作り、各処理のフォームを開いたり、アクセスを終了するマクロを呼び出すボタンを作ればフォームからの終了等も可能です。

また、データベースウィンドウの表示のチェックボックスを外せば、質問者様の言われているオブジェクトメニューは表示されなくなります。

メンテナンス等を行いたい時はshiftキーを押下しながら立ち上げればデータベースウィンドウが表示できます。

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

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

こんにちは。

Access初心者です。

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

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

Aベストアンサー

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

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

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


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

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

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

Me.CurrentRecord

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


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

人気Q&Aランキング