Я пытаюсь присвоить значение из SQL-запроса текстовому полю.
У меня есть функция, привязанная к ComboBox After update.
Я проверил SQL, запустив его.
Как назначить результат текстовому полю с именем prepoffEIC?
Dim MyVar2 As Integer
MyVar2 = Me.SelectedExam.Column(0)
ExamViewQry = "SELECT Sum(tblentrys.entryhours) AS TotalHoursPerFunction FROM tBleExams INNER JOIN (tBlBankList INNER JOIN (tBlExaminers INNER JOIN (tBlEntrys INNER JOIN tBlActivity ON tBlEntrys.EntryActivityID = tBlActivity.FunctionKey) ON tBlExaminers.ExaminersKey = tBlEntrys.EntryExaminerID) ON tBlBankList.BankID = tBlEntrys.EntryInstitutionID) ON (tBlBankList.BankID = tBleExams.ExamBankID) AND (tBleExams.ExamID = tBlEntrys.EntryExamID) WHERE tBlEntrys.EntryActivityID=1 AND tblEntrys.EntryExamStageID=1 AND tBleExams.ExamID = " & MyVar2
Me.prepoffEIC.ControlSource = "ExamViewQry"
Me.prepoffEIC.Requery
«Я пытаюсь присвоить значение из SQL-запроса текстовому полю и столкнулся с препятствием». - что именно это означает? Вы хотите создать список значений в качестве источника поля со списком/списка? Или что-то другое? Не могли бы вы предоставить более подробную информацию об этом?
Вы хотите назначить значение или источник управления? Если вы присвоите значение, оно не будет автоматически обновляться при изменении данных, и вам придется вычислять значение в коде VBA и использовать свойство .Value. Если вы хотите назначить источник управления, вам нужно обернуть запрос в функцию DLookUp.
SQL возвращает СУММУ, я хочу присвоить эту сумму значению текстового поля.





Создайте запрос, используя имеющийся у вас sql, но слегка модифицированный, вставьте его сюда:

PARAMETERS eid long;
SELECT Sum(tblentrys.entryhours) AS TotalHoursPerFunction
FROM tBleExams
INNER JOIN (
tBlBankList INNER JOIN (
tBlExaminers INNER JOIN (
tBlEntrys INNER JOIN tBlActivity ON tBlEntrys.EntryActivityID = tBlActivity.FunctionKey
) ON tBlExaminers.ExaminersKey = tBlEntrys.EntryExaminerID
) ON tBlBankList.BankID = tBlEntrys.EntryInstitutionID
) ON (tBlBankList.BankID = tBleExams.ExamBankID)
AND (tBleExams.ExamID = tBlEntrys.EntryExamID)
WHERE tBlEntrys.EntryActivityID = 1
AND tblEntrys.EntryExamStageID = 1
AND tBleExams.ExamID = [eid]
давайте назовем это qryGetHours (поскольку я не знаю, для чего вам это нужно.) в событии после обновления (также используйте лучшее имя, это быстро и грязно)
dim db as DAO.Database
dim qry as QueryDef
dim rs as DAO.Recordset
set db = currentdb
set qry = db.querydefs("qryGetHours")
'this is the name of the query you made above
qry.parameters("eid").value = me.SelectedExam.Column(0)
set rs = qry.openrecordset(dbopendynaset,dbseechanges)
'dbseechanges is more for if you have a sql server backend, but i usually do
if not ( rs.eof and rs.bof) then
rs.movefirst
me.prepoffEIC = rs.fields("TotalHoursPerFunction").value
'This portion assumes that you only get one record back,
'or if you do end up with more than one, it only goes
'after the first one.
else
msgbox "Errors... Errors everywhere."
'You will definitely want to put something meaningful
'here relating to it not being able to find the data you
'were looking for.
end if
if not rs is nothing then
rs.close
set rs = nothing
end if
set qry = nothing
set db = nothing
'you will always want to do this portion where you properly
'check if a recordset exists and then close it when you are
'done, along with closing out the querydef and database variables.
ОК, как новичок в VBA, я думаю, что понимаю весь второй раздел. это первый фрагмент кода, который я потерял. где код SQL. Спасибо
На ленте вы нажимаете «Создать», затем находите «Конструктор запросов». как только вы окажетесь там, вы увидите кнопку в крайнем левом углу, если вы нажмете маленькую стрелку вниз под ней, выберите ту, которая говорит «Просмотр SQL».
На самом деле, я добавлю картинку в пост, чтобы было понятно.
О, я вижу, вы имеете в виду наличие объекта запроса в БД. не просто создание одного на лету! Я понимаю.
Да, нет проблем, раньше я выполнял запросы «на лету», но обнаружил, что это ОЧЕНЬ сильно увеличивает раздувание базы данных (вы знаете, куда она переходит от файла размером 3,5 МБ до 700 МБ за пару месяцев без его сжатия)
и TADA... это сделало это... Спасибо, я надеялся быть более динамичным (в коде VBA) с запросами, но это сработает. Я настрою свой мыслительный процесс на работу с помощью этого метода... Сопротивление бесполезно!
и один быстрый последний вопрос. в ПАРАМЕТРАХ eid LONG; (никогда не видел этого раньше), как бы я добавил 3 PARAMS. так как я мог бы использовать их для других переменных "И".
Да, я делаю это изо дня в день, я дошел до того, что у меня есть файл доступа, посвященный модулям кода, из которого я повторно использую код.
Таким образом, параметры ДОЛЖНЫ быть чем-то заполнены, если они перечислены в этом разделе, но чтобы добавить больше, вы просто должны сделать PARMETERS eid long, SecondParamter text(255); Кроме того, вы ДОЛЖНЫ иметь точку с запятой между частью параметров и остальной частью запроса. Обновлено: если вы хотите установить параметры, вы можете просто перейти к инструментам запроса в представлении сетки дизайна, а вверху у него есть кнопка с именем параметры. вы можете добавить в список таким образом.
Побей тебя... Спасибо. Теперь я собираюсь снова и снова использовать этот фрагмент кода для нескольких текстовых полей. Еще раз спасибо КиСото!
кстати, если вы создаете запрос, содержащий ВСЕ данные, которые вам нужны (для всех полей, над которыми вы работаете), вы можете использовать этот метод для загрузки данных во все них.
Это именно то, о чем я думал... Теперь обдумываю, как написать оператор SQL для ВСЕХ итогов со всеми переменными... Может быть ДЛИННЫЙ оператор SQL.....
Кстати, вы бы отметили мой ответ как лучший ответ, если бы это было так?
Сделанный! нуб... ЛОЛ
ExamViewQry— это просто строка. Я предполагаю, что вам нужно выполнить это и вернуть результат, прежде чем делать что-либо еще.