|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Загрузка файла в 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; Последний раз редактировалось 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'. Добавил туда полный путь к файлу и всё стало работать нормально. |