将分隔符添加到Access

时间:2015-08-05 17:28:28

标签: vba split

我正在尝试分隔备忘录字段。该字段中包含多个注释,我需要将其解析为不同的列。然而,每个音符遵循相同的逻辑,以mm / dd / yyyy开头,然后音符本身后跟一个空格。

所以一个备忘录字段的例子是

01/25/2000工作在Rack-ID 03/03/2010签约Rack-ID 05/15/2014更新了Rack-ID

我需要将每个注释解析为Access中的不同列。

我正在研究VBA中的Split函数,他们最初有" |"作为一个分隔符,但删除它,现在我必须拉日期

注意" tbl_example"是我的测试访问数据库中的表 " Tx_example"是包含要在我的测试访问数据库中分隔的数据的列的名称

Sub Example()

On Error GoTo err_Handler

Dim rsD As DAO.Recordset
Set rsD = CurrentDb.OpenRecordset("tbl_Example")

 Do While Not rsD.EOF
    rsD.Edit
    rsD!F1 = Trim(Split(rsD!Tx_Example, "|")(0))
    rsD!F2 = Trim(Split(rsD!Tx_Example, "|")(1))
    rsD!F3 = Trim(Split(rsD!Tx_Example, "|")(2))
    rsD.Update
    rsD.MoveNext
Loop


sub_Exit:

rsD.Close
Set rsD = Nothing
Exit Sub

err_Handler:

If Err.Number = 9 Then
    Resume Next
Else
    MsgBox "Err: " & Err.Number & vbNewLine & Err.Description
End If
End Sub

不确定我如何更换" |"用日期搜索。 我也不反对做一个替换和插入" |"就在每个日期之前,所以我会让我的分隔符回来。

问题是我不确定如何在文本备注字段中找到日期,否则我将能够使用替换功能或更新查询。

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:2)

Public Function AddPipesBeforeDates(ByVal strText As String) As String
    Dim regex As RegExp
    Dim matches As Object

    Set regex = CreateObject("VBScript.RegExp")
    regex.Global = True
    regex.Pattern = "\d{2}/\d{2}/\d{4}"
    Set matches = regex.Execute(strText)
    For Each m In matches
        strText = Replace(strText, m, "|" & m)
    Next
    AddPipesBeforeDates = strText

    Set matches = Nothing
    Set regex = Nothing
End Function

Sub Example()

On Error GoTo err_Handler

Dim rsD As DAO.Recordset
Dim results as variant
Set rsD = CurrentDb.OpenRecordset("tbl_Example")

 Do While Not rsD.EOF
    results = split(AddPipesBeforeDates(rsD!Tx_Example), "|")
    rsD.Edit
    rsD!F1 = Trim(results(1))
    rsD!F2 = Trim(results(2))
    rsD!F3 = Trim(results(3))
    rsD.Update
    rsD.MoveNext
Loop


sub_Exit:

rsD.Close
Set rsD = Nothing
Exit Sub

err_Handler:

If Err.Number = 9 Then
    Resume Next
Else
    MsgBox "Err: " & Err.Number & vbNewLine & Err.Description
End If
End Sub

答案 1 :(得分:0)

我最近写了类似的东西来从备忘录字段中删除过时的注释。此代码可能无法正常工作,但会让您更接近并为您提供一些想法。

一些初步说明:不要指望例程在第一次扫描时完成全部工作。创建临时表以将结果写入,并且每次运行例程时,首先清除临时表。每次运行后,调整代码以捕获上一次运行中遗漏的所有内容。这样,您将优化例程,直到准确捕获所有数据。您可能还需要手动编辑一些注释以使其工作

/usr/lib/jvm/java-8-oracle/jre/

另外,我强烈建议不要在同一个表中使用多个音符字段。您的Notes表应该看起来像我上面的temp_Notes表。在例程成功之后,只需运行Notes表而不是temp_Notes就可以了。

Apache Maven 3.0.5
Maven home: /usr/share/maven
Java version: 1.8.0_51, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-oracle/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.16.0-30-generic", arch: "amd64", family: "unix"