如何解决使用VBA在Access表中查找值而没有唯一标识符的情况
我有一张这样的桌子:
+-----------+------+
| TableName | Flag |
+-----------+------+
| TableG | 0 |
| TableE | 0 |
| TableR | 1 |
| TableL | 1 |
| TableN | 0 |
我想做的是有一个函数来查找Flag = 1的每个TableName,以便我可以将Flag = 1的每个表分配给表单中的按钮(例如,将第一个实例分配给Button1等) )。棘手的是该表无法编辑,因此无法分配唯一的ID /计数来轻松地抓取项目。
这是我到目前为止尝试过的:
- DLookup无法处理具有多个查找匹配项(例如DLookup(“ TableName”,“ MyTable”,“ Flag = 1”)不允许我访问Flag = 1的所有值),所以我认为我可以用它来将它们存储在数组中
- 我尝试使用RecordSet(请参见下文),但是我无法弄清楚如何使sql字符串自动添加计数,以便可以引用每个表名(例如TableNameRS(1)来拉取名称)带有Flag = 1的第一个表)
Public Function TableNameRS(TableID As Integer)
Dim RS As DAO.Recordset
Dim sql As String
Dim Name As Variant
sql = "select TableName,COUNT(TableName) from MyTable where Flag=1"
Set RS = CurrentDb.OpenRecordset(sql)
Name = RS("TableName")
TableNameRS = Name
RS.Close
End Function
我没主意-我在这里有什么选择?
解决方法
如果记录和按钮的数量是固定的,例如10,并且按钮的名称类似btn1,btn2等,请考虑以下过程:
Public Sub TableNameRS(TableID As Integer)
Dim RS As DAO.Recordset
Set RS = CurrentDb.OpenRecordset("SELECT TableName FROM MyTable WHERE Flag=1 ORDER BY TableName")
For x = 1 to 10
Me("btn" & x).Caption = RS("TableName")
RS.MoveNext
Next
RS.Close
End Function
可以在表单Open事件中调用该过程。然后,按钮Click事件中的代码可以将其标题作为参数传递给需要使用TableName值进行操作的任何其他过程。
在Access查询中计算序列标识符是一个常见的话题MS Access Restart Number Sequence。
假设TableName的值是唯一的:
SELECT TableName,DCount("*","table","TableName<'" & [TableName] & "' AND Flag=1")+1 AS Seq,FROM table
WHERE Flag=1
ORDER BY TableName;
可以将该查询用作表单或报表的RecordSource或在其上执行DLookup()。
请注意,过滤器的任何更改都会影响序列计算。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。