![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не срабатывает позиционирование в таблице !!! [D7, MSSQL]
kyn66 © (2006-02-09 10:56:00)Уважаемые мастера,работаю с базой MSSql. Есть две таблицы (Tab и ListTab), вторая таблица по ключу зависимая от первой через MasterSource. Вот кусок кода:
.....
Tab.First;
while not Tab.Eof do
begin
ListTab.First;
if (ListTab.RecordCount <> 0) and ListTab.Locate('UslKod', UslTblKod.Value, []) then
begin
K1 := K1 + ListTab.FieldByName('Kol1').Value;
K2 := K2 + ListTab.FieldByName('Kol2').Value;
K3 := K3 + ListTab.FieldByName('Kol3').Value;
K4 := K4 + ListTab.FieldByName('Kol4').Value;
S1 := S1 + ListTab.FieldByName('Sum1').Value;
S2 := S2 + ListTab.FieldByName('Sum2').Value;
end;
Tab.Next;
end;
Проблема в том, что подсчет K1..S2 выполняется, якобы правильно срабатывает Locate, однако в действительности позиционирование не выполняется, таблица ListTab остается на первойзаписи и ессно данные считываются не верные. В чем дело? Locate не работает?
Виталий Панасенко (2006-02-09 16:11:00) [1]select Table1.UslKod, sum(Table1.kol1),.... from Table1, Table2 where Table1.UslKod = Table2.UslTblKod
group by 1
paul_k (2006-02-09 14:43:00) [2]> [8] kyn66 © (09.02.06 14:29)
> Пришлось делать через SQL-запрос ы,
а почему не в один запрос?
kyn66 (2006-02-09 14:29:00) [3]Вся беда из-за того, что таблицы были связаны через MasterSource. Пришлось делать через SQL-запросы, это и помогло.
paul_k (2006-02-09 11:33:00) [4]> [4] kyn66 © (09.02.06 11:26)
Все-таки напиши один запрос. Будет намного понятнее и быстрее
paul_k (2006-02-09 11:32:00) [5]что же происходит у тебя.
перешли к первой записи в TAB
1.Перешли к первой записи в ListTab
проверили что в ListTab есть записи, проверили что есть запись с UslKod=UslTblKod.Value и переходим к ней
суммируем эту строку
смещаемся в TAB на одну строку
переходим к 1
кауова настроенная сруктура данных? Таb и ListTab связаны как master-detile?
vovnuke (2006-02-09 11:31:00) [6]подцепи обе таблички, да хоть к DBGrid, и посмотри, есть ли там вообще значения.
kyn66 (2006-02-09 11:26:00) [7]UslTblKod.Valueэто значение таблицы, которая тоже проходит в цикле, я ее просто не описывал. Это значение меняется.
paul_k (2006-02-09 11:24:00) [8]Настоятельно рекомендую воспользоватся для вычислений запросом вида
select sum(kol1),.... from Table where UslKod = :UslTblKod.Value
на что, собственно, и намекает
> [1] Sergey13 © (09.02.06 11:02)
для этого читать AdoDataSet, обратив внимание на CommandText и Parametrs
в хелпе Дельфи и про агрегатные функции (sum, avg,...) в хелпе МсСкл (точнее в хелпе к Квери Аналайзеру.)
stone (2006-02-09 11:07:00) [9]
> UslTblKod.Value
Это что такое? Мне так кажется, что ты постоянно одну и ту же запись ищешь...
Sergey13 (2006-02-09 11:02:00) [10]И зачем в названии сервера SQL поставили? Нафик он не нужен. 8-)