Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1190 / 2272 ツリー ←次へ | 前へ→

【8332】再入力を防ぐには にしもり 06/7/21(金) 11:44 質問[未読]
【8333】Re:再入力を防ぐには クロ 06/7/21(金) 13:03 回答[未読]
【8334】Re:再入力を防ぐには にしもり 06/7/21(金) 13:19 質問[未読]
【8335】Re:再入力を防ぐには クロ 06/7/21(金) 13:24 回答[未読]
【8336】Re:再入力を防ぐには にしもり 06/7/21(金) 13:34 発言[未読]
【8350】Re:再入力を防ぐには にしもり 06/7/24(月) 15:01 質問[未読]
【8351】Re:再入力を防ぐには クロ 06/7/24(月) 17:23 回答[未読]
【8352】Re:再入力を防ぐには にしもり 06/7/24(月) 17:56 お礼[未読]
【8355】Re:参考URL クロ 06/7/25(火) 8:29 発言[未読]
【8356】Re:参考URL にしもり 06/7/25(火) 9:12 お礼[未読]

【8332】再入力を防ぐには
質問  にしもり  - 06/7/21(金) 11:44 -

引用なし
パスワード
   こんにちは。

テーブルtbl_TRAININGと主フォームF_ModProgramとそのサブフォームSF_Programがあります。tbl_TRAININGの中は、Program_ID(オートナンバ型)、 Program_Name(テキスト)とします。主フォームにはサブフォームのほかにテキストボックスProgramName、flgProgramID、DirtyFlg、そして実行ボタンbtnExecuteがあるとします。サブフォームのレコードソースはtbl_TRAININGです。

サブフォームに表出されたtbl_TRAINING中のProgram_Nameを選択し、それを主フォーム上のテキストボックスProgramNameに入力された文字列で上書きしたいのです。下記までコードができていますが、テキストボックスに何か入れて実行すると、パラメーターを聞いてきてしまい、また入力しなくてはいけません。どこが悪くて聞いてきてしまうのでしょうか。どなたかアドバイスをお願いします。

Private Sub btnExecute_Click()
On Error GoTo ErrorHandler
  If DirtyFlg = 1 Then
    Dim strCriteria
    Dim strConn
    strCriteria = "UPDATE tbl_TRAINING SET "
    strConn = ""
    If IsNull(ProgramName) = False Then
      strCriteria = strCriteria & strConn & "Program_Name = " & [Forms]![F_ModProgram]![ProgramName] & " "
      strConn = ", "
    End If
      strCriteria = strCriteria & "WHERE Program_ID = " & [Forms]![F_ModProgram]![flgProgramID] & ";"
    DoCmd.RunSQL strCriteria
  Else
    MsgBox "No Need to Change"
    Exit Sub
  End If
  Me!DirtyFlg = 0
  Me!flgProgramID = Null
  Me!ProgramName = Null
  MsgBox "Update Completed"
Exit Sub

Private Sub ProgramName_AfterUpdate()
  Me!DirtyFlg = 1
End Sub

なおサブフォームのコードは以下のとおりです。

Private Sub Program_Click()
   Forms!F_ModProgram!flgProgramID = Me!Program_ID
   Forms!F_ModProgram!ProgramName.SetFocus
End Sub

【8333】Re:再入力を防ぐには
回答  クロ  - 06/7/21(金) 13:03 -

引用なし
パスワード
   こんにちは

>パラメーターを聞いてきてしまい、また入力しなくてはいけません。

どんなパラメータでしょうか?

>      strCriteria = strCriteria & strConn & "Program_Name = " & [Forms]![F_ModProgram]![ProgramName] & " "

この辺を見直してみては?

【8334】Re:再入力を防ぐには
質問  にしもり  - 06/7/21(金) 13:19 -

引用なし
パスワード
   ▼クロ さん:
ありがとうございます。

>どんなパラメータでしょうか?
「パラメータの入力」という名のダイアログボックスが出て文字を入れるよう要求してきます。

>この辺を見直してみては?
tbl_TRAININGのほうはProgram_Name、F_ModProgramのほうは ProgramNameとアンダスコアがありませんがその辺りでしょうか? 

