Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.029 c
11-1133217453
thaddy
2005-11-29 01:37
2006.10.29
wiki.


15-1160511177
default
2006-10-11 00:12
2006.10.29
Грамматика Мерфи(English grammar in use)


2-1160535831
Фесс
2006-10-11 07:03
2006.10.29
Сократить две числовые строки


15-1159804291
Piter
2006-10-02 19:51
2006.10.29
Нужно проапгрейдить компьютер для игры в Battlefield-2


15-1159934091
eRoR_rrr
2006-10-04 07:54
2006.10.29
Оптимизация программы