No.4ベストアンサー
- 回答日時:
>を元に戻すには
コメントにして下さい '<---を先頭に入れて下さい
気になった点だけ
(1)コンボの最後の「;」を除いていますが区切りなので、そのままセットして良かったと思いますが、うまく動作しているのであれば現状のままでも良いと思います。
(2)以下は更新部分が不足しています。
> rss.AddNew
> rss!項目名 = st
rss.update 'これで初めて実更新されます
rss.close '<--必ず行って下さい
set rss = nothing '<--使用領域を開放しますので必須と思って下さい
これでDBへの更新は出来ると思います。
DBの更新方法も色々記述がありますが、私は、余程の事がない限り、.addnew ...で記述(今のコーディング方法)するのが判り易くて良いと思います(^^)
この回答への補足
ありがとうございます。
解決しました。
フォーム側からVBで直接テーブル操作したことがないので困ってました。
>コメントにして下さい
ですが、その部分はそのままにして役目が終わったらまた元に戻す、ということなのですが・・・(VB上で)
試し実行中のエラーメッセージを出したいわけで。
No.5
- 回答日時:
「値集合タイプ=値リスト」で実現させようとしているようですが、元になるデータがテーブルに存在しているのであれば、「値集合タイプ=テーブル/クエリ」で実現させることにした方が良いと思います。
簡単ですが、サンプルです。
※コンボボックス用のテーブル「テーブル1」
・フィールド1
[ID]/数値型/主キー
・フィールド2
[項目名]/テキスト型
※フォームをコンボボックスに作成してください「コンボ0」
'イベント:フォーム_開く時
Private Sub Form_Open(Cancel As Integer)
With Me.コンボ0
'値集合タイプ
.RowSourceType = "Table/Query"
'値集合ソース
.RowSource = "SELECT 項目名 FROM テーブル1 Order By ID"
'入力チェック
.LimitToList = True
End With
End Sub
'イベント:コンボ0_リスト外入力時
Private Sub コンボ0_NotInList(NewData As String, Response As Integer)
Static flgBusy As Boolean
Dim strSQL As String
'エラーをシステムで通知させない
Response = acDataErrContinue
'排他状態の時は未処理
If flgBusy Then
Exit Sub
End If
'排他フラグを立てる
flgBusy = True
'問い合わせ
If MsgBox("追加しますか", vbYesNo) = vbNo Then
Exit Sub
End If
'IDを最大値より1を増やし、新たな項目を登録する
strSQL = ""
strSQL = strSQL & "INSERT INTO テーブル1 (ID,項目名)" & vbCrLf
strSQL = strSQL & "SELECT IIf(IsNull(Max(ID)),0,Max(ID)) + 1 , '" & NewData & "'" & vbCrLf
strSQL = strSQL & "FROM テーブル1" & vbCrLf
Call CurrentDb.Execute(strSQL)
'コンボのリフレッシュ
Me.コンボ0.Text = ""
Me.コンボ0.Requery
'最終行を選択
Me.コンボ0.ListIndex = Me.コンボ0.ListCount - 1
'排他フラグ解除
flgBusy = False
End Sub
いつもご親切にありがとうございます。
サンプルコードまで書いて頂き恐縮です。
とても参考になりました、が、悲しいことにSQLは苦手で・・・
(私の技量がまだそこまでいってなくて)
今後ともよろしくです。
No.3
- 回答日時:
フォームのレコード登録時に、コンボの内容も一緒に登録するのであれば、No.2さんの回答を参考にして下さい。
どうしても処理上、コンボの登録を先に行いたい場合は、マクロだけではアクセスの標準メッセージが出る様なので(ワーニングを止めるだけでは出ます/私はマクロでの止め方が判らないのでコメンなさいm(_ _)m)、以下の事を参考にして下さい。
・データ:入力チェック=はい
・イベント:入力チェック=イベントプロシージャで下記
Private Sub コンボ0_NotInList(NewData As String, Response As Integer)
Dim wCbo As String 'COMBO へ戻す
Response = acDataErrContinue '標準 ERROR MESSAGE 抑制
If MsgBox("追加しますか", vbYesNo) = vbNo Then
Exit Sub
End If
With Forms![フォーム2]![コンボ0]
wCbo = .Text
DoCmd.OpenQuery "クエリ1", acNormal, acEdit
.Text = ""
.Requery
.Text = wCbo
End With
End Sub
※ここまで組むとINSERT のクエリ1 も書けば良いのでしょうが、時間が無くなったので... とりあえず、ここまでのアドバイスと言う事で...(^^;
もしも、ご不明な点がありましたら、再度コメントをお願いします m(_ _)m
この回答への補足
ありがとうございます。
大変参考になりました。
結局#2さんへの補足に書いたようにしましたが、まだうまくいってません。
>Response = acDataErrContinue '標準 ERROR MESSAGE 抑制
を元に戻すにはどうしたらよろしいでしょうか。
No.2
- 回答日時:
#1さんの発言にプラスです。
画面のコンボの名前が仮に「コンボ0」だとして、お話します。
コンボ0のプロパティ⇒値集合ソース
の元になるテーブルにデータを追加し、VBAで
コンボ0.Requery
を発行すると、即座にコンボ0に反映されます。
>フォームを実行中、コンボックスに選択値以外の値を入力した時点でメッセージが「ダメ」と出るんです。
コンボ0のプロパティ⇒入力チェックを「いいえ」にすると回避されます。
この回答への補足
いつもありがとうございます
いろいろやってみましたがうまくいかず、値集合タイプを値リストにし、入力チェック「はい」、リスト外入力時イベントをおきました。
汚いコードですが下記のようにしました。
Private Sub Form_Open(Cancel As Integer)
Set rss = CurrentProject.Connection.Execute("テ-ブル名")
sn = ""
While rss.EOF = False
sn = sn + rss("項目名") + ";"
rss.MoveNext
Wend
rss.Close
If sn <> "" Then
sn = Left(sn, Len(sn) - 1)
コンボ0.RowSource = sn
End If
End Sub
Private Sub コンボ0_NotInList(NewData As String, Response As Integer)
Response = acDataErrContinue '標準 ERROR MESSAGE 抑制
If MsgBox("追加しますか", vbYesNo) = vbNo Then Exit Sub
st = コンボ0.Text
コンボ0.RowSource = コンボ0.RowSource + ";" + st
Dim db As DAO.Database
Dim rss As DAO.Recordset
Set db = CurrentDb
Set rss = db.OpenRecordset("チェック名", dbOpenTable)
rss.AddNew
rss!項目名 = st
End Sub
実行中はコンボに新しい値が入るのですが、元になるテーブルには反映されず再実行では表示されません。
上記の下から6行目あたりからよくわかりません。
テーブルに追加するには、どうしたらよろしいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS DCOUNTの抽出条件について
-
データがあれば○○なければのSQL
-
ACCESSのクエリ、SQLに変数を使...
-
ACCESS VBAでテーブル内の特定...
-
Access vbaで重複レコードの削...
-
SQLの同時実行
-
Access から Excelのシートをイ...
-
重複した複数のレコードを1レ...
-
Accessリンクするテーブルが見...
-
VBA コードの置換に関する質問...
-
Microsoft Access 2010 のvbaを...
-
別のaccessファイルからデータ...
-
VBAでテーブル名とカラム名を動...
-
「ご処理進めて頂きますようお...
-
VBAでループ内で使う変数名を可...
-
エクセルで、日付を入力すると...
-
CloseとDisposeの違い
-
Excelシート上のマクロを登録し...
-
エクセルVBAで、MsgBox やInput...
-
インタラクティブの反対語は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
ACCESS DCOUNTの抽出条件について
-
ACCESS VBAでテーブル内の特定...
-
Access vbaで重複レコードの削...
-
【access】複数のフィールドの...
-
SQLServer→Access インポート
-
ACCESSで実行時エラー3008
-
Accessで縦と横を入れ替えたい
-
抽出条件でデータ型が一致しま...
-
Access から Excelのシートをイ...
-
重複した複数のレコードを1レ...
-
VBAでテーブル名とカラム名を動...
-
別のaccessファイルからデータ...
-
ACCESSのクエリ、SQLに変数を使...
-
こんなSQLの書き方はダメですか?
-
VB.NET2003でOraclの情報を取得...
-
DAOでSQLServerに接続し、LeftJ...
-
access追加クエリーでform入力...
-
アクセスで連続データをテーブ...
-
Access BetweenとLikeの組み合...
おすすめ情報