vba 自动编号字段 row_number counter

SELECT a.ID, 
       a.AText, 
       (SELECT Count(ID) 
        FROM table1 b WHERE b.ID <= a.ID 
        AND b.AText Like "*a*") AS RowNo
FROM Table1 AS a
WHERE a.AText Like "*a*"
ORDER BY a.ID;


SELECT x.ID,count(*) as RowNumber 
FROM 
(select distinct * from KZS_AllClass Where id in(3,6,9)) as x 
inner join 
(select distinct * from KZS_AllClass Where id in(3,6,9)) as y 
on x.ID>=y.ID 
group by x.ID


清空表全部记录后重置自动编号起始值

时 间:2012-05-17 06:33:34
作 者:www.microsoft.com   QQ:77239897  点击这里给网行者发消息
摘 要:清空表全部记录后重置自动编号起始值
正 文:

点击下载此附件

Function ChangeSeed(strTbl As String, strCol As String, lngSeed As Long) As Boolean
'清空表全部记录后重置自动编号起始值
'You must pass the following variables to this function.
'strTbl:包含自动编号字段的表
'strCol:表中自动编号的字段名
'lngSeed:新自动编号的起始值
'必须同时引用 Microsoft ActiveX Data Objects 2.x 和 Microsoft ADO Ext 2.x for DDL and Security Libraries(其中 2.x 是指 2.1 或更高版本)

    Dim cnn As ADODB.Connection
    Dim cat As New ADOX.Catalog
    Dim col As ADOX.Column
    
    DoCmd.RunSQL "Delete * FROM " & strTbl & ""
    
    Set cnn = CurrentProject.Connection
    cat.ActiveConnection = cnn
    Set col = cat.Tables(strTbl).Columns(strCol)

    col.Properties("Seed") = lngSeed
    cat.Tables(strTbl).Columns.Refresh
    If col.Properties("seed") = lngSeed Then
        ChangeSeed = True
    Else
        ChangeSeed = False
    End If
    Set col = Nothing
    Set cat = Nothing
    Set cnn = Nothing

End Function



http://access.mvps.org/access/tables/tbl0005.htm

 Have Autonumber field start from a value different from 1

Author(s)
Dev Ashish &
Alden Streeter

(Q)    Can I change the starting value of a counter type field?

(A)    Yes, you can.. to do this:
Create the first table that contains the counter type field that you want to start on another number. Don't enter any records.Create a second table, with a single long integer number type field that has the same name as the counter field in the first table. Create a record in the second table by entering a number one less than the number you want to start the counter at in the  first table. Create an append query, to append the one record in the second table to the first table, and run it Delete the second table, delete the record that you appended to the first table, and start entering data.

Alternative method:

You can make an Append query that just appends a value from a parameter, to just the auto-number field (as long as no other fields are required), e.g.:

PARAMETERS [Number] Long;
INSERT INTO tblAuto ( intNumber )
SELECT [Number] AS Expr1;


http://club.excelhome.net/thread-863167-1-1.html

Sub Macro1()
    Dim myData As String
    Dim myDb As DAO.Database
    Dim myTbl As DAO.TableDef
    Dim f As DAO.Field
    myData = ThisWorkbook.Path & "\abc.mdb"
    myTable = "清单"
    mytablc = "基本信息"
    On Error Resume Next
    Kill myData
    On Error GoTo 0
    Set myDb = CreateDatabase(myData, dbLangChineseSimplified)
    Set myTbl = myDb.CreateTableDef(myTable)
    With myTbl
        Set f = .CreateField("序号")
        f.Type = dbLong
        f.Attributes = dbAutoIncrField
        .Fields.Append f
'        .Fields.Append .CreateField("序号", dbLong, 50)
        .Fields.Append .CreateField("定额编号", dbText, 50)
        .Fields.Append .CreateField("工程名称", dbText, 200)
        .Fields.Append .CreateField("单位", dbText, 20)
        .Fields.Append .CreateField("人工费", dbSingle)
        .Fields.Append .CreateField("材料费", dbSingle)
        .Fields.Append .CreateField("机械费", dbSingle)
        .Fields.Append .CreateField("基价", dbSingle)
        .Fields.Append .CreateField("计算式", dbText, 255)
    End With
    myDb.TableDefs.Append myTbl
    
    myDb.Close


    Set myDb = Nothing

End Sub




excel中的sql没有排名函数,比较蛋疼,否则用now_number()可简单解决

不过你可以用多个组合字段使其唯一从而达到结果
select *,(select count(*)+1 from tb where a+b+c > t.a+t.b+t.c) as id from tb as t

其实更简单的方法是你在源表中按某种方式排完序后直接填充序列即可


Access数据库自增长字段值的修改及初始值的设置是本文我们主要要介绍的内容,Access的自增长字段的值的修改,发现原来Access自增长比起SQL Server的标识列有一定的灵活性。比如Access的自增长字段可以直接insert记录时指定数值,但是不要和已经有的记录的该字段值重复了,会主键冲突的,而SQL Server就不行了。

并且如果某个自增长序号已经有记录了,那么删除这条记录后还可以设定该值作为新记录的序号值。但是对于已有的记录,就不能修改自增长字段的值了,如果确需修改,有两种方法,要不就是删除原记录,重新插入数据时指定该字段值。要不就是去除自增长属性,修改成一个不重复的值保存后再将该字段类型设置成自动增长。

那么,如果想设定Access数据库自增长字段的初始值该怎么办呢,这个较为简单,可以通过特定SQL语句即可实现。

如果创建表结构时想设定自增长字段的初始值可以这条语句:

CREATE TABLE 表名 ( 自增长字段名 AUTOINCREMENT (1000, 10), ItemId LONG, Quantity LONG)

如果表结构已经存在,可以通过这条语句修改:

ALTER TABLE 表名 ALTER COLUMN 自增长字段名 COUNTER (2000, 50)

如果想复位自增长种子重新开始,可以这样:

ALTER TABLE 表名 ALTER COLUMN 自增长字段名 COUNTER (1, 1)

好了,SQL Server和Access两种数据库的自增长(标识列)都可以修改字段值了。有什么用呢,呵呵,很有用,对于我目前手同的工作来说,就是可以在程序中增加数据导入导出文本文件了,并且导入后一些关键的排序主键字段值不会发生改变,能保持原有数据的编号。

关于Access数据库自增长字段值的修改及初始值的设置的相关内容就介绍到这里了,希望本次的介绍能够对您有所收获!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值