你可以使用
Microsoft Jet and Replication Objects
这里给你vb的例子,改成asp应该会吧?
    Sub Main()        Dim jro As JRO.JetEngine        jro = New JRO.JetEngine()        jro.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\nwind.mdb", _
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\NewNwind.mdb;Jet OLEDB:Engine Type=5")        MsgBox("Finished Compacting Database!")
    End Sub

解决方案 »

  1.   

    要么就让系统自己编,要么就不要使用counter类型的字段。删除全部数据后,插入一条记录,记住指定counter类型的字段的值,那么以后再插入记录时即使不指定此字段的值,系统也会根据上次指定得值自动递增。但是,这是一对矛盾。如果你认为counter类型的字段还有业务意义,那么就不要用counter类型。比如你要让会计凭证的编号自动递增,千万不要用counter类型,你应该考虑到在很多情况下它的流程和你的要求根本不同,适用它就是自找麻烦。(比如两个用户同时追加数据,但是第一个用户未完成就死机了,此时第二个用户追加数据成功,那么第二个用户的凭证编号显然应该连续,但是counter的处理流程不是这样的)
      

  2.   

    create table myTable (ID counter,other text)那么,以下可以使得ID重新从1 开始:
    delete from myTable
    insert myTable (ID,other) value (1,'第一行资料')
    insert mytable (other) value ('其它行资料')至少对于Jet3.0(Access 97、98)是适合的。但是我认为,如果你提出标题这个问题又确实想解决,最好还是相信不值花力气解决(因为很多counter的问题你将来还得应付),最好放弃counter类型,不要依靠系统,而是自己给编号字段计算正确的值。
      

  3.   

    对不起,上面的value应该为values。
      

  4.   

    呵呵,楼主还有各位,为何不试试我的方法?
    如果要让自动编号以最小可能值开始,只要压缩数据库即可。如果表已经清空,那么就是从1开始。
    如果mdb文件在web服务器上,那么可以在asp中创建jro对象来压缩。
    就这么简单。