Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Проблема при сохранении файла из БД


Автор: k2s 24.2.2005, 15:03
Код

procedure TEditInDocForm.ButtonSaveImageClick(Sender: TObject);
begin
SavePictureDialog.FileName := (IODocsDataModule.INDOCSIBTable.fieldbyname('IMAGEFNAME').AsString);
SavePictureDialog.Execute;
(IODocsDataModule.INDOCSIBTableIMAGE as TBlobField).SaveToFile(SavePictureDialog.FileName);
end;



При выполнении SavePictureDialog не появляется, а сразу выдается ошибка "Cannot create file "". Имя файла или его расширение имеют слишком большую длину." Есстественно в
Код
IODocsDataModule.INDOCSIBTable.fieldbyname('IMAGEFNAME').AsString
находится имя файла. И что тут может быть не так?

Автор: Dimich 24.2.2005, 15:14
Замечание:
красивше будет написать так:
Код

...
if SavePictureDialog.Execute then
(IODocsDataModule.INDOCSIBTableIMAGE as TBlobField).SaveToFile(SavePictureDialog.FileName);
...
И заодно посмотреть дебагером, какое значение имеет IODocsDataModule.INDOCSIBTable.fieldbyname('IMAGEFNAME').AsString

Автор: k2s 24.2.2005, 16:40
Dimich, написал как ты посоветовал.
IODocsDataModule.INDOCSIBTable.fieldbyname('IMAGEFNAME').AsString значение имеет какое и должно, и SavePictureDialog.FileName после
Код
SavePictureDialog.FileName := (IODocsDataModule.INDOCSIBTable.fieldbyname('IMAGEFNAME').AsString);

такое же.
Что интересно, если в IODocsDataModule.INDOCSIBTable.fieldbyname('IMAGEFNAME').AsString ничего нет, то SavePictureDialog нормально открывается.

Автор: Dimich 24.2.2005, 16:57
Проверь, наверняка у тебя SavePictureDialog.FileName заканчивается символом #13

Автор: k2s 24.2.2005, 18:09
Извиняюсь, конечно, но как это проверить?

Автор: DDX 24.2.2005, 18:17
function RightStr(const AText: string; ACount: Integer): string;

Description

RightStr returns the trailing characters of AText up to a length of ACount characters. Thus, for example,

RightStr('Programmer', 7)

returns the string

'grammer'

Автор: k2s 24.2.2005, 20:38
smile

Автор: Dimich 25.2.2005, 08:54
Цитата(k2s @ 24.2.2005, 18:09)
Извиняюсь, конечно, но как это проверить?

- внимательнее посмотреть в дебагере.

Код
Function ValidFileName (FName : string) : string;
begin
 While Pos (#13, FName) > 0 do Delete (FName, Pos (#13, FName), 1);
 Result := FName;
end;

Автор: k2s 25.2.2005, 15:22
smile Большое всем спасибо за советы, но решение проблемы оказалось более лёгким чем я думал, а именно - типом данных поля IMAGEFNAME был CHAR, который заполняет свободное место в поле пробелами, у меня размер IMAGEFNAME был 300, имя файла естесственно было короче и оставшееся место заполнялось пробелами (http://ibase.ru/devinfo/charvar.htm). Отсюда и ошибка "Cannot create file "". Имя файла или его расширение имеют слишком большую длину." и то, что SavePictureDialog не открывался. После замены типа данных поля на VARCHAR всё стало нормально работать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)