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

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

Обработка запроса к БД [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]

А кто и при каких условиях захватывает таблицу в монопольное использование ?


Наверх

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