Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка при добавлении в Table

1.7K
26 февраля 2003 года
AndrewSha
64 / / 13.01.2003
Читаю данные из файла, кидаю в базу.
Иногда случается, попадаются дубликаты и в базу
их естесно не кинишь. Она жутко ругается, мол ключевые поля и т.п.
Как поймать такую ошибку и отменить запись такого кортежа? А то прерывается весь процесс чтения файла.
События OnEditError
OnPostError
OnUpdateError в Table не помогают.
2.9K
26 февраля 2003 года
youngs
5 / / 20.02.2003
Цитата:
Originally posted by AndrewSha
Читаю данные из файла, кидаю в базу.
Иногда случается, попадаются дубликаты и в базу
их естесно не кинишь. Она жутко ругается, мол ключевые поля и т.п.
Как поймать такую ошибку и отменить запись такого кортежа? А то прерывается весь процесс чтения файла.
События OnEditError
OnPostError
OnUpdateError в Table не помогают.


Ну прежде чем всталять новую запись проверяй на дублирование.
Оператор SELECT тебе поможет.

1.7K
26 февраля 2003 года
AndrewSha
64 / / 13.01.2003
Цитата:
Originally posted by youngs

Ну прежде чем всталять новую запись проверяй на дублирование.
Оператор SELECT тебе поможет.



А теперь подумай, при миллионе записей, сколько займёт времени выполнение select для каждой записи.
Этот вариант не подходит сразу.

1.7K
26 февраля 2003 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by AndrewSha


Читаю данные из файла, кидаю в базу.
Иногда случается, попадаются дубликаты и в базу
их естесно не кинишь. Она жутко ругается, мол ключевые поля и т.п.
Как поймать такую ошибку и отменить запись такого кортежа? А то прерывается весь процесс чтения файла.
События OnEditError
OnPostError
OnUpdateError в Table не помогают.


Можно отловить исключение на стороне сервера БД, если таковой имеется...

1.7K
26 февраля 2003 года
AndrewSha
64 / / 13.01.2003
Цитата:
Originally posted by Mark

Можно отловить исключение на стороне сервера БД, если таковой имеется...


Нет, это локальная БД.

295
26 февраля 2003 года
gray_k
356 / / 20.12.1999
Цитата:
Originally posted by Mark

Можно отловить исключение на стороне сервера БД, если таковой имеется...

\
Можно делать так:
try
{
MyTable->Post();
}
catch(...)
{
MyTable->Cancel();
}
Но придётся делать Post на каждую новую запись.

1.7K
26 февраля 2003 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by AndrewSha

Нет, это локальная БД.



Тогда все-таки селектом. Пост еще дольше по-моему. Создай индекс (уникальный), проверь - возможно время будет вполне приемлемым.

1.7K
26 февраля 2003 года
Mark
114 / / 21.11.2002
Еще вариант - считать файл (или только ключевое поле) в оперативку, пометить дурные записи, и кинуть в таблицу
1.7K
26 февраля 2003 года
AndrewSha
64 / / 13.01.2003
Цитата:
Originally posted by gray_k
\
Можно делать так:
try
{
MyTable->Post();
}
catch(...)
{
MyTable->Cancel();
}
Но придётся делать Post на каждую новую запись.


Вылетаю из функции чтения.
можно конечно запомнить место и потом перескочить,
но...
неужели никак не пймать ошибку ???????????
всё стало бы так просто и элегантно.

295
26 февраля 2003 года
gray_k
356 / / 20.12.1999
Ну можно ещё создать локальный набор данных (лучше всего Query) в котором хранить все занесённые значения записей, активизировать его к примеру при старте транзакции и для проверки использовать Locate. Должно работать достаточно быстро.
371
27 февраля 2003 года
Non_prog
193 / / 20.03.2000
А если данные из файла и базы данных загнать в массив там их обработать и отправить в базу данных. А в настройках BDE включить буферизацию по-больше.
:)
1.7K
27 февраля 2003 года
AndrewSha
64 / / 13.01.2003
Цитата:
Originally posted by Non_prog
А если данные из файла и базы данных загнать в массив там их обработать и отправить в базу данных. А в настройках BDE включить буферизацию по-больше.
:)


Всё это более-менее понятно, вопрос-то был в другом.
Но всё равно все спасибо.

358
27 февраля 2003 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by AndrewSha

Всё это более-менее понятно, вопрос-то был в другом.
Но всё равно все спасибо.


Или загнать данные в другую таблицу. Где полей на 1 больше и это добавочное поле и является уникальным первичным ключом. А потом удалить дубликаты. и уже после этого простым insert вогнать в нужную.

357
27 февраля 2003 года
Тимофей
112 / / 20.02.2000
Цитата:
Originally posted by AndrewSha
Читаю данные из файла, кидаю в базу.
Иногда случается, попадаются дубликаты и в базу
их естесно не кинишь. Она жутко ругается, мол ключевые поля и т.п.
Как поймать такую ошибку и отменить запись такого кортежа? А то прерывается весь процесс чтения файла.
События OnEditError
OnPostError
OnUpdateError в Table не помогают.



Может сначала файл подредактировать?

1.7K
27 февраля 2003 года
AndrewSha
64 / / 13.01.2003
Цитата:
Originally posted by moonmike

Или загнать данные в другую таблицу. Где полей на 1 больше и это добавочное поле и является уникальным первичным ключом. А потом удалить дубликаты. и уже после этого простым insert вогнать в нужную.


Так уже сделано, но всё же ...

11K
22 августа 2005 года
madstorm
9 / / 19.08.2005
Аналогичная проблема. Тока БД - удаленная.
ADODataSet->OnPostError(); не ловится никак!
и try{} не помогает:
прога вываливается в ошибку раньше обработчиков!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог