Я еще не нашел решения этой проблемы, поэтому я решил опубликовать его и посмотреть, есть ли у кого-нибудь подобная проблема.Я в основном пытаюсь добавить несколько новых элементов в одну и ту же таблицу в нашей базе данных Access SQL на основе данных формы флажка.Пользователь выбирает ряд категорий, по которым следует классифицировать элемент (который также добавляется в другую таблицу).Вот код, который я должен извлечь из данных и сохранить их в массиве статического размера, который равен максимально возможному выбору (у меня были ошибки, не помещая их в массив известной длины):
Dim VidName, VidUrl, VidDescription, VidCategory, VidKeywords, VidSRC, VidType, Hidden, Approve, RunTime, mode_a, i, VidNail, myArray(5)
VidCategory=Request("Category")
mode_a=split(VidCategory,",")
For i=LBound(mode_a) to UBound(mode_a)
myArray(i) = mode_a(i)
Next
Затем на странице, после вставки видеоданных в таблицу видео, мне нужно вызвать таблицу категорий видео и вставить идентификатор видео с каждым соответствующим идентификатором (ами) категории:
SQL = "SELECT tbl_categories.category_name, tbl_categories.category_id"
SQL = SQL & " FROM (tbl_video_categories INNER JOIN tbl_video ON tbl_video_categories.video_id = tbl_video.video_id) INNER JOIN tbl_categories ON tbl_video_categories.category_id = tbl_categories.category_id"
SQL = SQL & " GROUP BY tbl_categories.category_name, tbl_categories.category_active, tbl_categories.category_id"
SQL = SQL & " HAVING (((tbl_categories.category_active)=1))"
SQL = SQL & " ORDER BY tbl_categories.category_id "
Set rs2 = LoadData(SQL)
If rs2.RecordCount > 0 Then
rs2.MoveFirst
Dim j
j = 0
* 'Отправить - это сокращенная функция, определенная в другом месте, в основном просто Response.Write. Эти отправки предназначены только для тестирования.*
Do While Not rs2.EOF
Send myArray(j)
Send "<br>"
Send rs2("category_id")
Send "<br>"
Send rs2("category_name")
Send "<br>"
Send "<br>"
If rs2("category_name") = myArray(0) Then
Send "ZERO"
Send " <br/>"
SQL = "INSERT INTO tbl_video_categories (video_id, category_id)"
SQL = SQL & " VALUES (" & rs("video_id") & "," & rs2("category_id") & ")"
PerformSQL(SQL)
End If
If rs2("category_name") = myArray(1) Then
Send "ONE"
Send " <br/>"
SQL = "INSERT INTO tbl_video_categories (video_id, category_id)"
SQL = SQL & " VALUES (" & rs("video_id") & "," & rs2("category_id") & ")"
PerformSQL(SQL)
End If
If rs2("category_name") = myArray(2) Then
Send "TWO"
Send " <br/>"
SQL = "INSERT INTO tbl_video_categories (video_id, category_id)"
SQL = SQL & " VALUES (" & rs("video_id") & "," & rs2("category_id") & ")"
PerformSQL(SQL)
End If
If rs2("category_name") = myArray(3) Then
Send "THREE"
Send " <br/>"
SQL = "INSERT INTO tbl_video_categories (video_id, category_id)"
SQL = SQL & " VALUES (" & rs("video_id") & "," & rs2("category_id") & ")"
PerformSQL(SQL)
End If
If rs2("category_name") = myArray(4) Then
Send "FOUR"
Send " <br/>"
SQL = "INSERT INTO tbl_video_categories (video_id, category_id)"
SQL = SQL & " VALUES (" & rs("video_id") & "," & rs2("category_id") & ")"
PerformSQL(SQL)
End If
rs2.MoveNext
j = j + 1
Loop
End If
Set rs2 = Nothing
Нет ошибок, но как бы я ни пытался их изменить (используя Elseifs, меняя порядок, проходя через myArray со счетчиком и т. Д.)) Он только добавляет первую категорию в массиве к таблице, даже если выбрано более одной.Если вы пройдете по категориям myArray (j) и rs2.category, у них обоих есть данные (при условии, что были выбраны некоторые флажки), и если все категории выбраны и в myArray, они даже распечатывают на одних и тех же итерациях.Таким образом, данные есть, но оператор «Send Zero» If - единственный, который когда-либо был истинным, и по какой-то причине он выполняется только один раз, даже если Do While not rs2.EOF выполняется 5 раз (в настоящее время существует 5 категорий)..
Любая помощь по этому вопросу будет принята с благодарностью!
Редактировать: rs isдругой набор записей, определенный на странице, и вы можете предположить, что он содержит правильные данные для вставки SQL (так называемый SQL-код все работает)
* Редактировать 2: я пыталсяпредложение ipr101.с выбранными первыми 4/5 флажками, отправляющими myArray (n) и rs2 ("имя_категории"), это был вывод: *
Номер итерации: 0
Массив: Управление рисками
Набор записей: Управление рисками
НОЛЬ
Номер итерации: 1
Массив: EVMS
Набор записей: EVMS
Номер итерации: 2
Массив: Подготовка к экзамену PMP
RecordSet: Планирование программы
Номер итерации: 3
Массив: Лекции
RecordSet: Подготовка к экзамену PMP
Номер итерации: 4
Массив:
RecordSet: Лекции
Как видите, он выполнял только первый оператор if, но набор записей и массив все еще имели значения в будущих итерациях, но не выполняли другие операторы if
ОтветОк: Я разобрался, как заставить это работать.В основном я пытался усложнить вещи.Вместо того, чтобы отправлять имя категории из формы и пытаться сравнить его со значениями БД, а затем пытаться добавить video_id и идентификатор категории, я просто отправляю идентификатор категории (который является уникальным) в качестве значения (й) флажка, а затемвыполнить sql в первом цикле for, который у меня был:
For i=LBound(mode_a) to UBound(mode_a)
SQL = "INSERT INTO tbl_video_categories (video_id, category_id)"
SQL = SQL & "VALUES (" & rs("video_id") & "," & mode_a(i) & ")"
PerformSQL(SQL)
Next
Спасибо всем за ваш вклад и предложения, они были очень полезны!