Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.005 c
15-1314396395
alexdn
2011-08-27 02:06
2011.12.18
Программа для видео


2-1315223947
vasiliy87
2011-09-05 15:59
2011.12.18
Вопрос о параметрах интефейсных функций


1-1277470105
harisma
2010-06-25 16:48
2011.12.18
Окно StayOnTop


4-1252931571
MultIfleX
2009-09-14 16:32
2011.12.18
bluetooth


6-1248173569
Michael
2009-07-21 14:52
2011.12.18
smtp/pop3 без компонентов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский