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

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

Запрос из подчиненной таблицы [D5, Paradox]


Страницы:   1 2 3

Julia ©   (2004-01-05 07:13:00) 

Подскажите, пожалуйста. Помогите найти другое решение.
Есть 2 таблицы: главная и подчиненная. Запросом беру необходимые данные из подчиненной и сравниваю циклом в цикле
while not eof Table1 и while not eof Запрос, и если Table1.Field1=Запрос.Field1, то Table1 корректирую и Table1.Field2 присваиваю значение из определенного поля запроса. Затем Table1.First, а Запос.Next и все сначала.
Процесс идет довольно длительно, учитывая что Table1 крутится с начала до самого конца столько раз, сколько записей в запросе. Может, есть другой выход?


Julia   (2004-01-05 11:50:00) [21]

Прочти paul_k © (05.01.04 10:38) [16]. Он правильно понял и в общем-то я и решила перейти от циклов к update.


Sandman25   (2004-01-05 11:48:00) [22]

Я выполнял похожую вещь, с помощью update table1 set field1 = (select sum(amount*price) from table2 where table2.table1_id = table1.id) where id=?
И очень даже быстро работало. Тоже Paradox, правда, D6.


Johnmen   (2004-01-05 11:41:00) [23]

Очень сложная обработка ? Очень много записей в таблицах ?

>Прочти мой вопрос

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


Julia   (2004-01-05 11:29:00) [24]

Уменьшить время обработки. Прочти мой вопрос.


Johnmen   (2004-01-05 11:25:00) [25]

>Julia

А самый главный вопрос - зачем это вообще нужно ? В чём резоны ?


Julia   (2004-01-05 11:17:00) [26]

>Ильш © (05.01.04 11:02) [20]
>Подход предлагаемый тобой соершенно неверен
ПОЧЕМУ???????
Базы скинуть могу. Но что ты в них поймешь? Нужно кидать и все мои запросы.


Ильш   (2004-01-05 11:02:00) [27]


> Нужно запросом суммировать оплату за услуги по пациенту
> в подчиненной таблице и сумму подставить в главную таблицу.

Эту сумму нужно получать динамически!А с ошибками надо разбираться. Подход предлагаемый тобой соершенно неверен. Кто ж так делает???
Главная проблема может крыться в самом Парадоксе. Тот еще движок :( Может на мыло киданешь базы. Интересно разобраться.


Julia   (2004-01-05 10:53:00) [28]

VAleksey © (05.01.04 10:47) [18]
Update, я думаю, будет быстрее, чем если база будет в цикле While not eof (что я описала в своем вопросе), тем более, что мне таким образом нужно корректировать несколько полей главной базы.


VAleksey   (2004-01-05 10:47:00) [29]


> Julia (05.01.04 10:42) [17]

а запрос типа, будет быстрее работать...
Ну ну..
Не факт.
А ресурсоемкость ;-) от использования запроса возможно и возрастет.


Julia   (2004-01-05 10:42:00) [30]

Ну конечно же системные ресурсы, а не свободные ресурсы, Sergey13. Загляни у себя МОЙ КОМПЬЮТЕР, Свойства, быстродействие и поймешь о чем я. Оперативки и там и у меня 256, windows98.
> Данные по сети гоняются или локально?
Локально
>Но при самом плохом раскладе 500 записей за 2 часа - это очень долго, ИМХО.

В том то все и дело. А освобождать их оперативку не моя проблема. Лучше я от циклов перейду к апдейт. Вот и проблема времени обработки решится. Так-то всяко быстрее. Просто был вопрос, как этот апдейт написать.
Большой привет! 8-)


paul_k   (2004-01-05 10:38:00) [31]

что надо сделать?
насколько я понял выбрать все записи подчиненной таблицы связанные с записью в главной, проссумировать поле n в подчиненной и записать это значение в поле k главной таблицы?
если так то ответ дан в
Sergey13 © (05.01.04 08:24) [4]
только чуть чуть надо подумать и написать
update table1
set pole_k = (select sum(table2.pole_n) from table2 where table2.kodTable1=table1.kod)
where
тут пишем условия выбора полей из table1


Sergey13   (2004-01-05 10:33:00) [32]

2Julia (05.01.04 10:18) [14]
Совсем ты меня запутала. 8-)
Каких ресурсов? Нефтяных? И от чего проценты? Где оперативка забита там ее скока? 16М или 256М? Чем забита? Почему нельзя освободить? Какая ОС в конце концов? Какие камни на машинах? Данные по сети гоняются или локально?
Но при самом плохом раскладе 500 записей за 2 часа - это очень долго, ИМХО.


Julia   (2004-01-05 10:18:00) [33]

Нет, сейчас (с while not eof- точное описание работы в моем первом вопросе) все идет прекрасно. Только на моем компе со свободными ресурсами -86% идет расчет показателей (1 раз в месяц) в течение 15 минут, а на другом, где оперативка сильно забита и свободных ресурсов 73% расчет идет аж 2 часа. Вот я ищу другое решение и хочу перейти к апдейт. По-моему это корректно.


Sergey13   (2004-01-05 10:09:00) [34]

2Julia (05.01.04 09:56) [12]
>Нет никаких циклов. Процесс идет так.
По кнопке? И именно на 16 "срезается"? И как ты там "Чуть подкорректировала запросы"? Секцию "where" в select добавила? Потом, ты же пишешь, что "первоначально и делала в динамике" и только переходишь на апдейты, а тут те-же яйца, только вид с боку. 8-)


Julia   (2004-01-05 09:56:00) [35]

>Ты их в циклах гоняешь?
Нет никаких циклов. Процесс идет так.
1. выполнила запрос типа:
select sum(b.summa)
from table2 b
2. Подстановка в table1:
table1.Edit
table1.Summa:=SQL.sum(summa)
table1.Post;

Может, ошибка от того, что постоянно идет Edit,Post?

>Может у тебя винда кривая?
Дело в том, что это наблюдается на 2-ух разных компьютерах.


VAleksey   (2004-01-05 09:50:00) [36]

Посмотри в FAQ рекомендации по настройке BDE.


Sergey13   (2004-01-05 09:48:00) [37]

2Julia (05.01.04 09:39) [9]
>а сразу вполняется другой запрос на обработку других данных из подчиненной таблицы. И такого рода запросов видов 8-10.
Ну прям таки сразу. 8-)

>А после обработки 16 пациентов дает ошибку памяти.
Ты их в циклах гоняешь? Наверное тут собака порылась. Хотя точный диагноз возможен только в присутствии еще живого пациента.

И что значит "срезаться"? Может у тебя винда кривая? Файл подкачки не выключен случаем? Что то странно больно на таких объемах такое поведение.


Julia   (2004-01-05 09:39:00) [38]

>В потоках что ли?
Нет, не в потоках, а сразу вполняется другой запрос на обработку других данных из подчиненной таблицы. И такого рода запросов видов 8-10.
>Велики ли объемы данных?
В том то и парадокс, что данных-то в базе не более 500, т.е. давольно-таки мало. А после обработки 16 пациентов дает ошибку памяти. Долго билась над этим. Чуть подкорректировала запросы, но единственно чего добилась, программа стала срезаться после скажем 26 пациентов.


Sergey13   (2004-01-05 09:25:00) [39]

2Julia (05.01.04 09:15) [7]
>(т.к. я выполняю сразу и другие запросы на вычисление других сумм)
В потоках что ли?
>В общем, устранить причину мне так и не удалось
Но это не причина, ИМХО, для перехода к заведомо неправильномурешению. Искать надо тщательнее. Велики ли объемы данных?


Julia   (2004-01-05 09:15:00) [40]

Sergey13.
Это я первоначально и делала в динамике, но программа срезается после обработки нескольких пациентов. Дает ошибку памяти kernel32(т.к. я выполняю сразу и другие запросы на вычисление других сумм), видимо из-за того что память забивается этими запросами, хотя я их вроде и закрывала. В общем, устранить причину мне так и не удалось. Поэтому я и перехожу к апдейту, но делаю это не как ты думаешь при каждом новом платеже, а 1 раз в месяц перед выполнением расчетов.


Страницы:   1 2 3

Наверх

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