推しミネラルウォーターはありますか?

フォームで実行されている時に、コンボックスで選択値以外の数値(文字列)を入力したら、自動的にその値をコンボックスの選択値に追加する方法はないですか?

値集合タイプはテーブルです。
値リストでは実行中は出来そうなんですが、終了後追加した分は残らないみたいです。

どこかのサイトでその方法を見たような気がするんですが。

A 回答 (5件)

>を元に戻すには



コメントにして下さい '<---を先頭に入れて下さい

気になった点だけ

(1)コンボの最後の「;」を除いていますが区切りなので、そのままセットして良かったと思いますが、うまく動作しているのであれば現状のままでも良いと思います。

(2)以下は更新部分が不足しています。
> rss.AddNew
> rss!項目名 = st

rss.update 'これで初めて実更新されます
rss.close '<--必ず行って下さい
set rss = nothing '<--使用領域を開放しますので必須と思って下さい

これでDBへの更新は出来ると思います。

DBの更新方法も色々記述がありますが、私は、余程の事がない限り、.addnew ...で記述(今のコーディング方法)するのが判り易くて良いと思います(^^)

この回答への補足

ありがとうございます。
解決しました。
フォーム側からVBで直接テーブル操作したことがないので困ってました。

>コメントにして下さい
ですが、その部分はそのままにして役目が終わったらまた元に戻す、ということなのですが・・・(VB上で)
試し実行中のエラーメッセージを出したいわけで。

補足日時:2005/12/01 17:26
    • good
    • 0
この回答へのお礼

あぁ、なんかトンチンカンな補足質問だったです。

お蔭様で、バッチリ解決です。ありがとう御座いました。

_

お礼日時:2005/12/02 00:00

「値集合タイプ=値リスト」で実現させようとしているようですが、元になるデータがテーブルに存在しているのであれば、「値集合タイプ=テーブル/クエリ」で実現させることにした方が良いと思います。




簡単ですが、サンプルです。




※コンボボックス用のテーブル「テーブル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
    • good
    • 0
この回答へのお礼

いつもご親切にありがとうございます。
サンプルコードまで書いて頂き恐縮です。
とても参考になりました、が、悲しいことにSQLは苦手で・・・
(私の技量がまだそこまでいってなくて)
今後ともよろしくです。

お礼日時:2005/12/01 23:57

フォームのレコード登録時に、コンボの内容も一緒に登録するのであれば、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 抑制
を元に戻すにはどうしたらよろしいでしょうか。

補足日時:2005/12/01 11:27
    • good
    • 0

#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行目あたりからよくわかりません。
テーブルに追加するには、どうしたらよろしいでしょうか?

補足日時:2005/12/01 11:20
    • good
    • 0

>値集合タイプはテーブルです。



そのテーブルに INSERT .... して下さい(^^)

この回答への補足

>INSERT
つまりテーブルに追加したらいいと言う事ですか?

追加するコードまで行く前に、
フォームを実行中、コンボックスに選択値以外の値を入力した時点でメッセージが「ダメ」と出るんです。
その部分はいかがしたらよろしんでしょうか?

補足日時:2005/12/01 01:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!