2015-03-25 3 views
1

У меня есть запрос в Access Db, который подсчитывает количество наблюдений, которые соответствуют определенным критериям, как это определено двумя списками. Запрос работает отлично, и я могу получить результат запроса для отображения и обновления в реальном времени с помощью comboboxes с использованием подформ, но подчиненные формы являются крайне уродливым способом представления одного числа.Установить текстовое поле, равное запросу

Я хотел бы использовать текстовое поле для отображения этого единственного числа из запроса вместо подзаголовка. Я попытался ввести SQL запроса в источник управления и значение по умолчанию, но не добился успеха.

После прочтения форума я могу написать функцию, а затем установить источник управления, равный этой функции.

Вот мой VBA:

Public Function AdultCount() 
Dim rs As Recordset 
Set rs=CurrentDb.OpenRecordset("Select Count([name]) as [# Vars] from Masterdb where ((masterdb.year=[forms]![Masterform]![NavigationSubform].[form]![year]) and (masterdb.recipient=[forms]![Masterform]![NavigationSubform].[form]![recipient]) and (masterdb.group="adult"))") 

AdultVar=rs!Result 

rs.Close 

Set rs=Nothing 

End Function 

я получаю «ошибка компиляции: ожидаемый: список разделитель или)» и выдвигает на первый план «для взрослых» в конце моего SQL запроса.

Я не знаю, почему это не работает. Кто-нибудь знает, почему я получаю эту ошибку, и скажите, могу ли я поступать правильно, чтобы получить то, что я хочу?

редактировать:

теперь у меня

Dim strSQL AS String 

strSQL = "Select Count([name]) as [# Vars] from Masterdb where [year] = " & Me.NavigationSubform.year.value & " and [recipient] = " & Me.NavigationSubform.recipient.value & " and [group]='adult'" 

Set rs=CurrentDb.OpenRecordset(strSQL) 

AdultVar=rs![# Vars].Value 

rs.Close 

Set rs=Nothing 

End Function 

Но текстовое поле читает "#name?"

Любые идеи?

ответ

2

Двойные кавычки для «взрослых» вызывают ошибку, потому что вы закрываете и снова открываете строку, не сообщая VB, что делать с adult"))"). SQL все равно нужны одинарные кавычки, поэтому измените его на «взрослый», и ошибка исчезнет.

+0

Я сделал это, и ошибка исчезла, но в текстовом поле отображается только «Имя?». вместо данных, которые я хочу. Я попробую другое решение, которое вы предоставили. – Carl

+2

Здесь: 'AdultVar = rs! Result' В набор записей не входит поле с именем * Result *. Попробуйте 'AdultVar = rs! [# Vars] .Value' вместо этого. – HansUp

1

Второй вариант заключается в создании вашей строки первого, так как:

Dim strSQL AS String 

strSQL = "Select Count([name]) as [# Vars] from Masterdb where [year] = " & Me.NavigationSubform.year.value & " and [recipient] = " & Me.NavigationSubform.recipient.value & " and [group]='adult'" 

Set rs=CurrentDb.OpenRecordset(strSQL) 

Если вы не знакомы с помощью ключевого слова Me, сделать немного чтения до, как это сократит ваш код и сохранить вы время.

+0

Так что я просто вхожу в этот VBA внутри функции, а затем устанавливаю источник управления текстового поля, который я хочу, равный вышеуказанному VBA, или мне нужно делать больше VBA? – Carl

+0

Ваша функция кажется прекрасной на первый взгляд. Замените строку '' rs = "' моим фрагментом и исправьте проблему, указанную @HansUp, и это должно сделать это. – Nicholai

+0

Итак, теперь у меня есть вышеуказанный код плюс проблема с AdultVar = rs ... исправлена, но я все еще получаю «#Name»? для текстового поля. Есть идеи? – Carl

Смежные вопросы