
何度もすみません。
簡単な事なのかもしれませんが、自己解決できなかったので、質問させていただきます。
あるフォーム(基本情報閲覧)から、コマンドボタンで別の入力用フォームを呼び出しています。
その際、「ID」というフィールドの文字列を受け渡し、入力用フォームの「ID」に表示させています。
「ID」はテーブル:基本情報の一部であり、そのテーブルには「ID」と「名前」があります。
質問したいのは、入力用フォームにデータが受け渡されたときに、「ID」と共に「名前」も表示させたいのです。
もちろん、どちらのフォームも同じテーブルを裏に持っていますので、簡単にフィルタをかけて表示してくれると思っていましたが、「ID」フィールドに文字列は入るものの、「名前」は自動的には表示されず、他の入力項目を選択(コンボボックスで)したときに、なぜか「名前」が思い出したように表示されます。
入力用フォームの「ID」と「名前」フィールドのプロパティから、大元のテーブルからレコードを取ってくるselect文を書いてみたり、リクエリを指示してみたり、フィルタをかける設定を設けてみたりしましたが、どうも現象が変わってくれません。と申しますか、かえって動きが怪しくなります。
解決法をご存知の方はご教授くださいませ。
よろしくお願いします。
No.7ベストアンサー
- 回答日時:
If(データの有無)により開くフォームが違うようです。
"F_基本情報入力":データなし
"F_基本情報":データあり
だとするとレコードソースも違う可能性があります。
何故、違うフォームなんでしょうね?
単に「追加」を許す/許さないという仕分けでしょうか。
だったら、やはりAllowAdditionsプロパティを変える
だけで済む話なんですけどね。(その他、更新や削除も
同様のプロパティがあり、動的に変更可能です)
まぁ、画面タイトルや色使いなど違いを持たせているなら、
口出しするところではないですが・・・
★該当データが無ければ、自動的に新規登録になります。
これは「追加を許す」場合の話です。こういう条件の場合、
データグリッドは「抽出されたデータ+新規用の空データ」
という具合になります。「抽出されたデータ」なければ
「新規用の空データ」だけが残るという理屈です。
ご回答ありがとうございます。
なるほど。
表示項目と入力項目が同じであれば、ひとつのフォームで、閲覧/入力をまかなう、ということですね。
最後のほうでおっしゃっておられるように、微妙に色合いや各項目のプロパティは変えてありますが、項目の増減など、後々のメンテナンスを考えるとIf分岐で2つのフォームに振り分けるのは「美しくない」ですね。
教えていただいたことを元に、チャレンジいたします。
ありがとうございました。
No.5
- 回答日時:
>「どこに」仕込むのでしょうか?
フォームのレコードソース・プロパティ
「仕込む」というのは表現上の問題で、正確には
「フォームのレコードソースプロパティに設定する」
という具合になります。
>Formas
失礼しました。綴り間違いです。Formsが正しい。
>2行に分けているのには理由はありますか?
ステートメントが長くなり過ぎるのを防ぐ。
抽出条件が変わった時、修正箇所が見易くなる。
私の場合、実務ではフィールドごと、条件1個ごとに
行を分けています。
SQL = "SELECT"
SQL = SQL & " A.AAA"
SQL = SQL & ",B.BBB"
SQL = SQL & " FROM X AS A"
SQL = SQL & " INNER JOIN Y AS B"
SQL = SQL & " ON A.ID=B.ID"
SQL = SQL & " WHERE A.P=1"
SQL = SQL & " AND B.Q=2"
単に見易くするための処置であり、個人的な流儀です。
ご回答ありがとうございます。
そういえば私も若いころ(笑)、プログラミングのクセとか、社内ルールってあったのを思い出しました^^;
さて、本題。
呼び出しコマンドボタンのイベントを、下記のように変えてみました。
IF文はそのままで、呼び出し関数でSQL文を呼び出される側のフォームのレコードソースに「仕込む」作りになっていると思うのですが、実際に動かしてみると、レコードソースは元々のクエリの名前が表示されています。(つまり、変化がない)
どこがおかしいのでしょうか?
そもそも、nda23さんが意図されている動作とは違うイベントを仕込んでしまっているのでしょうか?
ちなみに・・・またまた「重箱」ですが、
SQL = SQL & "WHERE ID='" % Me!ID & "'"
は
SQL = SQL & "WHERE ID='" & Me!ID & "'"
でいいですよね^^
----------------------------------------------------------
Private Sub コマンド31_Click()
On Error GoTo Err_コマンド31_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = 前と同じでここは省略します
stLinkCriteria = "[ID]=" & "'" & Me![ID] & "'"
'DoCmd.OpenForm stDocName, , , stLinkCriteria<コメントアウト
'DCountの結果で、開くフォーム名(→stDocName)を切替
If DCount("*", "Q_基本情報", stLinkCriteria) = 0 Then
stDocName = "F_基本情報入力" 'レコード不在(=0)時はF_基本情報入力を指定
SQL = "SELECT * FROM Q_基本情報 "
SQL = SQL & "WHERE ID='" & Me!ID & "'"
DoCmd.OpenForm stDocName
Forms(stDocName).RecordSource = SQL
Else
stDocName = "F_基本情報" 'レコード存在時はF_基本情報を指定
DoCmd.OpenForm stDocName, , , stLinkCriteria
End If
Exit_コマンド31_Click:
Exit Sub
Err_コマンド31_Click:
MsgBox Err.Description
Resume Exit_コマンド31_Click
End Sub
No.4
- 回答日時:
あぁ、そういうことですか。
何か面倒なことしてますね。フィルタなんか掛けずに、レコードソースを仕込めば
一発なんですけどね。
SQL = "SELECT * FROM Q_基本情報選択 "
SQL = SQL & "WHERE ID='" % Me!ID & "'"
DoCmd.OpenForm stDocName
Formas(stDocName).RecordSource = SQL
★RecordSourceを変更した場合はRefreshは不要です。
★該当データが無ければ、自動的に新規登録になります。
せっかくstDocNameを使って開いたのだから、Formsの
引数にも使いましょう。
Accessは1.0aのころ(古!)からやってますけど、
フィルタなんぞ使ったことないですよ。
面倒なこと(苦笑)、は↓で教わりました^^;;;;;
http://oshiete1.goo.ne.jp/qa5708127.html
ご回答がちょっと理解できていないのですが、「レコードソースを仕込めば」というのは、「どこに」仕込むのでしょうか?
あと、重箱の隅をつつくようで申し訳ないのですが、
Formas(stDocName).RecordSource = SQL
は
Forms(stDocName).RecordSource = SQL
でOKですか?
もうひとつごめんなさい。
ご回答の例では、SQL変数にSELECT文を代入し、レコードソースで使わせようとしていますが、代入の際、2行に分けているのには理由はありますか?
以上、お手数ですが、またのご回答をお待ちしております。

No.3
- 回答日時:
ありがとうございます。
昨年の私同様、長いお付き合いをされたようですね。(笑
しっかり読ませていただきます。
結果はまたご報告いたします。
No.1
- 回答日時:
考えられる一つの原因としてはデータ(ID)が
変化したことを知らせていないからでは?
入力用フォームを開き、IDを仕込んだ後で、
そのフォームにRefreshメソッドを実行したら
どうなりますか?
サンプル
Forms("入力フォーム").Refresh
ご回答ありがとうございます。
呼び出し元のコマンドボタンには、下記のイベントを仕込んでおり、IDを受け渡すようにしております。
(ここでIf分岐のやり方を教わりました)
IDに紐付く付帯情報がなければ、「F_基本情報新規追加」フォームを開き、あれば、「F_基本情報閲覧」を開きます。
ご指導されたように、F_基本情報新規追加を開く際は、そのコマンドボタンのイベントに
Forms("F_基本情報新規追加").Refresh
を入れていますが、動作させたところ、現象は変わりませんでした。
また、呼び出される側の「開くとき」のプロパティや、IDを表示するフィールドのプロパティで、
Forms("F_基本情報新規追加").Refresh
や
Me.Refresh
を組み入れましたが、やはり状況は改善せず。。。という状況です。
-----------------------------------------------------------
Private Sub コマンド31_Click()
On Error GoTo Err_コマンド31_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ここはすみませんが省略します
stLinkCriteria = "[ID]=" & "'" & Me![ID] & "'"
'DoCmd.OpenForm stDocName, , , stLinkCriteria
'DCountの結果で、開くフォーム名(→stDocName)を切替
If DCount("*", "Q_基本情報選択", stLinkCriteria) = 0 Then
stDocName = "F_基本情報新規追加" 'レコード不在(=0)時はF_基本情報新規追加を指定
DoCmd.OpenForm stDocName 'stLinkCriteriaは使用しません
Forms("F_基本情報新規追加").Refresh
Else
stDocName = "F_基本情報閲覧" 'レコード存在時はF_基本情報閲覧を指定
DoCmd.OpenForm stDocName, , , stLinkCriteria
End If
Exit_コマンド31_Click:
Exit Sub
Err_コマンド31_Click:
MsgBox Err.Description
Resume Exit_コマンド31_Click
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- その他(データベース) accessでのフォームの連携について 2 2022/06/14 00:45
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSで入力フォームをHTMLフ...
-
アクセスのフォームのビューが...
-
Accessのフォーム上にレコード...
-
Access フォームの入力について
-
ACCESS フォームの操作
-
ACCESSのフォームからデータの...
-
Accessのフォームで作業領域を...
-
ACCESSのフォームに設定した内...
-
アクセス 0以外をカウントす...
-
Access Label 手のマウスポイン...
-
dlookup関数が使えない
-
Access 別フォームへの再クエ...
-
accessの自動更新処理をできな...
-
他フォームのチェックボックス...
-
アクセス97のテーブルを直接...
-
accessにて生徒の成績処理
-
Access2002 フォーム間のデータ...
-
入力途中の入力した値をすべて...
-
Access フォーム上でコンボボッ...
-
フォーム上のレコード数表示が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのフォームからデータの...
-
選択したチェックボックスのみ...
-
Accessのフォーム上にレコード...
-
アクセスのフォームのビューが...
-
アクセスでテーブルの変更内容...
-
Access 別フォームへの再クエ...
-
ACCESSで入力フォームをHTMLフ...
-
Access2002 フォームを閉じるた...
-
accessの自動更新処理をできな...
-
Accessフォームのテキストボッ...
-
アクセスでの項目追加について...
-
ADOでRecordsetオブジェクトを...
-
Accessのフォームで作業領域を...
-
Accessのハイパーリンクのパス...
-
[至急]accessクエリ結果を入力...
-
「メソッドまたはデータメンバ...
-
アクセス 0以外をカウントす...
-
オートシェイプのような作図入...
-
入力途中の入力した値をすべて...
-
Access フォーム上でコンボボッ...
おすすめ情報