Главная страница
    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.48 MB
Время: 0.035 c
15-1160293068
DelphiLamer
2006-10-08 11:37
2006.10.29
Пара вопросов


2-1160481624
Steep
2006-10-10 16:00
2006.10.29
Units


2-1160502347
EG
2006-10-10 21:45
2006.10.29
Вопрос по ООП


15-1159951163
BadTester
2006-10-04 12:39
2006.10.29
Оцените, вот наднях написал программу Smart FM !!!


11-1132569120
Reset
2005-11-21 13:32
2006.10.29
Подсказка-"шарик" у иконки трея





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский