Ms access 如何在Access中搜索表中的字段
使用VBA,我如何在名为“ServiceYES”的表中的“Service”字段中搜索文本字符串,例如“CHIR” 之后,我想为表“ServicesYES”中存在的所有行“CHIR”保存相邻字段。“服务是”表如下: 基本上,我希望在“服务”列中找到所有“CHIR”,然后将CHIR左侧的名称保存为数组,例如“FRANKL\u L”,“SANTIA\u D”Ms access 如何在Access中搜索表中的字段,ms-access,find,vba,Ms Access,Find,Vba,使用VBA,我如何在名为“ServiceYES”的表中的“Service”字段中搜索文本字符串,例如“CHIR” 之后,我想为表“ServicesYES”中存在的所有行“CHIR”保存相邻字段。“服务是”表如下: 基本上,我希望在“服务”列中找到所有“CHIR”,然后将CHIR左侧的名称保存为数组,例如“FRANKL\u L”,“SANTIA\u D” 提前感谢您的帮助。从创建选择查询开始 SELECT Code_Perso FROM ServicesYES WHERE Service = '
提前感谢您的帮助。从创建
选择查询开始
SELECT Code_Perso
FROM ServicesYES
WHERE Service = 'CHIR';
如果只需要唯一的值,请使用选择不同的代码\u Perso
如果您想按字母顺序排列,请添加按代码排序
获得满意的查询后,基于该查询打开一个DAO记录集,并遍历它返回的code\u Perso
值
您不需要将它们直接加载到最终数组中。将它们添加到逗号分隔的字符串中可能更容易。之后,您可以使用Split()
函数(假设您的Access版本>=2000)创建阵列
下面是让您开始学习的示例代码。它主要是标准的锅炉板,但它实际上可能工作。。。一旦你给它“你的疑问”
我测试了这个,它似乎有效。此函数将提取ServiceYes='CHIR'所在的所有记录,并将Code\u Person值转储到一个数组中,该数组将返回:
Function x() As String()
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset( _
"Select * from ServiceYES where Service='CHIR'")
Dim Arr() As String
Dim i As Integer
While rst.EOF = False
ReDim Preserve Arr(i)
Arr(i) = rst.Fields("Code_Person")
i = i + 1
rst.MoveNext
Wend
x = Arr
End Function
示例用法:
Debug.Print x()(0)
保罗
这是我在几分钟内拼凑的东西。可以将其添加到模块中的VBA编辑器中。它使用了一个技巧来让RecordCount属性正常工作。对于数组的重试,您可以更新函数并创建一个调用例程。如果您需要这段代码,只需发表评论即可
谢谢
Option Compare Database
Function QueryServiceYES()
Dim db As Database
Dim saveItems() As String
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("SELECT Code_Perso, Service, Favorites " & _
"FROM ServiceYES " & _
"WHERE Service = 'CHIR'")
'bug in recordset, MoveFirst, then MoveLast forces correct invalid "RecordCount"
rs.MoveLast
rs.MoveFirst
ReDim Preserve saveItems(rs.RecordCount) As String
For i = 0 To rs.RecordCount - 1
saveItems(i) = rs.Fields("Code_Perso")
rs.MoveNext
Next i
'print them out
For i = 0 To UBound(saveItems) - 1
Debug.Print saveItems(i)
Next i
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Function
创建返回所需信息的查询。无论您使用什么名称来保存它,请将其放入以下行:Set rs=db.OpenRecordset(“yourquery”,dbOpenSnapshot)
@Paolo,这就是我在您的另一个问题中所说的。左键连接查询中的所有表,并查找3个ID相等的行,这将为您提供最终结果集。如果没有查询来完成您的工作,VBA将无法找到您的结果。
Option Compare Database
Function QueryServiceYES()
Dim db As Database
Dim saveItems() As String
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("SELECT Code_Perso, Service, Favorites " & _
"FROM ServiceYES " & _
"WHERE Service = 'CHIR'")
'bug in recordset, MoveFirst, then MoveLast forces correct invalid "RecordCount"
rs.MoveLast
rs.MoveFirst
ReDim Preserve saveItems(rs.RecordCount) As String
For i = 0 To rs.RecordCount - 1
saveItems(i) = rs.Fields("Code_Perso")
rs.MoveNext
Next i
'print them out
For i = 0 To UBound(saveItems) - 1
Debug.Print saveItems(i)
Next i
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Function