Вставка данных Checkbox в базу данных, ASP VBScript и SQL - PullRequest
0 голосов
/ 12 июля 2011

Я еще не нашел решения этой проблемы, поэтому я решил опубликовать его и посмотреть, есть ли у кого-нибудь подобная проблема.Я в основном пытаюсь добавить несколько новых элементов в одну и ту же таблицу в нашей базе данных 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

Спасибо всем за ваш вклад и предложения, они были очень полезны!

1 Ответ

0 голосов
/ 12 июля 2011

Вы пробовали это?

If rs2("category_name") = myArray(1) OR rs2("category_name") = myArray(2) OR rs2("category_name") = myArray(3) OR rs2("category_name") = myArray(4) Then
    SQL = "INSERT INTO tbl_video_categories (video_id, category_id)"
    SQL = SQL & " VALUES (" & rs("video_id") & "," & rs2("category_id") & ")"

    PerformSQL(SQL)
End If
...