1

Добрый день, мне нужна помощь. Есть десятки способов, которые бы сделать трюк, что им собирается спросить, но который будет быстро (я hopefull я с видом на некоторые)Самый быстрый способ проверить в связанной таблице, что запись еще не существует

У меня есть 2 метода в настоящее время, как медленные, так и сверхмедленных (2 быстрее)

Вещь, которую он делает, создает новые записи, если сгенерированное случайное число уже не существует в связанной таблице.

Чем больше стол становится слишком заполненным, тем медленнее будет работать код. в ближайшем будущем, возможно, потребуется несколько дней, чтобы добавить только несколько кодов.

бит кода, добавить рекорды:

Sub MakenNieuweNummers(AantalNieuweNummers As Long, strProduct As String, strBatch As String) 
Dim strCode As String 
Dim AantalNummersGemaakt As Long 
Dim strSQL As String 
'Vul hier het aantal nieuwe gewenste nummers in om de database mee uit te breiden 

Do While AantalNummersGemaakt < AantalNieuweNummers 
DoEvents 
strCode = randomstring(6) 
If DCount("code", "tblNummers", "code = '" & strCode & "'") = 0 Then 

strSQL = "insert into tblNummers " & _ 
     "(code,actief,printdatum,product,batchnummer) " & _ 
     "VALUES ('" & strCode & "',TRUE,#" & Format(Date, "MM-DD-YYYY") & "#,'" & strProduct & "','" & strBatch & "')" 
dbLocal().Execute strSQL 
AantalNummersGemaakt = AantalNummersGemaakt + 1 
End If 

Loop 

End Sub 


Sub MakenNieuweNummers2(AantalNieuweNummers As Long, strProduct As String, strBatch As String) 
Dim strCode As String 
Dim AantalNummersGemaakt As Long 
Dim strSQL As String 
'Vul hier het aantal nieuwe gewenste nummers in om de database mee uit te breiden 

Do While AantalNummersGemaakt < AantalNieuweNummers 
DoEvents 
strCode = randomstring(6) 

If dbLocal().OpenRecordset("SELECT Count([ID]) AS [CountALL] FROM tblNummers WHERE code='" & strCode & "';")![CountALL] = 0 Then 

strSQL = "insert into tblNummers " & _ 
     "(code,actief,printdatum,product,batchnummer) " & _ 
     "VALUES ('" & strCode & "',TRUE,#" & Format(Date, "MM-DD-YYYY") & "#,'" & strProduct & "','" & strBatch & "')" 
dbLocal().Execute strSQL 
AantalNummersGemaakt = AantalNummersGemaakt + 1 
End If 

Loop 

End Sub 

также немного кода для случайных строк, которые возвращаются из функции

Function randomstring(Optional iLengte As Integer) As String 


If IsMissing(iLengte) Then 
    iLengte = 6 
End If 
Randomize 

Do While Len(randomstring) < iLengte 
randomstring = randomstring & Mid(sReeks, Int((Len(sReeks)) * Rnd) + 1, 1) 
Loop 

End Function 

Любая помощь очень ценится.

благодарит заранее.

ответ

0

Для того, чтобы ответить на мой собственный вопрос ...

Я получил много в производительности, сохраняя записи открытой и добавления новых записей с «.addNew»
после каждого цикла я буду».update 'набор записей для сохранения изменений.
Поскольку каждая новая запись заполняет уникальное поле индекса. это в конечном итоге может привести к ошибке 3022, когда двойной
встречается, я буду ловушкой этой ошибки с ErrorHandler и резюме к маркеру непосредственно перед обновлением и попробовать другое значение для поля, прежде чем «.update»

Это то, что это выглядит так:

Sub MakenNieuweNummers(AantalNieuweNummers As Long, strProduct As String, strBatch As String) 
On Error GoTo MakenNieuweNummers_err 

Dim AantalNummersGemaakt As Long 
Dim rst As DAO.Recordset 

Set rst = dbLocal().OpenRecordset("tblNummers", , dbFailOnError) 
With rst 
    Do While AantalNummersGemaakt < AantalNieuweNummers 
    DoEvents 
    .AddNew 

MakenNieuweNummers_next: 
    !code = randomstring(6) 
    .Update 'Error 3022 in case of double, will let errorhandler fix this. 
    AantalNummersGemaakt = AantalNummersGemaakt + 1 
    Loop 
End With 

MakenNieuweNummers_Exit: 
    rst.Close 
    Set rst = Nothing 
    Exit Sub 

MakenNieuweNummers_err: 
If Err.Number = 3022 Then 
    Resume MakenNieuweNummers_next 
Else 
    MsgBox Err.Number & vbNewLine & Err.Description, vbCritical 
    Resume MakenNieuweNummers_Exit 
End If 
End Sub 

Если есть более высокая производительность, пожалуйста, ответьте. всегда люблю учиться больше!

Смежные вопросы