Показать сообщение отдельно
  #1  
Старый 19.01.2012, 13:33
MadFroG MadFroG вне форума
Прохожий
 
Регистрация: 19.01.2012
Сообщения: 4
Репутация: 10
По умолчанию Загрузка файла в Blob через OpenDialog

Всем Привет.
Помогите пожалуйста найти ошибку или недочёт в коде. Пытаюсь загрузить документ в blob ячейку в базе sql. Иногда первый раз загружается нормально, но иногда выдаёт ошибку "процесс не может получить доступ к файлу так как этот файл занят другим процессом".

В чем ошибка - никак не могу понять. То загружается, то нет.

Код:
//sdstemp2: TSimpleDataSet;

procedure TfmMain.btnCreateDocClick(Sender: TObject);  // кнопка добавляет новую запись
begin

sdstemp2.Insert;  
sdstemp2.Fields[0].Value:=1;

end;

procedure TfmMain.BitBtn2Click(Sender: TObject); // кнопка выбора документа
begin

     if OpenDialog2.Execute then
     begin
       if not FileExists(OpenDialog2.FileName) then
        begin
        ShowMessage('Файл не найден.');
       Exit;
      end
      else
       tblobfield(sdstemp2.FieldByName('document')).LoadFromFile(OpenDialog2.FileName);
     end;

end;


procedure TfmMain.BitBtn5Click(Sender: TObject);  // кнопка Post
begin

  sdstemp2.Post;
  sdstemp2.ApplyUpdates(0);
  sdstemp2.Refresh;

  statusbar1.Panels[0].Text:='документ загружен';
  opendialog2.Free;

end;

собственно ошибка
http://saveimg.ru/show-image.php?id=...2e7304121d870d

Так же есть кнопка открытия документа. Работает хорошо, до тех пор, пока не попробуешь загрузить документ. После этого опять вылезает та же самая ошибка.

Код:
//sdsopendoc: TSimpleDataSet;


procedure TfmMain.BitBtn1Click(Sender: TObject);
var
ptkwrd:Tmemorystream;
begin

sdsopendoc.Open;
ptkwrd:= Tmemorystream.Create;
tblobfield(sdsOpenDoc.FieldByName('document')).SaveToStream(ptkwrd);
ptkwrd.Position:=0;
ptkwrd.SaveToFile('tmp/temp_document.doc');
shellexecute(Handle, 'open','tmp/temp_document.doc',nil,nil,SW_SHOWNORMAL);
ptkwrd.Free;

end;
Ответить с цитированием