MS-Access 2003 - Выражение в текстовом поле формы

просто интересно, когда используется выражение в форме в текстовом поле, чтобы вернуть значение из таблицы, может ли выражение иметь несколько таблиц в выражении для возврата значения?

таблицы связаны, и я могу вернуть значение в запросе, поэтому я решил, что Access сможет сделать это и с помощью этого метода ????

=DSum("[tblMain]![Revenue]","tblMain","[tblMain]![Quarter]=3 AND [tblMain]![Region]='NorthEast'" AND [tblOffice]![Location]='NewYork'")

это выражение, которое я ввел в свое текстовое поле, без ссылки на вторую таблицу, оно работает нормально, но как только оно у меня есть, я получаю мерцающее сообщение об ошибке в текстовом поле (как в отчете) .... ..

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

Спасибо за помощь как всегда!


person Justin    schedule 28.07.2009    source источник
comment
Как связаны tblMain и tblOffice? Есть ли общий ключ между tblMain и tblOffice?   -  person shahkalpeshp    schedule 29.07.2009


Ответы (2)


Насколько мне известно, в агрегатной функции домена нельзя ссылаться более чем на одну таблицу или запрос. Как говорит grazird, как связаны эти таблицы? Скажем, это на tblMain ID, вы можете создать запрос, скажем, qryMainOffice, SQL (SQL View, окно Query Design) будет выглядеть примерно так:

SELECT [tblMain].[Revenue],[tblMain]![Quarter],[tblMain]![Region],
       [tblOffice]![Location]
FROM tblMain 
INNER JOIN tblOffice 
ON tblMain.ID = tblOffice.MainID

Тогда DSum будет (удалить разрыв строки):

=NZ(DSum("[Revenue]","qryMainOffice",
 "[Quarter]=3 AND [Region]='NorthEast' AND [Location]='NewYork'"),"Not found")

Вы также можете использовать набор записей или запрос в VBA для возврата значения.

ИЗМЕНИТЬ КОММЕНТАРИЙ

Чтобы использовать вышеуказанное в VBA, вам нужно либо добавить параметры, либо использовать строку:

''Reference: Microsoft DAO 3.x Object Library
Dim rs As DAO.Recordset
Dim db As Database
Dim strSQL as String

Set db= CurrentDB

strSQL = "SELECT Sum(t.[Revenue]) As TotalNY" _
       & "FROM tblMain t " _
       & "INNER JOIN tblOffice o " _
       & "ON t.ID = o.MainID " _
       & "WHERE t.[Quarter]=3 AND t.[Region]='NorthEast' " _
       & "AND o.[Location]='NewYork' " _

 '' I have use aliases for simplicity, t-tblMain, o-tblOffice
 '' If you wish to reference a control, use the value, like so: 
 '' & " AND [Location]='" & Me.txtCity & "'"
 '' Dates should be formated to year, month, day
 '' For joins, see http://www.devshed.com/c/a/MySQL/Understanding-SQL-Joins/

 Set rs = db.OpenRecordset strSQL

 If Not rs.EOF Then
    Me.txtAnswer = rs!TotNY
 Else
    Me.txtAnswer = "N/A"
 End If

Вы также можете использовать разные запросы для возврата нескольких результатов, которые могут отображаться в списке или подчиненной форме:

strSQL = "SELECT TOP 5 o.[Location]," _
       & "Sum(t.[Revenue]) AS TotRevenue" _
       & "FROM tblMain t " _
       & "INNER JOIN tblOffice o " _
       & "ON t.ID = o.MainID " _
       & "WHERE t.[Quarter]=3 AND t.[Region]='NorthEast' " _
       & "GROUP BY o.[Location]"

Вышеупомянутое даст доход за 3 квартал для всех регионов Северо-Восточного региона. Если вам нужны максимальные значения для каждой группы, вы смотрите на более сложный запрос, который я пока оставлю.

person Fionnuala    schedule 29.07.2009
comment
Благодарность! как насчет первых n-х запросов, в которых я хотел бы выбрать отображаемую фактическую запись? Итак, у меня есть эти 10 основных фигур, и я хочу поместить текстовое поле в форму, чтобы показать их результат. для каждой записи у меня есть текстовое поле, как я могу выбрать фактическую запись для каждого текстового поля? (т.е. текстовое поле1 = первая запись, текстовое поле2 = вторая запись ... и т. д. возвращенного набора записей из запроса) - person Justin; 29.07.2009
comment
Почему ваш предыдущий вопрос не работает? stackoverflow.com/questions/1185327/ - person Fionnuala; 29.07.2009
comment
извините, я просто не совсем уверен, что вы там говорите ... Я уверен, что вы правы, это может быть немного выше моей головы новичка !! это будет sqlStr в VBA? вот что происходит, когда вы помогаете новичку !! : / - person Justin; 29.07.2009
comment
:) Немного VBA может быть очень полезным. Если вы создаете строку SQL, вы можете многое сделать с ней, например, использовать ее для элемента управления или источника записи. У вас также есть гораздо больший контроль над оператором WHERE. - person Fionnuala; 29.07.2009
comment
Благодарность! что еще мне нужно в vba, чтобы использовать это. Я понял, как написать sql в vb, но я не могу понять, как вернуть значение. например, если я построил запрос с помощью построителя запросов, а затем запустил его, он покажет набор данных с возвращенными значениями. Я не могу этого добиться с vba. Итак, с приведенным выше, что в vba обозначает это для определенного выражения текстового поля. что связывает vb с выражением. Спасибо за помощь! - person Justin; 30.07.2009
comment
извините, я не имел в виду ваш точный пример, потому что я точно вижу, что происходит выше, я имел в виду, если бы я должен был сделать запрос vba вместо sql в построителе запросов. - person Justin; 30.07.2009

Как связаны эти таблицы? Можете ли вы описать отношения и какие-либо первичные / внешние ключи?

Кроме того, ссылка на имя таблицы не является обязательной в первом параметре этой функции (поскольку это уже сделано во втором параметре).

Например, ваш код может быть:

= DSum ("Доход", "tblMain", "Квартал = 3 И Регион = 'Северо-Восток'" И [tblOffice]! [Местоположение] = 'Нью-Йорк' ")

Просто пытаюсь сэкономить вам несколько нажатий клавиш и повысить удобочитаемость. :)

person Sesame    schedule 28.07.2009
comment
о, спасибо, это действительно помогает, потому что я пишу много таких. Я действительно решил это. Спасибо! - person Justin; 29.07.2009