Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не срабатывает позиционирование в таблице !!! [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-)


Наверх

Титульная страница Поиск, карта сайта Написать письмо