Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 如何在Access中搜索表中的字段_Ms Access_Find_Vba - Fatal编程技术网

Ms access 如何在Access中搜索表中的字段

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 = '

使用VBA,我如何在名为“ServiceYES”的表中的“Service”字段中搜索文本字符串,例如“CHIR”

之后,我想为表“ServicesYES”中存在的所有行“CHIR”保存相邻字段。“服务是”表如下:

基本上,我希望在“服务”列中找到所有“CHIR”,然后将CHIR左侧的名称保存为数组,例如“FRANKL\u L”“SANTIA\u D”


提前感谢您的帮助。

从创建
选择
查询开始

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