Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.18;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1315307915
alexx777
2011-09-06 15:18
2011.12.18
сменить пользователя


15-1314908994
Юрий
2011-09-02 00:29
2011.12.18
С днем рождения ! 2 сентября 2011 пятница


2-1315318888
Gu
2011-09-06 18:21
2011.12.18
Dll метод


15-1314712629
Арксант
2011-08-30 17:57
2011.12.18
Загрузка в Image часть изображения


2-1315504959
x2088
2011-09-08 22:02
2011.12.18
Системное меню окна