お察しと思いますがこれは他者のつくったコードで、期せずして再利用することになりました。わたしは一からつくる実力がございませんので、アドバイスよろしくお願いいたします。

【8335】Re:再入力を防ぐには
回答  クロ  - 06/7/21(金) 13:24 -

引用なし
パスワード
   ProgramNameのデータ型を確認してください。
たぶんテキスト型です。

そのためにはどうしたらよいか考えてください。

【8336】Re:再入力を防ぐには
発言  にしもり  - 06/7/21(金) 13:34 -

引用なし
パスワード
   ▼クロ さん:
>ProgramNameのデータ型を確認してください。
テキスト型です。


>そのためにはどうしたらよいか考えてください。
わかりました。やってみます。

【8350】Re:再入力を防ぐには
質問  にしもり  - 06/7/24(月) 15:01 -

引用なし
パスワード
   先週から考えていますがよくわかりません。
わからない、というのは
たとえばフォームF_ModProgramのテキストボックスProgramNameに「aaa」といれると
テーブルをaaaで書き換えずに、次のようなダイアログボックスがでてしまうのです。
--------------------
| パラメーターの入力      
| aaa              
| ------------------    
|
| ------------------    
|               
| ---- ----------- 
| ok  キャンセル 
| ---- ----------- 
---------------------

SQL文は最終的には次のようになるとおもっております。
UPDATE tbl_TRAINING SET tbl_TRAINING.Program_Name = [Forms]![F_ModProgram]![ProgramName];
Program_NameとProgramNameは、ともにテキスト型です。
また、テキストボックスProgramNameでのイベントは次のようになっています。

Private Sub テキスト14_AfterUpdate()
  Me!DirtyFlg = 1
End Sub

なぜ、ダイアログボックスがでてしまうのでしょうか?

【8351】Re:再入力を防ぐには
回答  クロ  - 06/7/24(月) 17:23 -

引用なし
パスワード
   [Forms]![F_ModProgram]![ProgramName]の部分は
SQL文外に出しありますよね


strCriteria = strCriteria & strConn & "Program_Name = " & [Forms]![F_ModProgram]![ProgramName] & " "

この部分( [Forms]![F_ModProgram]![ProgramName])はテキストでも
SQL文上ではテキストだとわからないので明示的に
「' (シングルクォーテーション)」で括る必要があります。
[Forms]![F_ModProgram]![flgProgramID]は数値型ですので
とくに「' (シングルクォーテーション)」で括らなくとも大丈夫です。

strCriteria = strCriteria & strConn & "Program_Name = '" & [Forms]![F_ModProgram]![ProgramName] & "' "

としてみてはどうですか?

【8352】Re:再入力を防ぐには
お礼  にしもり  - 06/7/24(月) 17:56 -

引用なし
パスワード
   ▼クロ さん:
ありがとうございます!
3日間考えていたことが瞬時に解決しました。

クロさんからレスをいただく前、わざと下記のようなSQLを作って実行してみました。UPDATE tbl_TRAINING SET tbl_TRAINING.Program_Name = aaa;
そうしたところ状況が再現しましたので式の右辺に問題があることはわかりました。が、何が悪いのか全くわかりませんでした。

この部分はSQL文上ではテキストだとわからないので明示的に「' (シングルクォーテーション)」で括る必要があるとのこと、ありがとうございました。それにしてもいったいどうすればそういう知識を学ぶことができるのでしょうか。不思議でなりません。

【8355】Re:参考URL
発言  クロ  - 06/7/25(火) 8:29 -

引用なし
パスワード
   http://www.mahoutsukaino.com/ac/ac2000/ac2000/wherebun/w01.htm
ここらを参考に…


http://www.mahoutsukaino.com/
こちらで、Ac97〜2002までを丁寧に解説されています。
※2003はないですが読んでおいて損はないかと思います。

【8356】Re:参考URL
お礼  にしもり  - 06/7/25(火) 9:12 -

引用なし
パスワード
   ▼クロ さん:
ありがとうございます!
紹介していただいたURLを見ていたら
なんとなく自分にもできそうな気がしてきました。
どうもありがとうございました。

1190 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078216
(SS)C-BOARD v3.8 is Free