Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.04 c
14-1095673374
infom
2004-09-20 13:42
2004.10.10
Немодерируемая ветка !!!


9-1085024752
Hater
2004-05-20 07:45
2004.10.10
Сохранение игры


3-1094721688
Loaders
2004-09-09 13:21
2004.10.10
DBGrid+DataSet


1-1096289020
Dimon_St
2004-09-27 16:43
2004.10.10
Помогите найти библиотеку (Построение B-сплайнов)


14-1094827567
Anatoly Podgoretsky
2004-09-10 18:46
2004.10.10
Об учебе в России.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский