![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка запроса к БД [D7]
Андрей (начинающий) © (2009-03-04 11:55:00)При обращении к таблице БД файл с этой таблицей может быть занят, но освобождается довольно быстро. В предоставленном коде запрос нормально срабатывает где-то от 1-й до 20-й итерации цикла. Но гложат меня сильные сомнения, что я правильно обращаюсь к БД. Подскажите, пожалуйста, что я делаю не так и как правильно обратиться к таблице сразу после ее освобождения если она в данный момент времени занята.
// ...
close;
i:=1; sql.Clear; sql.Add('...');
while (i>0) and (i<100) do
try
inc(i); open; i:=0;
except
end; // *** try..except..end
first;
while not Eof do begin
//...
next;
end; // *** while not Eof do
close;
//...
Сергей М. (2009-03-04 16:45:00) [1]
> Андрей (начинающий) (04.03.09 15:47) [11]
Понятно.
Ну тогда у меня те же подозрения, что и в [9]
> Другой запрос на выборку данных из другой процедуры
Тогда что мешает по завершению этой процедуры освободить таблицу, с тем чтобы без проблем обращаться к ней в последующих вызываемых тобой процедурах ?
Андрей (начинающий) (2009-03-04 15:47:00) [2]
> Сергей М. © (04.03.09 14:19) [10]
:)
VolgaDB Engine is a small and fast data engine for working with flat files in special Volga format (files with *.d extension) and as Volga client for MS SQL, MySQL and MS Access (Jet) databases in Delphi and C++Builder applications without using BDE. For flat files it has no multi-user or client-server support. All necessary code is included in your application (~130-140 Kb) without additional DLLs. No any registry settings! It works with Delphi 4.0, 5.0, 6.0, 7.0 and C++Builder 4.0, 5.0, 6.0. Code examples are emphasized with color.
Главное для меня - не требуют установки BDE и всяких библиотек клиенту. Скопировал сами таблицы и работай с ними. По сути, это обычные таблицы типа Paradox. Можно работать с ними напрямую или через SQL запросы.
Труп Васи Доброго (2009-03-04 14:19:00) [3]Первый раз слышу про эту Волгу, посмотрел краткое описание: VolgaDB Engine 5.10 - это набор компонент для работы с "плоскими" таблицами (single-user engine). Может в этом "single-user" и кроется тайна?
Сергей М. (2009-03-04 14:19:00) [4]
> БД на основе "VolgaDB"
"VolgaDB" - это что за зверь ?)
Сергей М. (2009-03-04 14:01:00) [5]
> в чем еще может быть ошибка при открытии запроса на выборку
> данных по таблице?
Ты давай лови ошибку)
Если это будет именно "Table is busy", вот тогда поверю что она занята
Андрей (начинающий) (2009-03-04 13:54:00) [6]
> Сергей М. © (04.03.09 13:10) [6]
А в чем еще может быть ошибка при открытии запроса на выборку данных по таблице? БД на основе "VolgaDB".
Сергей М. (2009-03-04 13:10:00) [7]С чего вообще ты взял, что проблема в "занятости" файла таблицы ?
Сергей М. (2009-03-04 13:09:00) [8]
> таблицу занимает операция записи другой процедурой
СУБД какая ?
Андрей (начинающий) (2009-03-04 12:47:00) [9]
> Сергей М. © (04.03.09 12:14) [3]
</I
> Какое дословно сообщение видишь ?
>
Дело в том, что ошибка доступа вылетает не постоянно. Сейчас вставил вывод сообщения, потестил несколько минут. Ничего не вылетело :) Для отлова нужно более длительное время. Меня интересует сам принцип - допустим ли такой код, что я привел? Мне не хочется выводить сообщение об ошибке во время работы (не отладки) программы. В крайнем случае можно вести лог ошибок, но не диалоговое окно. Скорее всего таблицу занимает операция записи другой процедурой.
Сергей М. (2009-03-04 12:14:00) [10]
> Андрей (начинающий) (04.03.09 12:09) [2]
Запрос на выборку не может быть причиной "занятия" файла таблицы.
try
..
open;
..
except
on e:Exception do ShowMessage(e.ClassName + ' ' + e.Message);
end;
Какое дословносообщение видишь ?
Андрей (начинающий) (2009-03-04 12:09:00) [11]
> Сергей М. © (04.03.09 12:04) [1]
Другой запрос на выборку данных из другой процедуры
Сергей М. (2009-03-04 12:04:00) [12]А кто и при каких условиях захватывает таблицу в монопольное использование ?