Ms access MS Access:如何设置此记录集。筛选器?

Ms access MS Access:如何设置此记录集。筛选器?,ms-access,Ms Access,我有一个问题,我正试图找到解决办法 我有一张桌子,看起来像这样: @myTable id - Number value - Text models - Memo @myModels id - Number model - Text notes - Memo Dim sql As String sql = "SELECT * FROM myTable" Dim rs1 As Recordset Set rs1 = DBO.Edit (sql) sql = "SELECT model FROM

我有一个问题,我正试图找到解决办法

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

@myTable
id - Number
value - Text
models - Memo
@myModels
id - Number
model - Text
notes - Memo
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
我还有一张类似这样的桌子:

@myTable
id - Number
value - Text
models - Memo
@myModels
id - Number
model - Text
notes - Memo
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
@myTable.models值是用“|”字符连接的不同@myModels.model字符串的串联。例如,它可能有ModelA | ModelB | ModelC |或者只有ModelA | ModelC|

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

@myTable
id - Number
value - Text
models - Memo
@myModels
id - Number
model - Text
notes - Memo
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
我真的希望能够在查询或过滤器中执行某种类型的正则表达式,因此它可能看起来像这样:

@myTable
id - Number
value - Text
models - Memo
@myModels
id - Number
model - Text
notes - Memo
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条记录。当多次尝试循环遍历每条记录时,循环遍历需要非常长的时间

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

您是否尝试过sql=“从myModels where criteria中选择模型”? 不确定当前选择的模型是什么意思,但可以使用临时变量添加临时字符串或其他任何需要的内容 也许加入你的sql?
您能否详细说明此模型来自何处,以及它所选的

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

在VBA中:

诚然,这仍然会很慢,因为这是一个外部连接,并且因为我们使用了非优化的
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

Edit只返回带有dbOpenDynaset和dbSeeChanges选项的记录集,而DBO.Read只返回带有dbOpenSnapshot和dbReadOnly选项的记录集。