![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем Привет.
Помогите пожалуйста найти ошибку или недочёт в коде. Пытаюсь загрузить документ в 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;Последний раз редактировалось MadFroG, 19.01.2012 в 13:41. |
|
#2
|
|||
|
|||
|
проблемы решил, дело было как всегда в моей тупости и с БД не имело никакой связи.
Но теперь появилсь проблема, при нажатии на кнопку Код:
procedure TfmMain.BitBtn5Click(Sender: TObject); begin sdstemp2.Post; sdstemp2.ApplyUpdates(0); sdstemp2.Refresh; statusbar1.Panels[0].Text:='документ загружен'; end; почему-то отказывается работать процедура открытия файла из BLOB-ячейки. Хотя до её нажатия работает прекрасно. Код:
procedure TfmMain.BitBtn1Click(Sender: TObject);
var
ptkwrd:Tmemorystream;
begin
ptkwrd:= Tmemorystream.Create;
try
tblobfield(sdstemp2.FieldByName('document')).SaveToStream(ptkwrd);
ptkwrd.Position:=0;
ptkwrd.SaveToFile('tmp/temp_document.doc');
shellexecute(Handle, 'open','tmp/temp_document.doc',nil,nil,SW_SHOWNORMAL);
finally
ptkwrd.Free;
end;
end;вот ошибка ![]() |
|
#3
|
||||
|
||||
|
на рабочем столе нет папки tmp?
|
|
#4
|
|||
|
|||
|
Цитата:
Где собака зарыта, так и не понял. опять же, дело явно не связано с БД, а скорее с TMemoryStream, но раз уж тут по тупости сосдал тему, то прошу помоч =) Последний раз редактировалось MadFroG, 22.01.2012 в 14:03. |
|
#5
|
|||
|
|||
|
Понял таки в чём дело. Дело в ShellExecute.
Почему то в начале ему хватало неполного пути 'tmp/temp_document.doc'. Добавил туда полный путь к файлу и всё стало работать нормально. |