Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.021 c
1-1092991077
Solden
2004-08-20 12:37
2004.09.05
Версия своего приложения


14-1092895082
Пубертанец
2004-08-19 09:58
2004.09.05
Как сконвертировать *.rm в *mp3?


14-1092370270
Dmitriy O.
2004-08-13 08:11
2004.09.05
48 Конгресс Европейской организации качества. Москва


8-1086706742
Сашенька
2004-06-08 18:59
2004.09.05
Сравнение цветов


4-1090322733
Rouse_
2004-07-20 15:25
2004.09.05
Описание сервиса




   Наверх