Форум » GUI » Подвисает программа.... » Ответить

Подвисает программа....

Andrey: При длительных операциях "подвисает" программа, в окошке появляется программа не отвечает. Длительная операция это: запись значений из массива 10 тыс. элементов по 6 значений в базу 60 тыс.записей + ещё в одну базу запись 3-4 значений. Вот на этих операциях прога подвисает (секунд 30-50 висит, это на хорошем компе): [pre2] // БД ПРИХОДА денег SELECT(cAliasPlt) DBCOMMIT() ProcessMessages() // ОБЯЗАТЕЛЬНО ! Чтобы форма НЕ замирала // БД платы абонентов SELECT(cAliasCalc) DBCOMMIT()[/pre2] Как исправить ситуацию ?

Ответов - 5

Andrey: Пробовал сделать так:[pre2] WaitThreadCreateIcon( 'Обработка данных', 'Запись на диск ...' ) // запуск без времени SELECT(cAliasPlt) DBCOMMIT() ProcessMessages() // ОБЯЗАТЕЛЬНО ! Чтобы форма НЕ замирала SELECT(cAliasCalc) DBCOMMIT() WaitThreadCloseIcon() // kill the window waiting[/pre2] Модуль функций с бесконечным бегунком - WaitThreadCreateIcon() взят из "Composite TSBrowse" на странице сайта http://hmgextended.com/applications.html Но нет показа (смены) иконок при этом. Хотя в других случаях есть. Что за операция такая DBCOMMIT(), тормозит показ иконок в другом потоке ?

Dima: Doevents() можно пробнуть прицепить А если DBCOMMIT() убрать , тоже подвисает ?

SergKis: Andrey Как у тебя сделан добавление\модификация записей ( dbappend(), ... ) ? Попробуй dbCommit() распределить на добавляемые записи, к примеру через 10 записей, добавив DoEvents() DoEvents() dbAppend() REPLACE ... with ... If ( ++i ) >= 10 dbCommit() i := 0 EndIf


Dima: Andrey пишет: запись значений из массива 10 тыс. элементов по 6 значений в базу 60 тыс.записей На таком кол-ве если после каждой записи делать Dbcommit , то конечно будут тормоза и подвисания. Сделай в самом конце Dbcommit для нужных рабочих областей

Andrey: Dima пишет: На таком кол-ве если после каждой записи делать Dbcommit , то конечно будут тормоза и подвисания. Сделай в самом конце Dbcommit для нужных рабочих областей Делаю в самом конце после расчётов Dbcommit для 2х баз. SergKis пишет: Как у тебя сделан добавление\модификация записей ( dbappend(), ... ) ? Добавление записей у меня нет. Расчёт идёт уже по готовой базе. В конце цикла стоит ProcessMessages(), там не подвисает. После расчёта делаю для 2х баз Dbcommit - вот и подвисает. Раньше такого не было, но уж больно база большая разрослась, до 60 тыс.записей.



полная версия страницы