MS-Access 2003 - Изразяване в текстово поле във формуляр

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

таблиците са свързани и мога да върна стойността в заявка, така че реших, че Access ще може да го направи и с този метод????

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

това е изразът, който въведох в моето текстово поле, без препратка към 2-ра таблица работи добре, но след като го имах, получавам мигащо съобщение за грешка в текстовото поле (точно като в отчет).... ..

Знам, че този метод вероятно се използва повече в отчети, отколкото във формуляри, но аз съм начинаещ и се опитвам да измисля решение за табло, което връща бързо много факти за отдел. Използвам това в полето „Източник на контрола“ на раздела с данни на прозореца със свойства, а не 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 window) ще изглежда нещо като:

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","Quarter=3 AND Region='NorthEast'" AND [tblOffice]![Location]='NewYork'")

Просто се опитвам да ви спестя няколко натискания на клавиши и да подобря неговата четливост. :)

person Sesame    schedule 28.07.2009
comment
о, благодаря, това всъщност помага, защото пиша много от тях. Всъщност го реших. Благодаря! - person Justin; 29.07.2009