|
▼みう さん:
こんにちは。
B) の方のコードです。
SQL(クエリ)を使って処理してみます。
まず、test にインデックスを張ります。
日付と社員番号で一意(Unique)になる様ですので
CREATE UNIQUE INDEX index1 ON test (日付, 社員番号);
上記をクエリにして実行されてみて下さい。
手動でつくる場合は hatena さんの詳しい説明がありますので
下記を参考にして下さい。
h tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=9826;id=access
Function DataImport() As Boolean
Dim strSQL As String
'W_ワークテーブルの初期化
strSQL = "DELETE FROM W_ワークテーブル"
CurrentDb.Execute strSQL, dbFailOnError
'------------------------------------
'インポート処理
'------------------------------------
If DCount("*", "Q_重複レコード") > 0 Then
If MsgBox("重複データが見つかりました。" & vbCrLf _
& "インポート処理を中止しますか?", "" _
& vbCritical + vbYesNo) = vbYes Then
DataImport = False
Exit Function
End If
End If
'testテーブルの重複データ更新処理
strSQL = "UPDATE test " _
& "INNER JOIN W_ワークテーブル " _
& "ON (test.日付 = W_ワークテーブル.日付) AND " _
& "(test.社員番号 = W_ワークテーブル.社員番号) " _
& "SET test.項目1 = W_ワークテーブル!項目1, " _
& "test.項目2 = W_ワークテーブル!項目2;"
'項目1、項目2の所は実際に更新したいフィールド名になります
CurrentDb.Execute strSQL, dbFailOnError
'全データをtestテーブルに追加
'Index1 が張ってあれば、重複レコードはインポートされない
strSQL = "INSERT INTO test( 日付, 社員番号, 項目1, 項目2 ) " _
& "SELECT W_ワークテーブル.日付, " _
& "W_ワークテーブル.社員番号, " _
& "W_ワークテーブル.項目1, " _
& "W_ワークテーブル.項目2 " _
& "FROM W_ワークテーブル;"
CurrentDb.Execute strSQL
DataImport = True
End Function
項目1、項目2の所は
みうさんが実際にお使いのテーブルに合わせて下さい。
|
|