Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Не могу удалить 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.068 c
2-1160568882
Новичоккк
2006-10-11 16:14
2006.10.29
Integer в 32х и 64х битных системах


15-1159418720
Тульский
2006-09-28 08:45
2006.10.29
Понятие NULL


3-1157001985
vodvorezlaya
2006-08-31 09:26
2006.10.29
Вопрос по типам данных Paradox7


15-1160573172
novill
2006-10-11 17:26
2006.10.29
Как называется команда в ХР, которая регистрирует библиотеки?


2-1160741398
zancik
2006-10-13 16:09
2006.10.29
Картинка-Button





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