私のコードは非常に頻繁にアクセスを照会したいので、すべての行に「for」を使用し、アクセステーブルに存在する場合はセルの値をチェックします。しかし、私はパフォーマンスが非常に悪いと感じています。現在、adodb.connection を使用してアクセスに接続しています。申し訳ありませんが、手元にないためコードを配置できません。Excel vbaから非常に頻繁にテーブルをクエリし、高速なパフォーマンスでテーブルをクエリする方法について、誰かが私を助けてくれますか?
編集:
For rowNum = 2 To 1000000
'check if title exists,if yes, get ppid, if not, insert one, get ppid, and make relation in r-table
ppID = isTitleExistReturnID(ppTitle)
If ppID = "0" Then
ppID = addPpReturnID(ppTitle, ppDate, ppJournal)
paperAddedCount = paperAddedCount + 1
isPpAdded = True
Else
isPpAdded = False
End If
Next rowNum
Function isTitleExistReturnID(title As String) As String
Dim r As New ADODB.Recordset
sqlstr = "select * from paper where title = '" & title & " '"
'MsgBox sqlstr
dbConnection.Open
r.Open sqlstr, dbConnection, adOpenKeyset, adLockOptimistic, adCmdText
If r.RecordCount < 1 Then
dbConnection.Close
isTitleExistReturnID = "0"
Else
aidi = r.Fields(0).Value
dbConnection.Close
isTitleExistReturnID = aidi
End If
End Function
Function addPpReturnID(title As String, pubDate As String, journaL As String) As String
Dim r As New ADODB.Recordset
sqlstr = "select * from paper where (1=0)"
'MsgBox sqlstr
dbConnection.Open
r.Open sqlstr, dbConnection, adOpenKeyset, adLockOptimistic, adCmdText
r.AddNew
r.Fields(1) = title
r.Fields(2) = pubDate
r.Fields(3) = journaL
r.Update
maxid = CStr(r.Fields(0).Value)
dbConnection.Close
addPpReturnID = maxid
End Function
上記は私のコードの一部です:
- 項目がアクセス テーブルにあるかどうかを確認する
- YES の場合、その ID を返します
- NO の場合、この項目を追加して ID を返す
100,000回以上実行、非常に低いパフォーマンス
どんなアドバイスでも大歓迎です、事前に感謝します。