Microsoft Access ClubAccessフォーラムの過去ログIndexページAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No5298.入力時のデータ重複を防ぐ方法

タイトル入力時のデータ重複を防ぐ方法
記事No: 5298
投稿日: 2006/10/21(Sat) 19:53
投稿者: misato
OS:WindowsXP
Access Version:2002

こんばんわ。
過去のログを見ながら入力時のデータ重複を防ぐやり方を
探しましたが、どうしても思うようにできません。

テーブル名:業務マスター
テーブル内容
フィールド名  データ型
−−−−−−−−−−−−−
ID       オートナンバー 
担当者ID    数値型
入力日     日付/時刻型
出勤時間    日付/時刻型
退社時間    日付/時刻型

などといったテーブルがあります。
担当者IDは、コンボボックスになっており、
従業員マスターとリレーションシップを結んであります

担当者IDと入力日が入力してある値と一致した場合に
重複データがあると判断し、エラーがでるようにしたいと思っています。

考えて作成したコードは
Private Sub 入力日_BeforeUpdate(Cancel As Integer)

Dim strname As Long
Dim strdate As Date
Dim strSQL As String
Dim Rst As DAO.Recordset

strname = Me.担当者ID
strdate = Me.入力日

strSQL = "select * from 業務マスター " & _
"where 担当者ID ='" & strname & "'" & _
"and 入力日 = '" & strdate & "'"


Set Rst = CurrentDb.OpenRecordset(strSQL)

If Rst.RecordCount > 0 Then

MsgBox "入力済みです"
Set Rst = Nothing
Cancel = True
Exit Sub
End If

Rst.Close
Set Rst = Nothing

End Sub

です。

そうすると、"抽出条件でデータ型が一致しません"とでます

見よう見まねで作成をしているため、理解がよくできていません。
どなたか教えてください。
よろしくお願いします

タイトルRe: 入力時のデータ重複を防ぐ方法
記事No: 5299
投稿日: 2006/10/21(Sat) 22:50
投稿者: Gin_II
> strSQL = "select * from 業務マスター " & _
> "where 担当者ID ='" & strname & "'" & _
> "and 入力日 = '" & strdate & "'"

担当者ID フィールドが数値型であれば、' は必要ないです。
入力日も、日付/時刻型であれば、' ではなく、# ですね。


strSQL = "select * from 業務マスター " & _
"where 担当者ID =" & strname & " & _
"and 入力日 = #" & strdate & "#"


ただ、このような内容であれば、DCount 関数を使った方が簡単ですね。

タイトルRe^2: 入力時のデータ重複を防ぐ方法
記事No: 5300
投稿日: 2006/10/21(Sat) 23:48
投稿者: misato
Gin_II さんへ
お返事ありがとうございます。

Gin_IIさんのコードを参考に入力してみましたが

>and 入力日 = #" & strdate & "#"

がエラーがでてしまいます。
理由がどうしてもわかりません(^^;

また、Dcountを使った場合はどのようなコードになるのでしょうか?

もしよろしければ教えてください。

よろしくお願いします。

タイトルRe^3: 入力時のデータ重複を防ぐ方法
記事No: 5301
投稿日: 2006/10/22(Sun) 12:57
投稿者: Gin_II
> strSQL = "select * from 業務マスター " & _
> "where 担当者ID =" & strname & " & _
> "and 入力日 = #" & strdate & "#"

ボーっとしてました。
 前後のスペースがない
 ヘンなところに引用符が入っている


strSQL = "SELECT * FROM 業務マスター " _
& "WHERE 担当者ID = " & strname _
& " AND 入力日 = #" & strdate & "#"

でどうでしょう?


DCount 関数の場合は、

Dim strWhere As String

strWhere = "担当者ID=" & Me!担当者ID _
& " AND 入力日=#" & Me!入力日 & "#"

If DCount("*", "業務マスター", strWhere) > 0 Then
MsgBox "入力済みです。"
Cancel = True
End If

とか。

タイトルRe^4: 入力時のデータ重複を防ぐ方法
記事No: 5302
投稿日: 2006/10/22(Sun) 19:21
投稿者: misato
Gin_II さんへ

ありがとうございました(o*。_。)oペコッ

うまく重複のエラーを出すことができました。
本当にありがとうございました☆

あとは自分の力で頑張ってみたいと思います。


このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています ---

 

ページの先頭へ 前ページへ戻る