こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

ソースコードをどう書いたらよいのかわかりません

マイクロソフトAccess2007を使用しています。

(1)テーブルT_ゲームソフトからフォームF_削除のコンボボックスで入力した条件を満たすレコードセットを開き、
変数にゲームソフトIDを代入したいと思っています。
(2)(1)で取得したゲームソフトIDを条件として、テーブルT_使わないゲームからレコードセットを開き、
フォームF_削除から入力した値をテーブルT_使わないゲームの削除日フィールドに入力したいと思っています。

途中まで下記の様なソースコードを作成したのですが、挫折してしまい質問させて頂きました。
上記(1)(2)になる様なソースコードを作りたいと思っているのですが、この先どの様に書いて良いのかわからなかった為質問させて頂きました。
12,13,14行目にいたっては全く違うことをしていると思います…
当方初めてVBAを使用したので、おかしな部分が多々あると思いますが、ご指導お願いします。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
「ソースコード」
1 Dim Db As DAO.Database
2 Dim Rs As DAO.Recordset
3 Dim SQL As String
4
5 Set Db = CurrentDb()
6 Set Rs = Db.OpenRecordset("T_ゲームソフト", dbOpenDynaset)
7
8 strSql = "SELECT * FROM T_ソフト WHERE 名前 = Combo_SoftName AND 種類 = Combo_SoftType
9
10 Set Rs = Db.OpenRecordset(SQL, dbOpenDynaset)
11
12 Rs.Edit
13 Rs!ソフトリストID = Combo_softID
14 Rs!アンインストール日 = Uninstall
15
16 Rs.Update
17 Rs.Close: Set Rs = Nothing
18 Set Db = Nothing
19
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

「 T_ゲームソフト 」

ゲームソフトID| 名前 | 種類
─────────────────────
     1  |  A  | アクション        
     2  |  B  | SF        
     3  |  C  | シューティング        
     4  |  D  | スポーツ        
     5  |  E  | レース        

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

「 F_削除 」

名前【コンボボックス】←Combo_SoftName
種類【コンボボックス】←Combo_SoftType
削除日【コンボボックス】←Combo_Sakujo

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

「 T_使わないゲーム 」

ゲームソフトID| 名前 | 種類 | 削除日
─────────────────────────────
     2  |  B  | SF      |  
     1  |  A  | アクション  |      
     3  |  C  | シューティング|        
     5  |  E  | レース    |    
     4  |  D  | スポーツ   |     

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

投稿日時 - 2011-01-21 20:04:16

QNo.6464673

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

せっかく高いソフトを使っているのですから、
自分で解決できるように、もう少し頑張りましょう。
まずは
VBEの画面でツール→オプション→編集タブに『変数の宣言を強制する』
てのが有りますのでチェックを入れてください。
そうすると各モジュールの先頭に、Option Explicit が引っ付くようになります。
※2007は持っていないのですが同様な設定があるはずです。
で、デバッグ→○▽□のコンパイルを行ってください。(たぶんエラーが出てくるはずです)

コンボボックスをクリックするとプルダウンで
|  A  |    | アクション  |
|  B  |    | SF      |
|  C  | とか | シューティング|
|  D  |    | スポーツ   |
|  E  |    | レース    |
と出てくるでしょ?
SQL文にこの値を渡さなくてはいけません。
なので
>'strSql = "SELECT * FROM T_ソフト WHERE 名前 ='" & me!Combo_SoftName & "' AND 種類 ='" & Combo_SoftType &"'"
>'このコードが何処に書かれたものか不明なので、me!Combo_SoftName などはForms!実際のフォーム名!Combo_SoftNameかな?
と回答したわけです。
つまり、SQLの中身は今回の場合、文字列を渡すので、' シングルクォーテーションで括って
"SELECT * FROM T_ソフト WHERE 名前 ='B' AND 種類 ='レース'"
などになっている必要があります。
そこで、Debug.Print SQL の行をいれてイミディエイトウィンドウに現れるSQL文を確認されては?
になりました。

