
Проект Анкета
Проект Подробности
Проект Поиск магазина
В этой процедуре бъявляется переменная для хранения кода ID текущего вопроса:
Затем задается ID анкеты. Для просмотра результатов другого опроса следует изменить значение этой переменной:
Application("SurveylD") - 1
Вначале устанавливается соединение с базой данных:
DBConn = New OleDbConnection("Provider=sqloledb;" _ & "server=localhost;" _ & "Initial Catalog=INETC3;" _ & "User Id=sa;" &
"Password=yourpassword;")
и выбирается название анкеты:
DBCommand = New OleDbDataAdapter _
("Select SurveyName, Surveylnstructions " _
& "From Surveys Where SurveylD = " _
& Application("SurveylD"), DBConn)
DBCommand.Fill(DSPageData, _
"Surveylnfo")
которое помещается в элемент управления Label:
IblTitle.Text = "<center>" _
& DSPageData.Tables("Surveylnfo"). _
Rows(0).Item("SurveyName") & "</center>"
После этого извлекаются все вопросы анкеты:
DBCommand = New OleDbDataAdapter _
("Select SurveyQuestionID, SurveyQuestionLong " _
& "From SurveyQuestions Where SurveylD = " _
& Application("SurveylD"), DBConn)
DBCommand.Fill(DSPageData, _
"SurveyQuestions")
Далее начинается внешний цикл, который позволит обработать каждый из вопросов:
For I = 0 to DSPageData.Tables("SurveyQuestions"). _
Rows.Count - 1
Текст каждого вопроса помещается в объект LiteralControl:
Dim IcHTML = New LiteralControl
IcHTML.Text = "<b>" _ &
DSPageData.Tables("SurveyQuestions"). _ Rows (I) .Item(",SurveyQuestionShort")
& "</B><BR>"
который затем добавляется в элемент управления Control:
pnlQuestions.Controls.Add(IcHTML)- Теперь ID
текущего вопроса присваивается временной переменной:
TempID =
DSPageData.Tables("SurveyQuestions"). _
Rows(I).Item("SurveyQuestionID")
Затем из базы данных выбираются все указанные посетителями варианты ответов на текущий вопрос. Обратите внимание, что они группируются, для того чтобы подсчитать, сколько раз был выбран каждый вариант ответа:
DBCommand = New OleDbDataAdapter _
("Select SurveyResponse, " _
& "Count(SurveyResponselD) as TheCount " _
& "From SurveyResponses Where SurveyQuestionID = " _
& TempID & " Group By SurveyResponse " _
& "Order By Count(SurveyResponselD) DESC" _
, DBConn)
Результаты запроса помещаются в объект DataSet:
DBCommand.Fill(DSPageData, _
TempID)
Далее начинается внутренний цикл, предназначенный для обработки всех ответов:
For J - 0 to DSPageData.Tables(TempID). _
Rows.Count - 1
Текст ответа и количество раз, которое он был выбран, присваиваются объекту
LiteralControl:
Dim lcHTML2 - New LiteralControl
lcHTML2.Text - DSPageData.Tables(TempID).
Rows(J).Item("SurveyResponse") & ": " _
& DSPageData.Tables(TempID). _
Rows(J).Item("TheCount") & "<br>"
который затем добавляется в элемент управления Panel:
pnlQuestions.Controls.Add(lcHTML2)
перед переходом к обработке следующего ответа:
По завершении обработки всех ответов на вопрос добавляются разделительные теги HTML:
Dim lcHTML3 = New LiteralControl
IcHTMLS.Text = "<br><br>"
в элемент управления Panel:
pnlQuestions.Controls.Add(IcHTMLS)
после чего осуществляется переход к следующему вопросу:
Изменение кода для Access C3Survey.mdb
При необходимости использовать в этом проекте базу данных Access вместо SQL Server
достаточно лишь заменить строку связи с базой данных SQL Server
DBConn - New
01eDbConnection("Provider=sqloledb;" _
& "server=looalhost;" _
& "Initial Catalog=INETCS;"
& "User Id=sa;" _
& "Password=yourpassword;")
строкой связи с базой данных Access
DBConn = New
01eDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;" _
& "DATA SOURCE="
& Server.MapPath("/INetBook/C3/Survey/"
& "Access/C3Survey.mdb;"))
|