Access VBA質問箱 IV

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

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


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

【6132】コマンドボタンクリック時にチェック・登録 さとこ 05/9/2(金) 10:42 質問[未読]
【6138】Re:コマンドボタンクリック時にチェック・... 小僧 05/9/2(金) 13:23 発言[未読]
【6140】Re:コマンドボタンクリック時にチェック・登... クロ 05/9/2(金) 13:31 回答[未読]

【6132】コマンドボタンクリック時にチェック・登録
質問  さとこ  - 05/9/2(金) 10:42 -

引用なし
パスワード
   フォーム"銀行"
  テキストボックス"ID"、"氏名"、"登録番号"(すべてテキスト型)  
 テーブル名"銀行テーブル"

コマンドボタン"登録"

テキストボックス"ID"を手入力すると"氏名"、"登録番号"が"銀行テーブル"から抽出、表示されます。(データがあれば)

IDの重複チェックを行い・・・
1."ID"入力→"氏名"、"登録番号"が表示→氏名、登録番号を修正して登録ボタンをクリックすると上書き保存されるようにする。
2."ID"が新規のものであれば"登録ボタン"クリック時は新規に登録される。

この2点を設定したいのですが、どのようなVBAを組んだらいいでしょうか?
お力ください・・_(_^_)_

【6138】Re:コマンドボタンクリック時にチェック・...
発言  小僧  - 05/9/2(金) 13:23 -

引用なし
パスワード
   ▼さとこ さん:
こんにちは。

>コマンドボタン"登録"

があるという事は、

テキストボックスにID の値を入力し
表示されたデータに修正を行った後に
気が変わって登録ボタンを押さずにフォームを抜けた場合は
修正は行われなかった事にしたい、という事でしょうか?

そうなると非連結のフォームになると思われるので
結構手間がかかると思いますが…。


連結フォームでしたら

 DCount("*", Me.RecordSource, "ID =" & Me.txtID)

あたりで重複を確認して、

重複あり: Me.Recordset.FindFirst "ID = " & Me.txtID
重複なし: DoCmd.GoToRecord acActiveDataObject, , acNewRec

というような処理を組めば可能だと思います。

【6140】Re:コマンドボタンクリック時にチェック・...
回答  クロ  - 05/9/2(金) 13:31 -

引用なし
パスワード
   1レコードずつ登録変更するのであれば非連結フォームの方が
いいかと思います。

>フォーム"銀行"
>  テキストボックス"ID"、"氏名"、"登録番号"(すべてテキスト型)  
> テーブル名"銀行テーブル"
>
>コマンドボタン"登録"

このフォームのプロパティ「レコードソース」と各コントロールの
「コントロールソース」を外して(空欄にする)ください。

コマンドボタンのプロパティで「名前」はcmb1として、「課題」は
「登録/変更」とします。

その他テキストボックスの名前はそのままで結構です。
IDテキストボックスの更新後処理のイベントに

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("銀行テーブル", dbOpenDynaset)
rs.Filter = "[ID]='" & Me.ID & "'"
Set rs = rs.OpenRecordset
If rs.RecordCount <> 0 Then
 Me.ID = rs!ID
 Me.氏名 = rs!氏名
 Me.登録番号 = rs!登録番号
End If
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing

cmd1コマンドボタンのクリック時のイベントに

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM 銀行テーブル WHERE [ID]='" & Me.ID & "'", dbOpenDynaset)
With rs
 If .EOF And .BOF Then
  If MsgBox("このレコードを登録してよろしいですか?", vbQuestion + vbYesNo, "確認") = vbYes Then
   .AddNew
   rs!ID = Me.ID
   rs!氏名 = Me.氏名
   rs!登録番号 = Me.登録番号
   MsgBox "新規登録をしました。", vbInformation, "メッセージ"
  Else
   Me.ID.SetFocus
   .Close: Set rs = Nothing
   db.Close: Set db = Nothing
   Exit Sub
  End If
 Else
  If MsgBox("このレコードを変更してよろしいですか?", vbQuestion + vbYesNo, "確認") = vbYes Then
   .Edit
   rs!ID = Me.ID
   rs!氏名 = Me.氏名
   rs!登録番号 = Me.登録番号
   MsgBox "内容の変更をしました。", vbInformation, "メッセージ"
  Else
   Me.ID.SetFocus
   .Close: Set rs = Nothing
   db.Close: Set db = Nothing
   Exit Sub
  End If
 End If
 .Update
 .Close: Set rs = Nothing
End With
db.Close: Set db = Nothing
Me.ID = Null

でどうでしょうか?
※「参照設定」で[Microsoft DAO 3.* Object Library] を参照チェックして
 ください。


>テキストボックス"ID"を手入力すると"氏名"、"登録番号"が"銀行テーブル"から抽出、表示されます。(データがあれば)
>
>IDの重複チェックを行い・・・
>1."ID"入力→"氏名"、"登録番号"が表示→氏名、登録番号を修正して登録ボタンをクリックすると上書き保存されるようにする。
>2."ID"が新規のものであれば"登録ボタン"クリック時は新規に登録される。
>
>この2点を設定したいのですが、どのようなVBAを組んだらいいでしょうか?
>お力ください・・_(_^_)_

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