Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];
ВнизftGraphic, DBGrid,ClientDataSet,DataSource Найти похожие ветки
← →
я (2011-09-11 15:03) [0]Вообщем делаю локальную базу данных через DataSource и ClientDataSet. В таблице полей есть поле с типом ftGraphic - назовем его ImageSample. На форму соответственно положена также DBGrid в которой отображается эта таблица. Вопросы:
1) Как присвоить полю ImageSample значение в виде собственно этого изображения.
2) Как создать событие при начале редактирования ImageSample. Т.е. при начале редактирования поля должна вызываться процедура в которой прописан выбор и присвоение изображения.
По первому вопросу нашел следующее:
OpenDialog.Options := OpenDialog.Options + [ofEnableSizing];
OpenDialog.Filter := "Все файлы (*.*)/*.*";
if OpenDialog.Execute then
begin
ADODataSet.Edit;
vBlob := TADOBlobStream.Create(TBlobField(ADODataSet.FieldByName("FileBody")), bmWrite);
vFS:=TFileStream.Create(OpenDialog.FileName, fmOpenRead or fmShareDenyWrite);
try
vBlob.Seek(0, soFromBeginning); // sереход в начало потока BLOB
vBlob.CopyFrom(vFS, vFS.Size);
finally
vFS.Free;
vBlob.Free;
end;
ADODataSet.Post;
end;
Как мне показалось это похоже на то что мне нужно, но тут речь про какой то ADO, что не понятно мне. vBlob := TADOBlobStream.Create(TBlobField(ADODataSet.FieldByName("FileBody")), bmWrite); в частности эта строка осталась для меня загадкой, в особенности то откуда берерется TADOBlobStream. И какие типы переменных используемых в процедуре. Да и вообще я не очень понял что это все значит. По идее файл записывается в буфер и видимо как то присваивается полю, но где именно присваивается непонятно. Вообщем помогите )
← →
я (2011-09-11 23:06) [1]
procedure TForm3.addImage();
var
vBlob:TBlobStream;
vFS:TFileStream;
begin
Form3.OpenDialog.Options := Form3.OpenDialog.Options + [ofEnableSizing];
OpenDialog.Filter := "Все файлы (*.bmp)/*.bmp";
if OpenDialog.Execute then
begin
ClientDataSet3.Edit;
vBlob := TBlobStream.Create(TBlobField(ClientDataSet3.FieldByName("ImageSample")), bmWrite);
vFS:=TFileStream.Create(OpenDialog.FileName, fmOpenRead or fmShareDenyWrite);
try
vBlob.Seek(0, soFromBeginning); // sереход в начало потока BLOB
vBlob.CopyFrom(vFS, vFS.Size);
finally
vFS.Free;
vBlob.Free;
end;
ClientDataSet3.Post;
end;
end;
преобразил пример в это. Вылетает по ошибке на строке
vBlob := TBlobStream.Create(TBlobField(ClientDataSet3.FieldByName("ImageSample")), bmWrite);
First chance exception at $75C49673. Exception class EInvalidCast with message "Invalid class typecast". (8680)
((
← →
я (2011-09-12 00:32) [2]Всегда приятно поговорить с умным человеком )
Переделал. Так ошибок не выдает, надеюсь что сохраняет, потом научусь обратно выдирать ее оттуда увижу ). Возможно строку нужно предварительно сохранить, т.к. без этого он текущую запись выдает с номером -1.
procedure TForm3.addImage();
var
vBlob:TStream;
vFS:TFileStream;
begin
Form3.OpenDialog.Options := Form3.OpenDialog.Options + [ofEnableSizing];
OpenDialog.Filter := "Все файлы (*.bmp)/*.bmp";
if OpenDialog.Execute then
begin
ClientDataSet3.Edit;
ShowMessage("num " +IntToStr(ClientDataSet3.RecNo) + ClientDataSet3.FieldByName("ImageSample").ClassName);
vBlob := ClientDataSet3.CreateBlobStream(ClientDataSet3.FieldByName("ImageSample"), bmWrite);
vFS:=TFileStream.Create(OpenDialog.FileName, fmOpenRead or fmShareDenyWrite);
try
vBlob.Seek(0, soFromBeginning); // sереход в начало потока BLOB
vBlob.CopyFrom(vFS, vFS.Size);
finally
vFS.Free;
vBlob.Free;
end;
ClientDataSet3.Post;
end;
end;
← →
я (2011-09-12 00:35) [3]Нет, в тока что созданой и редактируемой строке тоже чего то записывает, при этом ClientDataSet3.RecNo = -1 .
← →
Германн © (2011-09-12 00:54) [4]
> при этом ClientDataSet3.RecNo = -1 .
А ты уверен что RecNo обязан показывать что-то реальное?
← →
я (2011-09-12 10:06) [5]
> А ты уверен что RecNo обязан показывать что-то реальное?
я не в чем не уверен ) никто ж ничего не рассказывает )
← →
sniknik © (2011-09-12 10:34) [6]> я не в чем не уверен ) никто ж ничего не рассказывает )
F1, вполне понятен и категоричен по этому поводу. черпай уверенность оттуда.
← →
я (2011-09-12 11:24) [7]не могу, у меня не работает справка )
← →
Inovet © (2011-09-12 11:28) [8]> [7] я (12.09.11 11:24)
> не могу, у меня не работает справка
Как можно без справки что-то делать. Чини.
← →
sniknik © (2011-09-12 12:11) [9]не знание закона не освобождает от ответственности. и "был пьян" не является оправданием. а как бы наоборот...
"не работает справка" также. фактически это скорее призыв "забаньте меня", чем повод помогать.
← →
я (2011-09-12 15:54) [10]
> не знание закона не освобождает от ответственности. и "был
> пьян" не является оправданием. а как бы наоборот...
>
> "не работает справка" также. фактически это скорее призыв
> "забаньте меня", чем повод помогать.
Пришел. Нахамил. Ничем не помог. Забанил. Кросавчег.
Вообщем когда узнаю ответ на вопрос по второму пункту напишу сам. А то среди местных "экспертов" завелись троли.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c