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

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

Не могу удалить DBF [D5, MSSQL, dBase, FoxPro]


blackraven ©   (2006-08-31 14:36:00) 

Доброе время суток, коллеги. Нужно провернуть некоторые операции с DBF и удалить его. С операциями все нормально, а вот с удалением проблемы. Вот код, который просто бегает по DBF-файлу, а затем удаляет его. Но удаления не происходит. GetLastError возвращает 32-ую ошибку. Для соединения с DBF-ником использую ADODB_TLB.pas, т.е. ADO.

procedure TfrmMain.Button1Click(Sender: TObject);
var cnn:connection;rs:recordset;
begin
cnn:=CoConnection.Create;
rs:=CoRecordset.Create;
cnn.ConnectionString:= 'driver=Microsoft Visual FoxPro Driver;Exclusive=No;SourceType=DBF;SourceDB=d:\mps\out';
cnn.Open('','','',-1);
rs.Open('select * from o2006083184986.dbf',cnn, adOpenStatic, adLockReadOnly,adCmdText );
rs.MoveFirst;
while not rs.EOF do
 begin
  rs.MoveNext;
 end;
 rs.Close;
 cnn.Close;
deletefile(Pchar('d:\mps\out\o2006083184986.dbf'));
rs:=nil;
cnn:=nil;
end;

Файл не ReadOnly. Удалять пробовал всеми известными мне способами (ShFileOperation, MoveFileEx).


ANB   (2006-08-31 16:07:00) [1]


> 2Reindeer Moss Eater пробовал и так не получилось.

Тогда это та самая ошибка. И номер наверняка теперь - "нет доступа".


sniknik   (2006-08-31 15:59:00) [2]

> Думал Delphi глючат, но нет.
нет, это "фича" фоксового провайдера, аттавизм от старых времен когда таблици открывались в своих областях и можно было переключатся между ними. закрытие курсора не закрывает область, а закрытие коннекта не освобождает обьекты сразу на случай если еще понадобятся (общий принцип COM)

> Я вот думаю не в ConnectionString у меня дело?
в том числе, выше говорил, что используя OLEDB провайдера можно обойти, у ODBC такой возможности просто нет (или не нашол).


blackraven   (2006-08-31 15:45:00) [3]

2Reindeer Moss Eaterпробовал и так не получилось.
Кстати для форума.я данный код пробовал на 2-х языках на delphi  и VB6. результаты одинаковые. Думал Delphi глючат, но нет. Я вот думаю не в ConnectionString у меня дело?


blackraven   (2006-08-31 15:43:00) [4]

sniknikТак с полным путем получилось. Спасибо большое - это вариант.


Reindeer Moss Eater   (2006-08-31 15:43:00) [5]

А так?

rs:=nil;
cnn:=nil;
deletefile(Pchar('d:\mps\out\o2006083184986.dbf'));


blackraven   (2006-08-31 15:40:00) [6]

2ANBК сожалению мне данный вариант не подойдет.


sniknik   (2006-08-31 15:39:00) [7]

> - говорит таблица не существует.
значит не существует/не находится (хотя и странно в свете вышеприведенного "select * from o2006083184986.dbf")... попробуй задать с полным путем.


Reindeer Moss Eater   (2006-08-31 15:39:00) [8]

Исправить что? Неудаляемость незакрытых файлов?


blackraven   (2006-08-31 15:36:00) [9]

Я спрашиваю не почему не удаляется, а как можно исправить, ведь все что я открывал я закрыл, как видно из кода.


Reindeer Moss Eater   (2006-08-31 15:30:00) [10]

Ну и чего тогда спрашиваешь о том почему не удаляется?

32L       ERROR_SHARING_VIOLATION


blackraven   (2006-08-31 15:28:00) [11]

2Reindeer Moss EaterErr=32, я в самом первом сообщении писал. Толку то, что я номер ошибки знаю.


blackraven   (2006-08-31 15:25:00) [12]

sniknik ©Пробовал так cnn.Execute('drop table o2006083184986.dbf',rc,adCmdText) ;- говорит таблица не существует.
2ANB32-ошибка I/O это насколько я разобрал -  файл не существует. Хотя он существует!!!


Reindeer Moss Eater   (2006-08-31 15:20:00) [13]

Reindeer Moss Eater Не понял?

if not deletefile(Pchar('d:\mps\out\o2006083184986.dbf')) then
Err := GetLastrError;


ANB   (2006-08-31 15:18:00) [14]

На некоторых версиях винды (закономерности не выявил) файл таблицы остается заблокированным за процессом даже если коннект закрыт и фрикнут. Помогает выйти и зайти в программу.


blackraven   (2006-08-31 15:17:00) [15]

Reindeer Moss EaterНе понял?
sniknikСпасибо за идею сейчас попробую.


sniknik   (2006-08-31 14:54:00) [16]

> Файл не ReadOnly. Удалять пробовал всеми известными мне способами (ShFileOperation, MoveFileEx).
ADOCommand.CommandText:= 'DROP TABLE o2006083184986.dbf';
ADOCommand.Execute;

???

+
если провайдер OLEDB (не ODBC) то можно вместо select использовать use.


Reindeer Moss Eater   (2006-08-31 14:47:00) [17]

GetLastError


Наверх

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