Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Вниз

SQL. Агрегатные функции   Найти похожие ветки 

 
Bee ©   (2004-08-08 12:44) [0]

Добрый день!
База данных Access. Подключение через ADO. Структура БД следующая: главная таблица, содержащая названия фирм и дочерняя со сделками для каждой фирмы. Связь - 1:М по полю FCode.

Мне необходимо, чтобы над каждым полем, содержащим числовые значения, в гриде со сделками высвечивалась сумма.
Использую TDBEdit. Понятно, что при навигации по фирмам меняются записи со сделками, соответственно и суммы.
Запрос имеет следующий вид:
SELECT SUM (MTorgDom) FROM Main WHERE Main.FCode=:FCode;

К сожалению, в поле ничего не показывается, однако если подставить конкретное значение, такое как -
SELECT SUM (MTorgDom) FROM Main WHERE Main.FCode=1; или FCode=2 или 3 и т.д.,
то всё работает отлично.

Замечу, что главная таблица с дочерней соединяется в программе простым запросом:
SELECT *FROM Main WHERE Main.FCode=:FCode;

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


 
сергей1   (2004-08-08 13:45) [1]

дочерняя таблица получается из запроса TADOQuery ? тогда может лучше использовать это :

form1.ADOQuery1.FieldByName("some_field").AsString

когда перемещаешся по query этот оператор  вернет значение текущей строки из поля "some_field", теперь это значение можно подставить в запрос к главной таблице


 
Bee ©   (2004-08-08 14:29) [2]

Что-то мысль немного неясна....

Суммы по числовым полям показываются только когда я в запросе подставляю конкретное значение:
SELECT SUM (MTorgDom) FROM Main WHERE Main.FCode=n;

если же делать связь между таблицами, используя по правилу SQL такую запись:
SELECT SUM (MTorgDom) FROM Main WHERE Main.FCode=FCode;
FCode - поле типа счётчик, по которому таблицы связаны, то при перемещении по фирмам ничего не показывается.

Зачем мне обращаться к какому-либо полю? Тем более, мне кажется, это можно сделать напрямую через SQL-запрос, не прибегая к коду в модуле.


 
sniknik ©   (2004-08-08 14:53) [3]

> Что-то мысль немного неясна....
думаеш твой вопрос кристально ясен?

подпущу еще немного мути. ;о))

> SELECT *FROM Main WHERE Main.FCode=:FCode;
:FCode это параметр, а не поле для связи. (если делать стандартными методами), если нестандартными то как сделано?

> Зачем мне обращаться к какому-либо полю? Тем более, мне кажется, это можно сделать напрямую через SQL-запрос, не прибегая к коду в
> модуле.
както придется, SQL-запрос выполняется на сервере, мастер детайл (если конечно реч о нем, в чем неуверен) на клиенте, както общатся им нужно...


 
сергей1   (2004-08-08 15:32) [4]

может я тоже чего-то непонимаю, но когда ты хочешь подсчитать сумму по определенным полям, тебе в SQL запрос к главной таблице надо подставить значение поля, например WHERE Main.FCode = 10. Подсчитается сумма по строкам в главной таблице, где FCode = 10. Эта десятка берется из дочерней таблицы, когда ты по ней перемещаешься, правильно ? Что-же тебе мешает прочитать эту десятку в переменную и подставить в запрос

n = form1.ADOQuery1.FieldByName("some_field").AsString

form1.ADOQuery2.sql.text:="SELECT SUM (MTorgDom) FROM Main WHERE Main.FCode = "+ n
form1.ADOQuery2.open


 
Bee ©   (2004-08-08 22:05) [5]

Теперь ясно.
Но  FCode=10 - эта десятка берётся из главной таблицы.
10. фирма - Adidas (условно). У фирмы Адидас сделки:
10.1. - сделка такая-то
10.2. - сделка вторая
.......
10.n. - сделка n - это записи дочерней таблицы. Связь - один ко многим.
Суммы подсчитываются по полям из дочерней таблицы.
При перемещении на фирму №11 будут новые суммы, т.к. сделки уже другие.

код:
n := form1.ADOQuery1.FieldByName("some_field").Value; (ловим номер текущей фирмы)
form1.ADOQuery2.sql.text:="SELECT SUM (MTorgDom) FROM Main WHERE Main.FCode = "+ n; (записываем значение)
form1.ADOQuery2.open;

Тогда следующий вопрос: в обработчике какого события прописыть этот код? Какое событие возникает при навигации по таблице в гриде?


 
Bee ©   (2004-08-08 22:10) [6]

:) Это событие AfterScroll - поторопилась....
Большое спасибо за помощь!!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.052 c
3-1092117093
AleKo
2004-08-10 09:51
2004.09.05
FastReport ExportTo


1-1092981649
denmin
2004-08-20 10:00
2004.09.05
Можно ли отловить экстренное закрытие программы?


8-1087747242
Илья
2004-06-20 20:00
2004.09.05
MIDI - работа на низком уровне


1-1092771422
MaxN
2004-08-17 23:37
2004.09.05
Печать


8-1087792169
Shnaider
2004-06-21 08:29
2004.09.05
Эквалайзер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский