Excel 索引一个库,然后在库中搜索一个词,并记录所有可能的匹配项
我有一个大约400000条记录的数据库,我想把这些记录的索引结果搜索到另一列,以检查它是否存在。我希望它记录,即使只有部分字符串存在。我有一个在Excel中尝试过的例子。以2.8ghz的速度处理4个核的100000条记录(4小时)需要很长时间。我想在MS Access中这样做会更快。在MS Access中可以更快地完成此操作吗?我会把代码贴在这里Excel 索引一个库,然后在库中搜索一个词,并记录所有可能的匹配项,excel,vba,function,ms-access,Excel,Vba,Function,Ms Access,我有一个大约400000条记录的数据库,我想把这些记录的索引结果搜索到另一列,以检查它是否存在。我希望它记录,即使只有部分字符串存在。我有一个在Excel中尝试过的例子。以2.8ghz的速度处理4个核的100000条记录(4小时)需要很长时间。我想在MS Access中这样做会更快。在MS Access中可以更快地完成此操作吗?我会把代码贴在这里 =INDEX($A:$A,AGGREGATE(15,7,ROW($A:$A)/(ISNUMBER(SEARCH($C2,$A:$A))),COLUMN
=INDEX($A:$A,AGGREGATE(15,7,ROW($A:$A)/(ISNUMBER(SEARCH($C2,$A:$A))),COLUMN(A:A)))
在MS Access中,是否有使用VBA代码或查询来执行此操作的方法 是的,这是可以做到的,尽管我不确定它会更快。有一个库字符串表和另一个数据库字符串表 使用查询的选项要求每个表中都有一个唯一的标识符字段。文本字符串可能用于此目的,但我推荐一个数字。如果尚未在每个表中添加自动编号字段 考虑: 查询1:LibDB
SELECT [DB_ID]+[LIB_ID] AS ID, DB.WordDB, Lib.WordLib
FROM Lib, DB
WHERE (((InStr([WordLib],[WordDB]))>0))
ORDER BY DB.WordDB, Lib.WordLib;
问题2
TRANSFORM First(LibDB.WordLib) AS FirstOfWordLib
SELECT LibDB.WordDB
FROM LibDB
GROUP BY LibDB.WordDB
PIVOT DCount("*","LibDB","WordDB='" & [WordDB] & "' AND ID<" & [ID])+1;
请编辑您的问题并添加有关您的数据库、您尝试过的内容和预期结果的更多信息。
Sub StringMatch()
Dim rsDB As DAO.Recordset, rsLIB As DAO.Recordset, rsRST As DAO.Recordset, n As Integer
Set rsDB = CurrentDb.OpenRecordset("SELECT WordDB FROM DB ORDER BY WordDB")
Set rsRST = CurrentDb.OpenRecordset("SELECT * FROM Result WHERE 1=1")
n = 1
CurrentDb.Execute "DELETE FROM Result"
Do While Not rsDB.EOF
rsRST.AddNew
Set rsLIB = CurrentDb.OpenRecordset("SELECT WordLib FROM Lib " & _
"WHERE InStr([WordLib],'" & rsDB!WordDB & "') > 0 ORDER BY WordLib;")
rsRST!WordDB = rsDB!WordDB
Do While Not rsLIB.EOF And n < 255
rsRST("F" & n) = rsLIB!WordLib
n = n + 1
rsLIB.MoveNext
If rsLIB.EOF Then
rsRST.Update
n = 1
End If
Loop
rsLIB.Close
rsDB.MoveNext
Loop
End Sub
Dim rsLIB As New ADODB.Recordset, rsDB As New ADODB.Recordset, c As Integer, r As Integer
Dim cnx As New ADODB.Connection
'setup the connection
'[HDR=Yes] means the Field names are in the first row
cnx.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _
"Data Source='" & ThisWorkbook.FullName & "';" & _
"Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"
rsDB.Open "SELECT Database FROM [Sheet1$] WHERE NOT Database Is Null", _
cnx, adOpenDynamic, adLockOptimistic
c = 3
r = 2
Do While Not rsDB.EOF
rsLIB.Open "SELECT Library FROM [Sheet1$] " & _
"WHERE InStr([Library],'" & rsDB!Database & "')>0 ORDER BY Library", _
cnx, adOpenDynamic, adLockOptimistic
Do While Not rsLIB.EOF
Worksheets("Sheet1").Cells(r, c).Value = rsLIB!Library
rsLIB.MoveNext
c = c + 1
Loop
c = 3
rsLIB.Close
r = r + 1
rsDB.MoveNext
Loop