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 wherecriteria"を試しましたか?現在選択されているモデルの意味がわかりませんが、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 に答える