Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 900

/ вопрос открыт /

Здравствуйте, эксперты! При выполнении SQL запроса ISERT INTO Tbl ... SELECT ... почемуто не отрабатваются события AfterInsert (OnNewRecord)

Примечание #1 (14 сентября 2008, 23:08):
Многуважемые эксперты! Прошу меня извенить за неточный вопрос.
Для выполнения SQL запроса использовался стандартный компонент TQuery и метод ExecSQL.

VladimirS Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: VladimirS (статус: Посетитель)
Вопрос отправлен: 14 сентября 2008, 01:07
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 16 сентября 2008, 23:12; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 14 сентября 2008, 03:00 [#1]:

А написать, каким компонентом пользуемся, религия не позволяет?
Галочка "подтверждения прочтения" - вселенское зло.
VladimirS

VladimirS (статус: Посетитель), 14 сентября 2008, 23:10 [#2]:

Для выполнения SQL запроса использовался стандартный компонент TQuery и метод ExecSQL
Вадим К

Вадим К (статус: Академик), 14 сентября 2008, 23:26 [#3]:

А он и не должен. Если внимательней посмотреть на код этого компонента, то можно увидеть, что при обработке ExecSQL компонент никак не анализирует и не проверяет запрос. По этой причине он не знает, что Вы делаете - добавляете новую запись или удаляете старую.
А вот при вызове AddRecord, а также при вызове методов Insert и Append.
Галочка "подтверждения прочтения" - вселенское зло.
VladimirS

VladimirS (статус: Посетитель), 15 сентября 2008, 23:55 [#4]:

Здравствуйте Вадим К!
Спасибо за Ваши пояснения.
Проблема вот в чём. Можно ли при выполнении запроса SQL типа SELECT fl1,fl2,fl3 FROM Tbl1 с помощью TQuery (или другого комонента) привязать ProgressBar. Файл Tbl1 большой порядка 1 000 000 записей. Очень желатьльно операции с Tbl1 прослеживать с помощью ProgressBar.
Вадим К

Вадим К (статус: Академик), 16 сентября 2008, 00:54 [#5]:

опять странные решения. Зачем отображать миллион записей? их всё равно никто не увидит. И Вы писали о Insert, а теперь select... определитесь:)

Хотя, если Вы хотите сделать вставку миллиона записей с прогрессом, то это можно сделать так - разбить данные на 50-100 частей и вставлять порциями и прогресс совать.
А совать прогресс на при каждой добавленной записи при их кол-ве в миллион - глупая затея. 90% времени уйдёт на сование. Проверено. А может и все 99%.
Галочка "подтверждения прочтения" - вселенское зло.
VladimirS

VladimirS (статус: Посетитель), 16 сентября 2008, 20:05 [#6]:

Здравствуйте Вадим К!
Я не собираюсь отброжать миллион записей.
Запрос SQL на самом деле выглядит так:
'SELECT fieldN_Ab, SUM(DlitRazg) AS SumDlitR, COUNT(fieldN_Ab) AS Kol_Razg
FROM tbl_1
GROUP BY fieldN_Ab
HAVING SUM(DlitRazg) >0;'
т.е. из моллиона записей при выполнении запроса, после GROUP получаем результат порядка 300000 записей, далее полученные данные по запросу сохраняются в Tbl_2 и с ней работает User.
Выполнение такого запроса с помощью Tquery и при не очень быстром компе занимает от 1-4 минуты. т.е. нужно привязать ProgessBar к выполнению данного запроса. Я попытался сделать это с TQuery c помщью INSERT но не получилось. Если есть какое либо решение чирканите.
С Благодарностью VladimirS.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 16 сентября 2008, 20:10 [#7]:

Какая база данных? На каком SQL сервере?
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 16 сентября 2008, 20:24 [#8]:

Вадим К прав - отображение такого количества информации существенно замедлит выполнение запроса. Воспользуйтесь способом Microsoft - придайте курсору вид песочных часов перед началом запроса (screen.Cursor:=crSQLWait;) а после выполнения запроса - нормальный вид (screen.Cursor:=crDefault;)
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 16 сентября 2008, 20:57 [#9]:

Или поместите на форму компонент TAnimate и запустите на время выполнение запроса какой-нибудь стандартный клип - типа копирования файлов или другое, что понравится.
Вадим К

Вадим К (статус: Академик), 16 сентября 2008, 23:12 [#10]:

300тысяч записей? их никто не будет смотреть. Плюс Вы еще мучите BDE, это не её ниша. Вы пытаетесь горбатым запорожцем возить космические ракеты, где то так.
Просто выводите несколько первых сотен записей и всё. А также можно почитать о том, что такое серверные БД и серверные курсоры на них.
Хотя настоятельно рекомендую подумать над тем, кому надо такое кол-во записей. больше сотни редкий извращенец смотрит.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 17 октября 2017, 21:36
Выполнено за 0.05 сек.
Рейтинг@Mail.ru