Текущий архив: 2006.10.29;
Скачать: CL | DM;
Вниз
Не могу удалить DBF Найти похожие ветки
← →
blackraven © (2006-08-31 14:36) [0]Доброе время суток, коллеги. Нужно провернуть некоторые операции с 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).
← →
Reindeer Moss Eater © (2006-08-31 14:47) [1]GetLastError
← →
sniknik © (2006-08-31 14:54) [2]> Файл не ReadOnly. Удалять пробовал всеми известными мне способами (ShFileOperation, MoveFileEx).
ADOCommand.CommandText:= "DROP TABLE o2006083184986.dbf";
ADOCommand.Execute;
???
+
если провайдер OLEDB (не ODBC) то можно вместо select использовать use.
← →
blackraven © (2006-08-31 15:17) [3]Reindeer Moss Eater Не понял?
sniknik Спасибо за идею сейчас попробую.
← →
ANB © (2006-08-31 15:18) [4]На некоторых версиях винды (закономерности не выявил) файл таблицы остается заблокированным за процессом даже если коннект закрыт и фрикнут. Помогает выйти и зайти в программу.
← →
Reindeer Moss Eater © (2006-08-31 15:20) [5]Reindeer Moss Eater Не понял?
if not deletefile(Pchar("d:\mps\out\o2006083184986.dbf")) then
Err := GetLastrError;
← →
blackraven © (2006-08-31 15:25) [6]sniknik © Пробовал так
cnn.Execute("drop table o2006083184986.dbf",rc,adCmdText) ;
- говорит таблица не существует.
2ANB 32-ошибка I/O это насколько я разобрал - файл не существует. Хотя он существует!!!
← →
blackraven © (2006-08-31 15:28) [7]2Reindeer Moss Eater Err=32, я в самом первом сообщении писал. Толку то, что я номер ошибки знаю.
← →
Reindeer Moss Eater © (2006-08-31 15:30) [8]Ну и чего тогда спрашиваешь о том почему не удаляется?
32L ERROR_SHARING_VIOLATION
← →
blackraven © (2006-08-31 15:36) [9]Я спрашиваю не почему не удаляется, а как можно исправить, ведь все что я открывал я закрыл, как видно из кода.
← →
Reindeer Moss Eater © (2006-08-31 15:39) [10]Исправить что? Неудаляемость незакрытых файлов?
← →
sniknik © (2006-08-31 15:39) [11]> - говорит таблица не существует.
значит не существует/не находится (хотя и странно в свете вышеприведенного "select * from o2006083184986.dbf")... попробуй задать с полным путем.
← →
blackraven © (2006-08-31 15:40) [12]2ANB К сожалению мне данный вариант не подойдет.
← →
Reindeer Moss Eater © (2006-08-31 15:43) [13]А так?
rs:=nil;
cnn:=nil;
deletefile(Pchar("d:\mps\out\o2006083184986.dbf"));
← →
blackraven © (2006-08-31 15:43) [14]sniknik Так с полным путем получилось. Спасибо большое - это вариант.
← →
blackraven © (2006-08-31 15:45) [15]2Reindeer Moss Eater пробовал и так не получилось.
Кстати для форума.я данный код пробовал на 2-х языках на delphi и VB6. результаты одинаковые. Думал Delphi глючат, но нет. Я вот думаю не в ConnectionString у меня дело?
← →
sniknik © (2006-08-31 15:59) [16]> Думал Delphi глючат, но нет.
нет, это "фича" фоксового провайдера, аттавизм от старых времен когда таблици открывались в своих областях и можно было переключатся между ними. закрытие курсора не закрывает область, а закрытие коннекта не освобождает обьекты сразу на случай если еще понадобятся (общий принцип COM)
> Я вот думаю не в ConnectionString у меня дело?
в том числе, выше говорил, что используя OLEDB провайдера можно обойти, у ODBC такой возможности просто нет (или не нашол).
← →
ANB © (2006-08-31 16:07) [17]
> 2Reindeer Moss Eater пробовал и так не получилось.
Тогда это та самая ошибка. И номер наверняка теперь - "нет доступа".
Страницы: 1 вся ветка
Текущий архив: 2006.10.29;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.035 c