Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ненадёжность связи и TpFIBDatabase.Execute [D7, firebird]


Страницы:   1 2

Николай 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 с отловом исключения?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо