- ベストアンサー
ACCESS 選択クエリについて
いつもお世話になっております。 確認したいことがあります。 選択クエリはテーブルを元に作成することは分かりました。 フォームを選択クエリを元に作成し、 フォームから項目を更新した場合にテーブルも更新しまよね。 これは、元のテーブルの項目がフォームの項目と直結していると理解していいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Public Function UpdateRecord(ByVal frm As Form, ByVal strSQL As String) As Boolean ・・・・・ Dim fldName As String Dim cnn As adodb.Connection Dim rst As adodb.Recordset Dim fld As adodb.Field Set cnn = CurrentProject.Connection With cnn ・・・・・ Set rst = New adodb.Recordset rst.Open strSQL, cnn, adOpenStatic, adLockOptimistic With rst If Not .BOF Then N = frm.Controls.Count - 1 For Each fld In .Fields For I = 0 To N ・・・・・ Next I Next fld .Update End If End With ・・・・・ End With ・・・・・ End Function これは、フォームの更新データを該当するレコードに反映する関数の大よそです。 まず、レコードセットをSQL文でオープンしています。 その後に、一つひとつのフィールドに合致するフォーム上のコントロールの値をフィールドの値としてセット。 これが完了するとレコードセットを更新しています。 質問のケースでは、オープンするべきレコードセットは、当然にフォームのレコードソースです。 それが、選択クエリであろうとも、その実態は SQL文でしょう。 であれば、レコードの更新はUpdateRecord関数の要領で達成されます。 もちろん、本当のところは、似て非なるものかも知れません。 というのは、単発の更新関数ということではなくクラスモジュール的な設計と推察するからです。 が、理解としては、「UpdateRecord関数みたいなもんだ」でいいのじゃないでしょうか? Q、元のテーブルの項目がフォームの項目と直結していると理解していいのでしょうか? A、ノー! フォームのレコードソースが表すレコードセットに直結していると理解するのが妥当だと思います。 ※単なる一介の服飾デザイナでプログラマではないので参考程度に!
その他の回答 (2)
元のテーブルの項目とフォームの項目は直結していないでしょう。直結していると、マルチユーザー環境で使いにくくなります。 直結していないことを確認するには、フォームとその元になるテーブルを同時に開き、同じレコードの同じフィールドを違うように編集することです。これは可能です。つまり直結していない。で、このレコードを保存しようとすると、後から保存しようとしたときに、アクセスが警告を出します。
- kurodai2
- ベストアンサー率38% (77/202)
>選択クエリはテーブルを元に作成することは分かりました。 アクセスの場合 クエリは、テーブルからではなく クエリからでも出来ますよ テーブル+クエリからでも出来ます。 複雑なクエリも、単純なクエリにして 例えば クエリ1作成 そのクエリ1を使って クエリ2を作成 そのクエリ2を使って クエリ3を作成 そのクエリ3とテーブルを結合して クエリ4を作成 クエリ4を開くと、クエリ1からをすべて利用して結果が得られます。 ここで、クエリの質問を良く見ますが、どうしても1つでくくると 複雑なクエリになります。 本当は、機能ごとにばらしたクエリを作成して それらを利用して 目的のクエリを作った方が、単純であり再利用も出来るので 利点は、多いのですが。 >フォームを選択クエリを元に作成し、 >フォームから項目を更新した場合にテーブルも更新しまよね。 >これは、元のテーブルの項目がフォームの項目と直結していると理解していいのでしょうか? 直結は、していないでしょう。 直結していると、判断できる部分は見えないので。 ACCESSそのものが、エンドユーザー用のソフトですので、何をしているか すべて把握は難しいですね。 クエリーからもとのテーブルの特定のレコードの識別が可能であれば 更新も可能と言うのは、裏でACCESSがはやり SQLでやってるのではないでしょうか。 当然、更新できるクエリと出来ないクエリがあります。 集計クエリとかの場合は、クエリのデータを触っても実データの変更は出来ません。 単純には、選択クエリを開いて表示したときに、新規レコードの追加がかのうな *が最終行にあれば、更新可能なクエリです。