![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ненадёжность связи и TpFIBDatabase.Execute [D7, firebird]
Николай 2 © (2008-09-09 16:19:00)Прога, соединившись с БД по инету (через GSM-модем), периодически обновляет её примерно так: pFIBDatabase.Execute('insert into ...').
Если Execute даёт false, он повторяется с теми же параметрами после восстановления и проверки связи.
Разрывы связи бывают часто.
Изредка в БД получаются дубли записей, т.е. в каждом таком случае Execute даёт false, несмотря на то, что запись упешно добавлена в БД.
Как можно решить эту проблему?
sniknik (2008-09-09 22:24:00) [21]добавить уникальное поле и проверяться по нему, если значение уже есть не добавлять... т.е. чтото типа самопальной репликации, поле репликации либо гуид, либо какой нибудь естественный ключ (если есть).
Медвежонок Пятачок (2008-09-09 22:07:00) [22]Изредка в БД получаются дубли записей, т.е. в каждом таком случае Execute даёт false, несмотря на то, что запись упешно добавлена в БД.
Как можно решить эту проблему?
Johnmen (2008-09-09 20:06:00) [23]1. Не слушать маньяков с хранимками.
2. Слушать, а точнее ЧИТАТЬ, про транзакции и управление ими.
Медвежонок Пятачок (2008-09-09 16:53:00) [24]Как можно решить эту проблему?
не инсертить по мопеду, а передавать блоб со скриптом в хранимку.
в ней делать все инсерты.
либо в два присеста.
передать блоб, проверить что все ок (например сравнить crc32), затем вызвать хранимку на выполнение инсертов
Sergey13 (2008-09-09 16:33:00) [25]> [0] Николай 2 (09.09.08 16:19)
> Изредка в БД получаются дубли записей
Значит в БД не стоит ограничение на уникальность.
Я с ФИБ-ами не работал, но наврняка там есть работа с транзакциями. Почему надо именно так pFIBDatabase.Execute('insert into ...')? Почему нельзя просто кверик создать и делать ему execute с отловом исключения?