![]() |
|
|
![]()
|
|
| SergXPI |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 28.9.2005 Где: г.Харьков Репутация: нет Всего: нет |
Привет всем.
Подскажите пожалуйста в чем проблема. На этапе поиска данных в таблице с помощью Locate происходит зависание программы. У меня есть подозрения, что проблема в самой таблице. Как проверить целая таблица(ее индексы) или нет? |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Октрой таблицу, да и посмотри целые ли там индексы.
Если таблица откроется, значит все нормально. Может у тебя база большая... база локальная или удаленная? Это сообщение отредактировал(а) ALeXandrK - 25.9.2007, 16:07 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| SergXPI |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 28.9.2005 Где: г.Харьков Репутация: нет Всего: нет |
База локальная.
Зависание происходит где то на 1000 шаге цикла. В цикле происходит - добавление данных в таблицу - поиск (Locate) необходимых данных и удаление |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Вообще в таком случае лучше все запросами SQL делать.
Он и быстрее и качественнее сделает, а если засунишь процедуру в Thread, то и пользователя заставлять ждать не придется Твой подход просто варварский. Это сообщение отредактировал(а) ALeXandrK - 25.9.2007, 19:23 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| SergXPI |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 28.9.2005 Где: г.Харьков Репутация: нет Всего: нет |
Что именно? использование Locate? Если таблица запорчено, то я не думаю что SQL запрос будет работать |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Может я и зря так написал. Все зависи от того, что ты делаешь Locatом.
Обычно, если Locate есть в цикле, то его можно без проблем заменить на запрос. Если бы таблица была запорчена, она, вероятнее всего, и не открылась бы. Приведи часть кода с циклом. Это сообщение отредактировал(а) ALeXandrK - 25.9.2007, 23:28 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| SergXPI |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 28.9.2005 Где: г.Харьков Репутация: нет Всего: нет |
Фрагмент года (приход товара по накладным). В накладной может быть 1..10000 наименований. Когда проводится одна накладная я работаю с переиндексированной копией таблицы. Это конечно замедляет, но при этом есть всегда возможность сделать откат при возникновении ошибки. Но существует также необходимость провести сразу порядка 200 накладных и тогда этот метод очень тормозит. А без переиндексации начинает виснуть и виснит на Locate В таблице есть Autoinc поле может проблема в нем? Проблема в том, что не возникает исключительная ситуация, а программа просто виснит? Это сообщение отредактировал(а) SergXPI - 26.9.2007, 12:50 |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Раз этот не работает я бы поступил бы так...
Ну и правильно, ведь в коде ошибки нет, а вот сервер БД может дать сбой... Может драйвер БД плохой. Поищи в инете более новую версию. Это сообщение отредактировал(а) ALeXandrK - 26.9.2007, 19:23 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
SergXPI,
1. Использовать вместо линейного locate индексный seek религия не позволяет? Выигрыш тем больше, чем больше база. 2. Что мешает при поиске в отдельном потоке (например) выводить № записи в label (например) с периодом в 1-2 сек., дабы убедиться, что не висит, а ищет? Или строку поиска выводить? |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
мало того, на сколько мне известно, то locate неправльно работает со своими параметрами: loCaseInsensitive и loPartialKey
не раз с этим сталкивался |
|||
|
||||
| SergXPI |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 28.9.2005 Где: г.Харьков Репутация: нет Всего: нет |
Религия позволяет. Знания не позволяют. У обекта TTable я такой функции не нашел. SergBS, Если не сложно напиши пример. Это сообщение отредактировал(а) SergXPI - 27.9.2007, 17:11 |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
клавиша F1 наверное выламана?
|
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
SergXPI,
Не могу: я BDE не применяю (и тебе не советую). Сразу не обратил внимания :(. Так что: 1. Попробуй найти легкий компонент вместо BDE. Скорее всего будет сам по себе работать быстрее. 2. Посмотри как насчет ADO-SQL. Т.е. прочитай Доступ к БД-1. Локальные БД |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |