1

毎日公開されるcsvファイルから取り込まれたレコードを含むアクセスデータベースがあります。随時、既存のレコードが更新されます。私の現在のデータベースは次の形式です

... ID ... Date on which the csv file was created
     1             26/05/2013
     1             27/05/2013
     2             27/05/2013
     3             26/05/2013
etc.

Access で VBA の古いレコードを削除するにはどうすればよいですか?

4

3 に答える 3

2

それぞれDMaxの最新のものを返す式を作成します。creation_dateID

DMax("creation_date", "YourTable", "ID=" & <current ID>)

次に、SELECTクエリでその式を使用して、破棄する行を識別します。

SELECT
    y.ID,
    y.creation_date,
    DMax("creation_date", "YourTable", "ID=" & y.ID)
FROM YourTable AS y;

クエリが正しく機能したら、SELECTクエリでその作業DMax式を使用しDELETEます。

DELETE FROM YourTable
WHERE creation_date < DMax("creation_date", "YourTable", "ID=" & [ID]);
于 2013-05-27T16:18:57.360 に答える
1

deleteで aを使用してみましたか?where

delete from t
     where exists (select 1 from t t2 where t2.id > t.id)

私は、Access で同じテーブルから選択して削除できることに絶対的な自信を持っているわけではありません。そうでない場合は、ID を一時テーブルに入れ、それを使用して削除できます。

正直に言うと、レコードを直接削除するという考えには、私はわくわくしません。必要なレコードで新しいテーブルを作成してみてください。

select *
from t
where exists (select 1 from t t2 where t2.id > t.id)

にインデックスがあると仮定すると、これは機能するはずですid次に、元のテーブルを削除し、正しいレコードがそこにあることを確認したら、新しいテーブルに置き換えます。

于 2013-05-27T15:46:35.970 に答える
1

IDが重複している古いレコードをまとめて削除したい場合は、このSQLを実行するだけです。

ただし、プライマリまたは一意のフィールドが必要です。単なる自動採番フィールドであるRecIDというフィールドを追加しました。

strSQL = ""
strSQL = strSQL & "DELETE " & vbCrLf
strSQL = strSQL & "  t.recid, " & vbCrLf
strSQL = strSQL & "  t.* " & vbCrLf
strSQL = strSQL & "FROM t " & vbCrLf
strSQL = strSQL & "WHERE  t.recid NOT IN (SELECT Last(t.recid) AS LastOfRecID " & vbCrLf
strSQL = strSQL & "                       FROM   t " & vbCrLf
strSQL = strSQL & "                       GROUP  BY t.id)"

次に、あなたはただCurrentdb.Execute(strSQL)

于 2013-05-27T16:30:30.633 に答える