0

我有一个问题,我正在尝试寻找解决方案。

我有一张桌子,它看起来像这样:

@myTable
id - Number
value - Text
models - Memo

我也有一个看起来像这样的表:

@myModels
id - Number
model - Text
notes - Memo

@myTable.models 值是不同@myModels.model 字符串与'|' 的串联 特点。例如,它可能有 ModelA|ModelB|ModelC| 或仅 ModelA|ModelC|

我需要根据当前选择的模型从@myTable 过滤记录集。现在我有这样的事情:

Dim sql As String
sql = "SELECT * FROM myTable"
Dim rs1 As Recordset
Set rs1 = DBO.Edit (sql)

sql = "SELECT model FROM myModels"
dim rs2 As Recordset
Set rs2 = DBO.Read (sql)

If Not rs2.BOF Then rs2.MoveFirst
While Not rs2.EOF

  If Not rs1.BOF Then rs1.MoveFirst
  While Not rs1.EOF
    Dim models() As String
    models = Split(rs1![models], "|")
    Dim model As String

    For Each model In models
      If model = rs2.model Then
      'Do some processing
      End If
    Next model

    rs1.MoveNext
  Wend

rs2.MoveNext
Wend

我真的希望我能够在查询或过滤器中执行某种类型的正则表达式,所以它可能看起来像这样:

While Not rs2.EOF

  rs1.Filter( "Insert Regex Here" )
  If Not rs1.BOF Then rs1.MoveFirst
  While Not rs1.EOF
    ' Do Some Processing here
    rs1.MoveNext
  Wend

rs2.MoveNext
Wend

我想我的主要问题是 @myModels 表有大约 1000 条记录并且正在增长,而 @myTable 表中有超过 30k 条记录。当尝试多次循环遍历每个记录时,这需要很长时间才能循环。

任何解决方案将不胜感激。

4

2 回答 2

0

你试过 sql = "SELECT model FROM myModels where criteria" 吗?不确定当前选择的模型是什么意思,但您可以使用 tempVars 添加临时字符串或您需要的任何其他内容,也许可以加入您的 sql?你能详细说明这个模型来自哪里以及它是如何选择的吗

于 2012-12-05T04:46:27.290 回答
0

在 VBA 中迭代记录通常比单个 SQL 查询慢。通过单个 SQL 查询运行将比使用 VBA 的多个循环更快:

SELECT myTable.*
FROM myTable, myModels
WHERE myTable.models LIKE "%" & myModels.model & "%"

在 VBA 中:

Dim sql As String, rs As Recordset
sql = _
      "SELECT * " & _
      "FROM myTable, myModels " & _
      "WHERE myTable.models LIKE ""*"" & myModels.model & ""*"""

Set rs = dbs.OpenRecordset(sql)
While Not rs.EOF
      'Some processing here
Loop

诚然,这仍然会很慢,因为这是一个外连接,并且因为我们使用的是非优化LIKE运算符。

如果不是myTable.models字段,您可以添加一个中间表:

@myTableModels
tableID - number
modelID - number

通过适当的关系,生成的查询将几乎是即时的:

SELECT myTable.*
FROM (myTable
INNER JOIN myTableModels
    ON myTable.id = myTableModels.tableID)
INNER JOIN myModels
    ON myTableModels.modelID = myModels.ID
于 2012-12-05T10:32:15.767 回答