さて、前回の?にまだ全て答えてもらっていませんよね?
一部繰り返しになりますが
1・提示されたコードは何処に書いたものか?
例:コマンドボタンのクリック時、標準モジュール・・
2・フォーム名?
3・コンボボックス名は各々 Combo_softID、Combo_Sakujo のようですが
このコンボボックスを置いてあるフォーム名は?
4・まだ聞き足りないことが有るような気もしますが
手直ししたコードを全て載せてください。(行Noは抜いてね)
↓は無理かもしれませんが
5・Debug.Print SQL の行をいれてイミディエイトウィンドウに現れるSQL文

求められる結果が得られないとしても、まずはエラー無く終了させたいものです。
※レコードを変更しますので、バックアップファイルは何処かに保存しといてね!!!!

以下は参考になりそうなところ
Akira さんもおっしゃていますが
統一性のとれたVBA講座ではなく、Aboutな寺子屋講座です。
体系的に勉強されるなら、町の本屋へ直行して下さい…。
http://www.accessclub.jp/vba/

投稿日時 - 2011-01-22 11:05:09

ANo.1

取りあえずパッと気がついたとこ
'DAO 3.6 に参照設定は済んでますよね?
1Dim Db As DAO.Database
2 Dim Rs As DAO.Recordset
3 Dim SQL As String
4
5 Set Db = CurrentDb()
6 Set Rs = Db.OpenRecordset("T_ゲームソフト", dbOpenDynaset)
'↑6で開いているのに、10で別のレコードセットとしてしまってますよ?
7
8 strSql = "SELECT * FROM T_ソフト WHERE 名前 = Combo_SoftName AND 種類 = Combo_SoftType
’コンボボックスの『値』ではなくコンボボックスの名前そのものをセットしてますけど?
'strSql = "SELECT * FROM T_ソフト WHERE 名前 ='" & me!Combo_SoftName & "' AND 種類 ='" & Combo_SoftType &"'"
'このコードが何処に書かれたものか不明なので、me!Combo_SoftName などはForms!実際のフォーム名!Combo_SoftNameかな?
debug.print strsql 'でイミディエイトウィンドウでstrsqlの中身を確認されては?
10 Set Rs = Db.OpenRecordset(SQL, dbOpenDynaset)
11
12 Rs.Edit
13 Rs!ソフトリストID = Combo_softID
14 Rs!アンインストール日 = Uninstall 'UnInstall って何処から出てきたの?
'↑Combo_softIDもUninstallも変数として渡してますのでエラーになりませんか?
'me!Combo_softIDとかme!Uninstall ではなかろうか?
'テーブルのフィールド名とコードの中のフィールド名が合っていませんけど?
'例 Rs!アンインストール日 ←→Rs!削除日
15
16 Rs.Update
17 Rs.Close: Set Rs = Nothing
18 Set Db = Nothing

さて、?は幾つ有るでしょうか?

投稿日時 - 2011-01-22 00:33:37

補足

回答ありがとうございます。

>'DAO 3.6 に参照設定は済んでますよね?
すんでいます。

>’コンボボックスの『値』ではなくコンボボックスの名前そのものをセットしてますけど?
コンボボックスの名前そのものというのは、どういう意味でしょうか?

誤8 strSql = "SELECT * FROM T_ソフト WHERE 名前 = Combo_SoftName AND 種類 = Combo_SoftType
正8 SQL = "SELECT * FROM T_ソフト WHERE 名前 = Combo_SoftName AND 種類 = Combo_SoftType
間違いでした。

12 Rs.Edit
>誤13 Rs!ソフトリストID = Combo_softID
>誤14 Rs!アンインストール日 = Uninstall
>正13 Rs!ゲームソフトID = Combo_softID
>正14 Rs!削除日 = Combo_Sakujo
失礼しました。これも間違えていました。
ここでやりたかったのは、上で入力した条件のレコードからゲームソフトIDを取得してT_使わないゲームのゲームソフトIDのところに削除日を入力したかったのですが…

多々質問があり、ご迷惑おかけしますが回答お願いいたします。

投稿日時 - 2011-01-22 08:29:01

あなたにオススメの質問