用 select distinct * from table 插入到临时表中 然后将原来的表中的纪录删除 然后将临时表中的纪录插入的原来的表中
原理同楼上一样,但我的办法可以少导一次数据! (1)建一个新表,结构和源表一样。 (2)insert into 新表 select distinct * from 原表 (3)将原表删除,新表名字改为原表。
楼上两位说的都是基本的方法,不过三楼的方法还可以简化: 1 select distinct * into 新表 from 原表 2 将原表删除,新表名字改为原表。但是,数据库表改名比较麻烦,要采用 ADOX 的 Colunm 对象的 Name 属性或 DAO 的 FieldDef 的 Name 属性。因为 ADO 的 Field 对象的 Name 属性是只读的。因此,如果用 ADO,我宁可用二楼的方法。dim cn as new adodb.connection cn.open "provider=microsoft.jet.oledb.4.0;data source=" & strPathName cn.execute "select distinct * into 新表 from 原表" cn.execute "delete from 原表" cn.execute "insert into 原表 select * from 新表" cn.execute "drop table 新表" cn.close set cn = nothing
Private Sub Command5_Click() Dim cn As New ADODB.Connection cn.open "provider=microsoft.jet.oledb.4.0;data source=" & App.Path + "/DAT.mdb" cn.Execute "select distinct * into ddd from dt" cn.Execute "delete from dt" cn.Execute "insert into dt select * from ddd" cn.Execute "drop table ddd" cn.Close Set cn = Nothing End Sub为什么没有效果?只是数据库变大了。也没有看见有新表出现
drop table ddd啊,当然看不到新表出现了,数据库文件增大很正常的,谁让ACCESS是ISAM文件结构呢,压缩后就会变小的,前提是你确实有重复记录。
整理数据库后,压缩一下。 添加数据后,即使再删除,数据库依然变大。需要压缩。引用 Microsoft Jet and Replication Objects 2.1 以上版本。Dim jro As jro.JetEngine Set jro = New jro.JetEngine jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source==" & App.Path & "/DAT.mdb", _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source==" & App.Path & "/DAT1.mdb;Jet OLEDB:Engine Type=4" If Dir(App.Path & "/DAT1.mdb") Kill App.Path & "/DAT.mdb" Name App.Path & "/DAT1.mdb" As App.Path & "/DAT.mdb" End If
然后将原来的表中的纪录删除
然后将临时表中的纪录插入的原来的表中
(1)建一个新表,结构和源表一样。
(2)insert into 新表 select distinct * from 原表
(3)将原表删除,新表名字改为原表。
1 select distinct * into 新表 from 原表
2 将原表删除,新表名字改为原表。但是,数据库表改名比较麻烦,要采用 ADOX 的 Colunm 对象的 Name 属性或 DAO 的 FieldDef 的 Name 属性。因为 ADO 的 Field 对象的 Name 属性是只读的。因此,如果用 ADO,我宁可用二楼的方法。dim cn as new adodb.connection
cn.open "provider=microsoft.jet.oledb.4.0;data source=" & strPathName
cn.execute "select distinct * into 新表 from 原表"
cn.execute "delete from 原表"
cn.execute "insert into 原表 select * from 新表"
cn.execute "drop table 新表"
cn.close
set cn = nothing
Dim cn As New ADODB.Connection
cn.open "provider=microsoft.jet.oledb.4.0;data source=" & App.Path + "/DAT.mdb"
cn.Execute "select distinct * into ddd from dt"
cn.Execute "delete from dt"
cn.Execute "insert into dt select * from ddd"
cn.Execute "drop table ddd"
cn.Close
Set cn = Nothing
End Sub为什么没有效果?只是数据库变大了。也没有看见有新表出现
添加数据后,即使再删除,数据库依然变大。需要压缩。引用 Microsoft Jet and Replication Objects 2.1 以上版本。Dim jro As jro.JetEngine
Set jro = New jro.JetEngine
jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source==" & App.Path & "/DAT.mdb", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source==" & App.Path & "/DAT1.mdb;Jet OLEDB:Engine Type=4"
If Dir(App.Path & "/DAT1.mdb")
Kill App.Path & "/DAT.mdb"
Name App.Path & "/DAT1.mdb" As App.Path & "/DAT.mdb"
End If
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source==" & App.Path & "/DAT1.mdb;Jet OLEDB:Engine Type=4"