Форум: "Базы";
Текущий архив: 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