Вниз
Скачать: CL | DM;

Залипание после запросов.   Найти похожие ветки 

← →
MixerPro ©   (2003-12-19 11:54) [0]

Есть 2 базы InterBase. Одна моя, другая - чужая.
На основе своей базы написан уже большой проект и все работает. Но вот появилась задача сконвертированть нужные данные из чужой БД в мою.
1. Открываю обе ДБ
2. Выполняю большой объем запросов по чужой БД типа "Select ... Where ..."
3. Записываю в файл (просто так надо)
4. Выхожу из программы.
При выходе программа залипает. Если конвертирование было в небольшом объеме, то через пол минуты программа отмокает.
Так вот может она за собой транзакции чистит... Не пойму, где траблы?

Если объяснил не достаточно понятно, то могу конкретизированть.
Спасибо.


← →
Johnmen ©   (2003-12-19 11:57) [1]

1. Компоненты доступа ?
2. Управление транзакциями ?


← →
MixerPro ©   (2003-12-24 11:37) [2]

1. Компоненты доступа:
dbSicon:TIBDatabase
transSicon:TIBTransaction
dsD:TDataSource
qD:TIBQuery
то же самое по другой БД
2. Свойства транзакции:
DefaultAction = TARollBack (база только читается, данные пишутся в файл)

Фактически открыты две БД. По обеим БД идет только чтение, а данные пишутся в файл.
По обеим БД компоненты отдельные, т.е. для каждой БД свои IBDatabase,IBTransaction, DataSource, IBQuery.
Запрос к БД:
CurrIbQ.SQL.Clear;
CurrIbQ.SQL.Add("Select D.* from Data D where .......");
try CurrIbQ.Open;
// далее по всем выбранным записям читаю данные
// ........
// ........
dmSicon.qD.Close;
if dmSicon.transSicon.Active then dmSicon.transSicon.Rollback; // это уже лишнее наверное

После такого запроса при параллельной работе с той же БД другой программой (давно отлаженной) при закрытии программы выходит сообщение "Connection lost to database".
В каком случаю теряется соединение с базой ????

Помогите пж-та! Есть идеи?


← →
MixerPro ©   (2003-12-24 11:41) [3]

Вместо
dmSicon.qD.Close;
CurrIbQ.Close;


← →
Johnmen ©   (2003-12-24 11:42) [4]

Желательно всё же коммитить читающую транзакцию. А завершать её обязательно. Перед завершением работы...


← →
MixerPro ©   (2003-12-24 11:52) [5]

1. Т.е. вместо transSicon.Rollback пишем transSicon.Commit ?
2. Таких запросов в цикле много. CurrIbQ.Close делать после заждого запроса ?


← →
Johnmen ©   (2003-12-24 11:54) [6]

1. Да.
2. Close делать всегда, когда запрос уже не нужен. А после этого Commit.


← →
Кщд   (2003-12-24 11:59) [7]

А если структура соурс и дестинишн одинакова, то BatchOutput/BatchInput


← →
MixerPro ©   (2003-12-24 12:24) [8]

Зачем использовать BatchOutput/BatchInput ?


← →
Кщд   (2003-12-24 12:49) [9]

MixerPro © (24.12.03 12:24) [8]
"Но вот появилась задача сконвертированть нужные данные из чужой БД"

если под "сконвертировать" подразумевался просто перенос
если нет, то нет


← →
MixerPro ©   (2003-12-24 12:50) [10]

Проблема в том, что все вроде работает, но программа не закрывается долго - от пол минуты при небольшом числе запросов и дольше.
Т.е. как будто она память за собой чистит.
Вообще кто нибудь пробовал работать одновременно с двумя interBase базами?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.021 c
1-63112
Petr K
2004-01-08 21:54
2004.01.20
TChart (Line)


1-63133
Evgeniy_K
2003-12-28 11:31
2004.01.20
183 I/O Error


1-63205
Ser_ega
2004-01-09 23:17
2004.01.20
Копия экрана!!!


14-63371
xman
2003-12-29 15:34
2004.01.20
ГЛЮК


1-63105
del
2004-01-08 07:06
2004.01.20
освобождение памяти




   Наверх