![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADO,FOX: файл уже используется??? [D6, dBase, FoxPro]
Алексей © (2004-09-09 16:40:00)Сообщение "Файл уже используется" при повторном обращении к таблице.
Получаю данные из таблицы:
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 в фоксе не нашел :-(
sniknik (2004-09-15 17:15:00) [1]> Вот кусок кода после которого эта бодяга случается....
так и не углядел в нем "drop table имятейбла", это секрет?
убери все Repaint;, проверь. (смутные сомнения) вообще все лишнее убери, весь код, просто открой таблицу закрой и удали. удаляется? после с этим кодом, тогда как? убери часть, так? и т.д. ... раз уж все нужное показать нельзя, разбирайся.
и зачем тебе VFP Driver? простой insert into ... from select сделать нельзя.
> то винкоммандер все равно не могет переименовать этот файл.
про это уже говорили. делай удаление средствами движка.
Алексей (2004-09-15 17:00:00) [2]причем, даже если делаю простой селект, потом клозе этого запроса,и не выхожу из программы, то винкоммандер все равно не могет переименовать этот файл.Т.е.
procedure TfrmMain.Button2Click(Sender: TObject);
qMTemp.Close; qMTemp.SQL.Clear;
qMTemp.SQL.Add('select * from vtp');
qMTemp.Open;
qMTemp.Close;
end;
Алексей (2004-09-15 16:21:00) [3]Вот кусок кода после которого эта бодяга случается....
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;
sniknik (2004-09-15 15:41:00) [4]> А про дропп табле я же говорил : нет доступа :-(
странно, я пробовал нормально удаляет.
> P.S. Самое интересеное, что такая бодяга только с этим файлом. с другими таблицами все пучком.
?
точное имя файла/директории, строка подключения-(к какой директории), последовательность действий (как и после чего дроп делаеш). в общем сообщи все что не секретно и относится к делу.
старайся избегать таких данных
MyQuery.Open;
...
Обработка данных
...
MyQuery.Close;
именно в них глюки и живут.
Алексей (2004-09-15 15:10:00) [5]Прошу прощения за то что не уточнил: именно отдельные файлы....
А про дропп табле я же говорил : нет доступа :-(
sniknik (2004-09-13 11:54:00) [6]ну а запросом то пробовал?
(при закрытии конекта ADO тоже может не сразу сбрасывать выделенную память и т.д. по тойже причине, может понадобится. он и "надобится" при повторном тут же подключении, не учел.)
запросом должно сработать однозначно.
кстати это и единственно правильный путь, это же база а не разрозненные файлы (у них уже есть ограничения если не используется файл базы *.dbc, и старое снимается с поддержки), а если база есть простое удаление файла это путь к глюкам (радуйся что тебе этого не дали сделать), в базе то ссылка останется.
неиспользование базы не есть оправдание, т.к. разработчики вряд ли будут делать отдельную обработку для устаревшей схемы.
Алексей (2004-09-13 11:35:00) [7]Все закрыл!!!
sniknik (2004-09-10 13:12:00) [8]> Пишу MyADOConnection.Connected:=false;
> И все равно :-(
значит открыт не там. у тебя конект один? и все на него завязано?
Алексей (2004-09-10 13:03:00) [9]Пишу
MyADOConnection.Connected:=false;
И все равно :-(
sniknik (2004-09-10 12:55:00) [10]> А есть ли возможность принудительно закрыть хендл файла?
наверняка закроется если сделаеш реконект. или просто его (коннект) закроеш.
Алексей (2004-09-10 12:48:00) [11]Не выходит каменный цветок :-(
Нет доступа, говорит.
В обработке данных я записываю данные из запроса MyQuery в другую таблицу вторым запросом.
И потом этот второй запрос тоже пишу QueryInsert.Close;
Еще я делаю отчет, каторый привязываю к MyQuery.
Но эту форму я делаю FormOtchet.Free;
И больше я нигде к этой таблице не обращаюсь.
А есть ли возможность принудительно закрыть хендл файла?
P.S. Самое интересеное, что такая бодяга только с этим файлом. с другими таблицами все пучком.
sniknik (2004-09-10 12:01:00) [12]> delete from таблица2
да не записи а таблицу удалей запросом.
drop table таблица2
Алексей (2004-09-10 11:35:00) [13]Проблема в том, что при выполнении запроса
delete from таблица2
записи физически не удаляются, а помечаются как удаленные, и через неделю я буду иметь файл размером за мегабайт и далее:-(
Конечно, при тех винтах, что сейчас стоят на клиентских машинах - это копейки, но нехорошо.....
sniknik (2004-09-09 17:38:00) [14]вполне возможно в движке остается коннект (не закрывается хендл файла, т.к. это длительная операция а файл может еще понадобится).
попробуй удалять запросом.
Алексей (2004-09-09 17:22:00) [15]Вопрос в догону:
использование QuickReport как нибудь "завешивает" файл?