访问VBA:如何在连续表单记录上获取自动编号

时间:2011-08-04 17:37:44

标签: forms ms-access vba access-vba autonumber

我有一种视图类型“连续形式”,它根据查询返回记录,我希望记录按照列出的顺序有一个数字标签,如1,2,3 ......:

form

有没有办法自动生成标签或文本框?

任何帮助表示赞赏!感谢

编辑:继承查询代码:

    Dim qd As DAO.QueryDef
    Set qd = CurrentDb.CreateQueryDef("pairsOrdered", "select * from allPairs order by Count desc")

    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("pairsOrdered")
    If Not rs.EOF Then
        Me.Label22.Visible = 0
    End If

    If Me.OpenArgs = "25" Then
        RecordSource = "select top 25 * from pairsOrdered"
    End If

    If Me.OpenArgs = "50" Then
        RecordSource = "select top 50 * from pairsOrdered"
    End If

    If Me.OpenArgs = "all" Then
        RecordSource = "select * from pairsOrdered"
    End If

1 个答案:

答案 0 :(得分:2)

如果您的表包含数字主键,则可以在查询中使用DCount()来生成序列号。在此示例中,id是数字和主键。

SELECT DCount("*","MyTable","id<=" & [m].[id]) AS sequence_num, m.id, m.some_text
FROM MyTable AS m
ORDER BY DCount("*","MyTable","id<=" & [m].[id]);

如果您愿意,可以更改ORDER BY以在字段列表中引用字段表达式的序数值,而不是整个字段表达式。

ORDER BY 1;

无论哪种方式,查询都应该为您的表单生成一个可编辑的记录源,但显然您将无法直接编辑sequence_num ...因此请将绑定到它的控件的属性设置为Enable = No和/或锁定=是。

你可以使用子查询代替sequence_num的DCount表达式,但是你将获得一个只读记录集。

此方法不需要数字主键,但您需要一个唯一的字段或字段组合。您也可以使用文本或日期字段来执行此操作。

编辑:如果删除表单中的行,请在表单的After Update Confirm事件中执行Me.Requery。如果在记录集结束之前添加要显示的行,请执行Me.Requery。如果您在现有行的唯一字段中编辑值,则相同。