Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

ADO,FOX: файл уже используется???   Найти похожие ветки 

 
Алексей   (2004-09-09 16:40) [0]

Сообщение "Файл уже используется" при повторном обращении к таблице.
Получаю данные из таблицы:
MyQuery.Close;
MyQuery.SQL.Close;
MyQuery.SQL.Add("select a.поле1,b.поле2 from таблица1 а, таблица 2");
MyQuery.Open;
...
Обработка данных
...
MyQuery.Close;

Далее по ходу работы программы делаю:
  if FileExists("таблица2.dbf") then begin
     if not DeleteFile("таблица2.dbf") then begin
        MessageDlg("Не смог удалить таблица2.dbf",mtInformation,mbOkCancel,0);
        Exit;
     end;
  end;
  qTemp.Close;  qTemp.SQL.Clear;
  qTemp.SQL.Add("create table таблица2.dbf" (");
  qTemp.SQL.Add("поле1 numeric (6,0),поле2 numeric (10,2))");
  qMagTemp.ExecSQL;

В результате файл не могет удалится....И соответственно, создаться....

Больше ни один запрос к этой таблице не обращается. Специально проверял.

P.S. Сия "хитрая" операция (прибить, а потом создать) делаю для получения чистой фоксовой таблицы, т.к. аналога команды zap в фоксе не нашел :-(


 
Алексей   (2004-09-09 17:22) [1]

Вопрос в догону:
использование QuickReport как нибудь "завешивает" файл?


 
sniknik ©   (2004-09-09 17:38) [2]

вполне возможно в движке остается коннект (не закрывается хендл файла, т.к. это длительная операция а файл может еще понадобится).

попробуй удалять запросом.


 
Алексей   (2004-09-10 11:35) [3]

Проблема в том, что при выполнении запроса
delete from таблица2

записи физически не удаляются, а помечаются как удаленные, и через неделю я буду иметь файл размером за мегабайт и далее:-(
Конечно, при тех винтах, что сейчас стоят на клиентских машинах - это копейки, но нехорошо.....


 
sniknik ©   (2004-09-10 12:01) [4]

> delete from таблица2
да не записи а таблицу удалей запросом.
drop table таблица2


 
Алексей   (2004-09-10 12:48) [5]

Не выходит каменный цветок :-(
Нет доступа, говорит.
В обработке данных я записываю данные из запроса MyQuery в другую таблицу вторым запросом.
И потом этот второй запрос тоже пишу QueryInsert.Close;
Еще я делаю отчет, каторый привязываю к MyQuery.
Но эту форму я делаю FormOtchet.Free;
И больше я нигде к этой таблице не обращаюсь.

А есть ли возможность принудительно закрыть хендл файла?

P.S. Самое интересеное, что такая бодяга только с этим файлом. с другими таблицами все пучком.


 
sniknik ©   (2004-09-10 12:55) [6]

> А есть ли возможность принудительно закрыть хендл файла?
наверняка закроется если сделаеш реконект. или просто его (коннект) закроеш.


 
Алексей   (2004-09-10 13:03) [7]

Пишу MyADOConnection.Connected:=false;
И все равно :-(


 
sniknik ©   (2004-09-10 13:12) [8]

> Пишу MyADOConnection.Connected:=false;
> И все равно :-(
значит открыт не там. у тебя конект один? и все на него завязано?


 
Алексей   (2004-09-13 11:35) [9]

Все закрыл!!!


 
sniknik ©   (2004-09-13 11:54) [10]

ну а запросом то пробовал?
(при закрытии конекта ADO тоже может не сразу сбрасывать выделенную память и т.д. по тойже причине, может понадобится. он и "надобится" при повторном тут же подключении, не учел.)
запросом должно сработать однозначно.

кстати это и единственно правильный путь, это же база а не разрозненные файлы (у них уже есть ограничения если не используется файл базы *.dbc, и старое снимается с поддержки), а если база есть простое удаление файла это путь к глюкам (радуйся что тебе этого не дали сделать), в базе то ссылка останется.
неиспользование базы не есть оправдание, т.к. разработчики вряд ли будут делать отдельную обработку для устаревшей схемы.


 
Алексей   (2004-09-15 15:10) [11]

Прошу прощения за то что не уточнил: именно отдельные файлы....
А про дропп табле я же говорил : нет доступа :-(


 
sniknik ©   (2004-09-15 15:41) [12]

> А про дропп табле я же говорил : нет доступа :-(
странно, я пробовал нормально удаляет.

> P.S. Самое интересеное, что такая бодяга только с этим файлом. с другими таблицами все пучком.

?
точное имя файла/директории, строка подключения-(к какой директории), последовательность действий (как и после чего дроп делаеш). в общем сообщи все что не секретно и относится к делу.
старайся избегать таких данных
MyQuery.Open;
...
Обработка данных
...
MyQuery.Close;
именно в них глюки и живут.


 
Алексей   (2004-09-15 16:21) [13]

Вот кусок кода после которого эта бодяга случается....
  qMTemp.Close;  qMTemp.SQL.Clear;
  qMTemp.SQL.Add("select kod,kol_vo from reg where nm=:nm order by kod");
  Screen.Cursor:=crSQLWait;
  qMTemp.Parameters.ParamByName("nm").Value:=7;
  qMTemp.Open;
  Screen.Cursor:=crDefault;
  lbOperachiya.Caption:="";Repaint;
  lbOperachiya.Caption:="Çàïîëíÿåì VTP";
  WriteLog ("Çàïîëíÿåì VTP");Repaint;
  qMTemp2.Close; qMTemp2.SQL.Clear;
  qMTemp2.SQL.Add("insert into vtp (kod,kol_vo) values (:kod,:kol)");
  Kol_voZap:=qMTemp.RecordCount;
  while not qMTemp.Eof do begin
     qMTemp2.Close;
     qMTemp2.Parameters.ParamByName("kod").Value:=
        qMTemp.FieldByName("kod").AsInteger;
     qMTemp2.Parameters.ParamByName("kol").Value:=
        qMTemp.FieldByName("kol_vo").AsFloat;
     qMTemp2.ExecSQL;
     qMTemp.Next;
     if (qMTemp.RecNo mod 25)=0 then begin
        lbSost.Caption:="Îáðàáîòàííà çàïèñü "+IntToStr(qMTemp.RecNo)+
                         " èç "+IntToStr(Kol_voZap);
        Repaint;
     end;
     {$IFDEF __DEB__}
        if (qMTemp.RecNo=5) then break;
     {$endif}
  end;
  qMTemp.Close;
  qMTemp2.Parameters.Clear;
  qMTemp2.Close;


 
Алексей   (2004-09-15 17:00) [14]

причем, даже если делаю простой селект, потом клозе этого запроса,и не выхожу из программы, то винкоммандер все равно не могет переименовать этот файл.Т.е.
procedure TfrmMain.Button2Click(Sender: TObject);
  qMTemp.Close; qMTemp.SQL.Clear;
  qMTemp.SQL.Add("select * from vtp");
  qMTemp.Open;
  qMTemp.Close;
end;


 
sniknik ©   (2004-09-15 17:15) [15]

> Вот кусок кода после которого эта бодяга случается....
так и не углядел в нем "drop table имятейбла", это секрет?

убери все Repaint;, проверь. (смутные сомнения) вообще все лишнее убери, весь код, просто открой таблицу закрой и удали. удаляется? после с этим кодом, тогда как? убери часть, так? и т.д. ... раз уж все нужное показать нельзя, разбирайся.

и зачем тебе VFP Driver? простой insert into ... from select сделать нельзя.

> то винкоммандер все равно не могет переименовать этот файл.
про это уже говорили. делай удаление средствами движка.



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

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.037 c
1-1095951437
kiuv
2004-09-23 18:57
2004.10.10
Ошибка функции inifiles.readstring - как исправить


3-1094794847
stone
2004-09-10 09:40
2004.10.10
Даты в Access


14-1095818337
Думкин
2004-09-22 05:58
2004.10.10
С днем рождения! 22 сентября


4-1094652268
Ivanov_F.
2004-09-08 18:04
2004.10.10
Как узнать сколько занимает в памяти какой-то процесс?


1-1096040073
Vasiliy2k
2004-09-24 19:34
2004.10.10
таблицы в TRichedit