Ошибка при добавлении в Table
Иногда случается, попадаются дубликаты и в базу
их естесно не кинишь. Она жутко ругается, мол ключевые поля и т.п.
Как поймать такую ошибку и отменить запись такого кортежа? А то прерывается весь процесс чтения файла.
События OnEditError
OnPostError
OnUpdateError в Table не помогают.
Читаю данные из файла, кидаю в базу.
Иногда случается, попадаются дубликаты и в базу
их естесно не кинишь. Она жутко ругается, мол ключевые поля и т.п.
Как поймать такую ошибку и отменить запись такого кортежа? А то прерывается весь процесс чтения файла.
События OnEditError
OnPostError
OnUpdateError в Table не помогают.
Ну прежде чем всталять новую запись проверяй на дублирование.
Оператор SELECT тебе поможет.
Ну прежде чем всталять новую запись проверяй на дублирование.
Оператор SELECT тебе поможет.
А теперь подумай, при миллионе записей, сколько займёт времени выполнение select для каждой записи.
Этот вариант не подходит сразу.
Читаю данные из файла, кидаю в базу.
Иногда случается, попадаются дубликаты и в базу
их естесно не кинишь. Она жутко ругается, мол ключевые поля и т.п.
Как поймать такую ошибку и отменить запись такого кортежа? А то прерывается весь процесс чтения файла.
События OnEditError
OnPostError
OnUpdateError в Table не помогают.
Можно отловить исключение на стороне сервера БД, если таковой имеется...
Можно отловить исключение на стороне сервера БД, если таковой имеется...
Нет, это локальная БД.
Можно отловить исключение на стороне сервера БД, если таковой имеется...
\
Можно делать так:
try
{
MyTable->Post();
}
catch(...)
{
MyTable->Cancel();
}
Но придётся делать Post на каждую новую запись.
Нет, это локальная БД.
Тогда все-таки селектом. Пост еще дольше по-моему. Создай индекс (уникальный), проверь - возможно время будет вполне приемлемым.
\
Можно делать так:
try
{
MyTable->Post();
}
catch(...)
{
MyTable->Cancel();
}
Но придётся делать Post на каждую новую запись.
Вылетаю из функции чтения.
можно конечно запомнить место и потом перескочить,
но...
неужели никак не пймать ошибку ???????????
всё стало бы так просто и элегантно.
:)
А если данные из файла и базы данных загнать в массив там их обработать и отправить в базу данных. А в настройках BDE включить буферизацию по-больше.
:)
Всё это более-менее понятно, вопрос-то был в другом.
Но всё равно все спасибо.
Всё это более-менее понятно, вопрос-то был в другом.
Но всё равно все спасибо.
Или загнать данные в другую таблицу. Где полей на 1 больше и это добавочное поле и является уникальным первичным ключом. А потом удалить дубликаты. и уже после этого простым insert вогнать в нужную.
Читаю данные из файла, кидаю в базу.
Иногда случается, попадаются дубликаты и в базу
их естесно не кинишь. Она жутко ругается, мол ключевые поля и т.п.
Как поймать такую ошибку и отменить запись такого кортежа? А то прерывается весь процесс чтения файла.
События OnEditError
OnPostError
OnUpdateError в Table не помогают.
Может сначала файл подредактировать?
Или загнать данные в другую таблицу. Где полей на 1 больше и это добавочное поле и является уникальным первичным ключом. А потом удалить дубликаты. и уже после этого простым insert вогнать в нужную.
Так уже сделано, но всё же ...
ADODataSet->OnPostError(); не ловится никак!
и try{} не помогает:
прога вываливается в ошибку раньше обработчиков!