| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Глючный BDE |
| Автор: p0s0l 12.7.2003, 20:00 |
| table1.Filter := {тут выражение}; table1.Filtered := true; table1.First; while not table1.EOF do table1.Next; Вот такая процедурина виснет. А виснет потому что после того как указатель попрыгает последовательно где-то по 10-20 записям возвращается в начало таблицы. Table1 - Paradox, с активным вторичным индексом по обычному Integer-полю. Если индекс отключить, то все ОК, но мне индекс нужен. Как быть ? И еще: table2.Append; // Занесение данных table2.Post Это выдаёт ошибку "Key violation", хотя в table2 Primary Index - поле AutoInc. Как же тогда может выскочить Key violation ? Причем эти глюки возникают крайне редко, но возникают, база - около 20000 записей. Ну второй случай я привел так просто, он решается путем ручного увеличения поля. А первый я не знаю как обойти. Может кто-нибудь знает как обойти первый глюк и из-за чего вообще они возникают ? |
| Автор: Vit 13.7.2003, 01:36 |
| Использовать Query и SQL проблемы исчезнут, и первая и вторая. А также после post попробовать ставить метод FlushBuffers |
| Автор: p0s0l 13.7.2003, 17:26 |
| Дак SQL - это тормознее раза в 2-3 получается, у меня SQL запрос получился секунд 10... А это не приемлимо. А FlushBuffers - у меня таблица регулярно открывается и закрывается, так что этого не надо. |
| Автор: Vit 14.7.2003, 23:10 | ||
Это слишком долго, скорее всего нужные индексы отсутствуют, т.к. запрос должен проходить не медленнее, чем досупом через таблицу... |
| Автор: Medved 15.7.2003, 06:05 | ||
это Вит актуально только для клиент-серверной модели БД. С локальными БД "доступ через таблицу" будет работать гораздо шустрее. |
| Автор: Akella 15.7.2003, 08:18 | ||
У меня тоже вылетала такая ошибка. Я обнаружил, что у меня вызывается метод POST два раза подряд. Посмотри, может у тебя после добавления записи происходит переход на другую, а при этом метод POST вызывается автоматически. |
| Автор: p0s0l 15.7.2003, 15:04 |
| Нет, там все в порядке. Программа работает идеально где-то неделю, а потом - раз и вылезает глюк. Хотя до появления глюка эта часть программы работала нормально, и эта процедурина используется довольно часто. Но индекс отключишь - и глюка как не бывало, может работать сколько угодно. В ручную же пересортировывать всю таблицу - это больше часа получается, поэтому без индекса нельзя. |
| Автор: Medved 15.7.2003, 15:10 | ||
2p0s0l, что-то вообще непонятное.... Чую нутром где-то сам недосмотрел.... |
| Автор: p0s0l 15.7.2003, 15:33 |
| 2Pegas, говорю ведь, деалю table1.next - и глючит, где я тут ошибся ? table1 с маленькой буквы написал ? |
| Автор: Medved 16.7.2003, 12:07 | ||
Запости исходник. А еще лучше на мыло пришли. |
| Автор: p0s0l 16.7.2003, 17:40 |
| 2Pegas: Смотри: работает прога нормально некоторое время, потом вылазит глюк (предположим что даже по моей вине). Беру там же на месте пишу НОВУЮ прогу, которая только и делает что: table1.Open; table1.IndexName := 'ix1'; table1.Filter := '...'; table1.Filtered := true; while not table1.eof do table1.next Прога виснет и как я уже писал из-за того что, например, после записи №10 идет №15, №500, №1246, потом снова №10, №15, №500, №1246, №10 и т.д. вечно Т.е. сама таблица каким-то образом стала глючной, я вот про че говорю. Я не знаю, что нужно написать, чтобы добиться этого глюка ? Что я делал с таблицами, дак это все стандартные методы типа open, append и т.д. Ты хочешь одним взглядом на исходник (~7000 строк) определить правильность моей программы ? Если хочешь, то я тебе его вышлю, но это тебе ничего не даст, т.к. глюк вылазит где-то после недели использования программы, а ты будешь этим заниматься ? Я пытался у себя дома заставить появиться этот глюк - но нет, не появляется. А там где стоит эта программа, где её и юзают - там-то он и вылазит как назло. Вооще у меня давно уже такое желание - плюнуть на тэтэйблы и написать все это дело вручную. Будет спокойнее и намного (как я думаю) быстрее. Тогда уж если глюк и будет - то моей вине, а щас я уверен на 99% - что с BDE не все ОК. Как я думаю, если я что-то не так делаю с таблицей, BDE не должен мне давать делать этого, а ведь дает (если все-таки я деляю чо-то неправильное), или же сам мне подгавнивает потихонечку... |
| Автор: Medved 16.7.2003, 20:46 | ||
| Прошу только не обижаться, но на 99% уверен, что проблема как раз-то не в BDE. (не потому что BDE безгрешный, просто у меня на счет этой проблеммы есть свои предположения) Мне не надо высылать весь исходник, а вышли:
Т.е. эту маленькую программку, и саму таблицу. Я уверен, что найду ошибку. |
| Автор: p0s0l 16.7.2003, 23:10 |
| 2Pegas: Только подожди недельку, а то мне надо закачать себе то эту таблицу (я вожусь прямо там на месте, на дискете её не притащить). |