No.4ベストアンサー
- 回答日時:
項目「NO」の更新前処理に次のようにコードを記述してみてわ。
=======================================================
Private Sub NO_BeforeUpdate(Cancel As Integer)
Dim DB As Database
Dim R As Recordset
Dim FLG As Integer
Set DB = CurrentDb
SQL = "SELECT * FROM テーブル1 WHERE NO = " & NO
If IsNull(NO) Then
FLG = 1 '登録
Else
Set R = DB.OpenRecordset(SQL, dbOpenSnapshot)
If R.EOF Then
FLG = 1 '登録
Else
FLG = 2 'キャンセル
End If
R.Close
End If
If FLG = 1 Then
'登録処理の実行
Else
'処理をキャンセル
MsgBox "このNoは既に登録されています。"
Cancel = True
SendKeys "{ESC}"
End If
End Sub
=======================================================
※DCOUNTでも出来ますが件数が多くなると処理時間がかかる場合があります。
処理時間の事を考えるとRECORDSETをOPENするやり方をお勧めします。
KAERU_VXVさん。ありがとうございます。できました!処理時間はやはり重要だと思うので、KAERU_VXVさんのを利用させていただきます。本当にありがとうございました。
No.3
- 回答日時:
もう少し、チェックの全体像を見直したがいいかも知れませんね!
1、重複チェックに落とし穴がありそうです。
2、必須入力列か否かで Else文が決まります。
3、ヌル値を許容するか否かで Else文が決まります。
Private Sub Num_Exit(Cancel As Integer)
If Len(Me.Num & "") Then
Cancel = CBool(DCount("*", "テーブル1", "Num=" & Me.Num) > 0)
If Cancel Then
MsgBox "既存のデータと同じNo.が入力されました!別の値を入力してください。", _
vbOKOnly + vbExclamation, "重複エラー"
End If
Else
'
' 必須入力列か否かで処理が分かれる!
'
・・・・・・・・・
'
' ヌル値を許容するか否か!
'
・・・・・・・・・
End If
End Sub
一見、これで重複エラー、必須入力列チェック、ヌル値チェックがされていそうです。
ですが、これでも、まだ問題点があります。
カレントレコードもカウントの対象であることを考慮していないからです。
strWhere= "Num=" & Me.Num & " AND ID<>" & Me.ID
Cancel = CBool(DCount("*", "テーブル1", strWhere) > 0)
と、レコードをユニークに識別する列でのチェックを条件文に付加するべきと思います。
この回答への補足
s_huskysさんから教えていただいたものでできました!私のミスで動かなかっただけでした。ごめんなさい。本当にありがとうございました。
補足日時:2006/07/12 22:03s_huskyさんありがとうございます。
教えていただいたもので試してみたのですが、チェックがうまくかけられていないようでした。ごめんなさい。アクセスは初心者なもので、条件とか設定がうまくできなかったのだと思います。
現在の状況は、テーブルのNo.の数値型をテキスト型にしてみたところエラーが出なくなりました。本当に解決したかは微妙なのですが、このまま進めてみようと思います。いろいろとアドバイスありがとうございました。
No.2
- 回答日時:
> ・・・が、しかし、ココの箇所の入力をやめて(空白)次のレコードに動こうと
> したり終了しようとするとエラーが出ます。
レコードの入力自体をキャンセルしてもよければ、
> Cancel = True
の前後あたりに、
Me.Undo
を入れてみてください。
この回答への補足
Gin_Fさん。ありがとうございます。Me.UndoをCancel = Trueの前とか後ろとかに入れてみました。しかし、エラーメッセージは変わらず出てきます。
If DCount("No.", "テーブル1", _
"No.=" & Me!No. & "") > 0 Then
ここでダメみたいです。何とかなるものなのでしょうか?
ちなみにここは、必須入力でもなく、nullでもokにしておきたいのですが・・・
ご教授願えませんでしょうか?
Gin_Fさん。ありがとうございました。
いろいろと試してみたところ、テーブルのNo.の数値型をテキスト型にしてみたところエラーが出なくなりました。これで解決?!したのかは微妙ですが・・・。
Gin_Fさん色々とアドバイスありがとうございました。
No.1
- 回答日時:
> インデックス:なし(重複なし)。
にしてあります。インデックスを設定して、重複なしにすれば登録する前にエラーメッセージが
でると思いますけど、それではダメなんでしょうか?
メッセージを独自に設定したいのであれば、入力規則プロパティとエラーメッセージプロパティを
使えばできます。
Microsoft Office アシスタント: フォームのデータの入力検査または制限
http://office.microsoft.com/ja-jp/assistance/HP0 …
Microsoft Office アシスタント: DCount 関数
http://office.microsoft.com/ja-jp/assistance/HP0 …
この回答への補足
Gin_Fさん早速ありがとうございます。
実は、インデックスは別の箇所に使用していまして、この箇所にはついておりません。
記していただいたアドレスを参考に色々と調べまして、
Private Sub No._BeforeUpdate(Cancel As Integer)
If DCount("No.", "テーブル1", _
"No.=" & Me!No. & "") > 0 Then
Beep
MsgBox "既存のデータと同じNo.が入力されました! " & _
"別の値を入力してください。", _
vbOKOnly + vbExclamation, "重複エラー"
Cancel = True
End If
End Sub
としてみたらうまくいきました!???
・・・が、しかし、ココの箇所の入力をやめて(空白)次のレコードに動こうとしたり終了しようとするとエラーが出ます。
実行時エラー3075 クエリ式'No.='の構文エラー:演算子がありません。といわれてしまいます。
もし、回避方法があれば教えていただけないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) Excelのマクロについてご教授ください 2 2023/02/25 09:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
passwordが入れられません・・・・
-
Excelで入力したデータを自動的...
-
日付のテキストボックスに(例...
-
エクセル 自動入力
-
アクセスで数値型のフィールド...
-
アクセスの顧客管理情報・リレ...
-
Access2007、フォームのテキス...
-
データベースのINT型項目にNULL...
-
access日付チェックの方法
-
Access(office)のマクロの「値...
-
EXCELのユーザーフォームで入力...
-
Access2000 顧客マスターを作っ...
-
Access、データ入力後、「ECS」...
-
アクセス コンボボックスのリ...
-
Accessのパラメータクエリに入...
-
Access レポート印刷するときに...
-
YahooのIDがロックされてしまい...
-
エクセルVBA オプションボタ...
-
皆さん使っているブラウザを教...
-
「フォームを作成できませんで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
passwordが入れられません・・・・
-
データベースのINT型項目にNULL...
-
アクセスで数値型のフィールド...
-
フォームで入力しても反映されない
-
Access(office)のマクロの「値...
-
Excelで入力したデータを自動的...
-
日付のテキストボックスに(例...
-
Access2007 textboxに入力でき...
-
このオブジェクトに値を代入す...
-
アクセスのテキストボックスの...
-
ファイルメーカー 一ヵ月後の...
-
ユーザーフォームで数字にカン...
-
sqlldrの使用方法について
-
ACCESS 時間の入力方法
-
入力規則違反-任意のエラーメ...
-
Access2007、フォームのテキス...
-
Accessで主キーの最終番号を取...
-
ファイルメーカで経過月数を出...
-
Accessで所要時間の足し算
-
Accessのパラメータクエリに入...
おすすめ情報