根据字段中找到的文本删除记录(

时间:2012-07-04 14:23:25

标签: sql ms-access vba ms-access-2007 access-vba

我通常在Excel 2007中完成大部分工作,但我不认为excel是管理我需要处理的数据的正确工具。所以我试图将excel电子表格转换为Access 2007数据库,我可以毫无问题地进行操作,但在对电子表格做任何事情之前,我会经历清理其中数据的过程,以便使用结果信息。在excel中我使用一个宏,如下面的

Sub deletedExceptions_row()
    Dim i As Long
    Dim ws As Worksheet

    On Error GoTo whoa

    Set ws = Sheets("data") 

    With ws
        For i = .Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
            If .Cells(i, 3) = "" Or _
              VBA.Left(.Cells(i, 3), 4) = "511-" Or _
              VBA.Left(.Cells(i, 3), 5) = "CARL-" Then
                .Rows(i).Delete
            End If
        Next i
    End With
    Exit Sub
whoa:
    MsgBox "Value of i is " & i
End Sub

删除电子表格中不必要的记录,如何在Access 2007中完成相同的操作。

宏正在查找特定部分或者更确切地说是记录的第3个字段的前几个字符,以确定是否需要删除整个记录(例如511-QWTY-SVP或CARL-52589- 00)。总共大约有180种这样的字符类型会影响需要从电子表格中删除的1000行,但我想在Access 2007中复制相同的过程,但不知道如何。

感谢您所有对此问题的帮助

4 个答案:

答案 0 :(得分:3)

在Access中,您可以执行DELETE语句来丢弃字段中的值为空字符串(“”)或与您的某个模式匹配的行。

DELETE FROM YourTable
WHERE
       YourField = ""
    OR YourField ALike "511-%"
    OR YourField ALike "CARL-%";

对于YourField索引,WHERE子句中的模式匹配相对于使用Left()函数(例如您使用的电子表格宏)的查询提供了潜在的大幅提升。 IOW,以下查询将要求db引擎在YourTable的每一行上运行那些Left()表达式。但是通过上面的查询和YourField索引,数据库引擎可以简单地选择匹配的行...这可以很快地快一个数量级。

DELETE FROM YourTable
WHERE
       YourField = ""
    OR Left(YourField, 4) = "511-"
    OR Left(YourField, 5) = "CARL-";

答案 1 :(得分:3)

Sub DeleteRows(strVal as string)
     strVal = Trim(strVal)
     if strVal = "" then exit sub
     dim dbs as Database
     set dbs = CurrentDB
     dbs.execute "Delete * FROM YOURTABLE where YOURFIELD Like '" & strVal & "*'"
     set dbs = Nothing
End Sub

然后为每个项目调用

DeleteRows("Carl-")
DeleteRows("511-")

答案 2 :(得分:2)

鉴于您有180个可能的问题行,创建问题列表表可能是有意义的。例如:

<强> ExcelImport

ID  ARow
1   Carl-abdre
2   511-ferw2
3   wywr-carl
4   123-456

<强> ProblemList

Problem
511-
Carl-

<强>查询

DELETE 
FROM ExcelImport
WHERE ExcelImport.ID In (
    SELECT ID 
    FROM ExcelImport, ProblemList 
    WHERE ARow Like [Problem] & "*" Or ARow & ""="")

查询后的ExcelImport

ID  ARow
3   wywr-carl
4   123-456

答案 3 :(得分:0)

您使用SQL语言管理数据库数据。对于Access,请检查:

http://msdn.microsoft.com/en-us/library/bb177896%28v=office.12%29.aspx

Sub DeleteX()

    Dim dbs As Database, rst As Recordset
    Set dbs = OpenDatabase("Northwind.mdb")

    dbs.Execute "DELETE * FROM " _
        & "Employees WHERE Title ALike 'FOOBAR-%';"
    dbs.Close
End Sub