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 が運営しています ---

|