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.

如何获得访问权限以删除 VBA 中的旧记录?

4

3 回答 3

2

创建一个DMax表达式,该表达式返回creation_date每个ID.

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

如果要一次删除所有具有重复 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 回答
1

您是否尝试过使用deletewithwhere子句?

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 回答