Я пытаюсь устранить существующее приложение базы данных Access, которое должно генерировать случайное число от 1 до количества записей в таблице. Это делается для двух разных таблиц с различным количеством записей. Таблицы с меньшим количеством записей отображают повторяющиеся числа из 10, которые должны отображаться и записываться в отдельную таблицу. Я предполагаю, что то же самое произойдет с большими таблицами, но с большим количеством номеров на выбор, я просто не смог дублировать проблему.Создать случайное число без дублирования
Вот примеры кода с обработкой ошибок удалены:
Dim db As DAO.Database
Dim rstRecords As DAO.Recordset
Dim rs As DAO.Recordset
Dim tdfNew As TableDef
Dim fldNew As Field
Dim i As Integer
Dim K As Integer
Dim Check As String
Set db = CurrentDb
Set rstRecords = db.OpenRecordset("customer_table")
rstRecords.MoveLast
FindRecordCount = rstRecords.RecordCount
i = rstRecords.RecordCount
DoCmd.DeleteObject acTable, "Unique_numbers"
'--- create the table
Set tdfNew = db.CreateTableDef("Unique_numbers")
'--- add text field (length 20)
Set fldNew = tdfNew.CreateField("customer_table", dbLong)
'--- save the new field
tdfNew.Fields.Append fldNew
'--- save the new table design
db.TableDefs.Append tdfNew
'---Initialize your recordset
Set rs = CurrentDb.OpenRecordset("Unique_numbers", dbOpenDynaset)
'Dim i As Integer
'Dim K As Integer
'Dim Check As String
'i = TxtInput
TxtInput = i
K = 0
Check = T
Do
Do While K < 11
'K = K + 1
Randomize
If K = 0 Then
TxtOutput = Fix(i * Rnd) + 1
rs.AddNew
rs.Fields(0).Value = TxtOutput
rs.Update
K = K + 1
ElseIf K = 1 Then
TxtOutput2 = Fix(i * Rnd) + 1
rs.AddNew
rs.Fields(0).Value = TxtOutput2
rs.Update
K = K + 1
ElseIf K = 2 Then
TxtOutput3 = Fix(i * Rnd) + 1
rs.AddNew
rs.Fields(0).Value = TxtOutput3
rs.Update
K = K + 1
ElseIf K = 3 Then
TxtOutput4 = Fix(i * Rnd) + 1
rs.AddNew
rs.Fields(0).Value = TxtOutput4
rs.Update
K = K + 1
ElseIf K = 4 Then
TxtOutput5 = Fix(i * Rnd) + 1
rs.AddNew
rs.Fields(0).Value = TxtOutput5
rs.Update
K = K + 1
ElseIf K = 5 Then
TxtOutput6 = Fix(i * Rnd) + 1
rs.AddNew
rs.Fields(0).Value = TxtOutput6
rs.Update
K = K + 1
ElseIf K = 6 Then
TxtOutput7 = Fix(i * Rnd) + 1
rs.AddNew
rs.Fields(0).Value = TxtOutput7
rs.Update
K = K + 1
ElseIf K = 7 Then
TxtOutput8 = Fix(i * Rnd) + 1
rs.AddNew
rs.Fields(0).Value = TxtOutput8
rs.Update
K = K + 1
ElseIf K = 8 Then
TxtOutput9 = Fix(i * Rnd) + 1
rs.AddNew
rs.Fields(0).Value = TxtOutput9
rs.Update
K = K + 1
ElseIf K = 9 Then
TxtOutput10 = Fix(i * Rnd) + 1
rs.AddNew
rs.Fields(0).Value = TxtOutput10
rs.Update
K = K + 1
Check = f
Exit Do
End If
Loop
Loop Until Check = f
Что означает 'Check = T'?Определяется ли 'T' где-то? – HansUp
Почему цикл с структурой If/ElseIf, которая делает что-то уникальное для каждого индекса цикла? Я полагаю, что это стилистический вопрос, но он делает код намного дольше, чем нужно. –
Самый честный ответ, который я могу вам дать, это «Я не знаю, я его не писал». Я просто пытаюсь исправить проблему случайного числа без воссоздания колеса. Если это нужно изменить, я изменю его, но я не чувствую необходимости делать это по причинам стиля. – Scottdg