(HBITMAP)ADODataSet->FieldByName("Image")->Value.byref ???
От: Аноним  
Дата: 01.03.04 08:38
Оценка:
Здравствуйте.
Не могу никак победить такую задачу.
В базе данных на MSSQL в таблице содержиться поле типа image, есть процедура, которая читает заданное поле и возвращает указатель varbinary(16), т.е. — это указатель на картинку.
В borland 5 передаю этот указатель обьекту TImage такой строкой:
Image1->Picture->Bitmap->Handle=(HBITMAP)proc->Parameters->ParamByName("@ptrImage")->Value.byref;
при отладке вижу , что указатель передается, но изображение все равно не отображается.

Вообще изощряюсь так, потому что у обьекта TImage есть свойство AutoSize, которого нет о обьекта TDBImage. Требуется чтоб картинки просматривались в заданном окне с соблюдением пропорций, а размер картинок возможен разный.
Поделитесь мыслями.
Заранее благодарен.
Re: (HBITMAP)ADODataSet->FieldByName("Image")->Value.byref ?
От: Sinclair Россия https://github.com/evilguest/
Дата: 01.03.04 11:29
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте.

А>Не могу никак победить такую задачу.
А>В базе данных на MSSQL в таблице содержиться поле типа image, есть процедура, которая читает заданное поле и возвращает указатель varbinary(16), т.е. — это указатель на картинку.
А почему ты собственно думаешь, что это указатель на картинку? Приведи-ка текст этой процедуры.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: (HBITMAP)ADODataSet->FieldByName("Image")->Value.byre
От: Beatseed Россия  
Дата: 01.03.04 23:42
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А почему ты собственно думаешь, что это указатель на картинку? Приведи-ка текст этой процедуры.



CREATE PROCEDURE ReadImage 
    @idKey1 smallint,
    @idKey2 smallint,
    @ptrImage varbinary(16) output
AS
begin
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRAN
--DECLARE @ptr varbinary(16)
SELECT @ptrImage = textptr(QueImage)
FROM QuestionImages 
WHERE idKey1=@idKey1 and
idKey2=@idKey2
READTEXT questionimages.queimage @ptrImage 0 10000
COMMIT TRAN
end


размер поставил от фонаря, пробовал с ним экспериментировать — толку не было.
Re[3]: (HBITMAP)ADODataSet->FieldByName("Image")->Value.byre
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.03.04 05:49
Оценка:
Здравствуйте, Beatseed, Вы писали:

B>размер поставил от фонаря, пробовал с ним экспериментировать — толку не было.

Ну еще бы! @textPtr — это указатель на текст в колонке. Он не имеет никакого смысла за пределами сервера. После ReadText тебе должен приехать dataset c единственной колонкой, в которой собственно и лежит заказанное тобой количество байт.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: (HBITMAP)ADODataSet->FieldByName("Image")->Value.byre
От: Beatseed Россия  
Дата: 02.03.04 09:04
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Beatseed, Вы писали:


B>>размер поставил от фонаря, пробовал с ним экспериментировать — толку не было.

S> Ну еще бы! @textPtr — это указатель на текст в колонке. Он не имеет никакого смысла за пределами сервера. После ReadText тебе должен приехать dataset c единственной колонкой, в которой собственно и лежит заказанное тобой количество байт.
хм, понял, и как теперь эти данные датасета передать обьекту TImage? И как тогда узнать размер поля типа image.
Re[5]: (HBITMAP)ADODataSet->FieldByName("Image")->Value.byre
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.03.04 10:26
Оценка:
Здравствуйте, Beatseed, Вы писали:
B>хм, понял, и как теперь эти данные датасета передать обьекту TImage?
читаем доку по TBlobField (это в VCL)
B>И как тогда узнать размер поля типа image.
и по функции DATALENGTH (это в SQL Books Online)
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: (HBITMAP)ADODataSet->FieldByName("Image")->Value.byre
От: Beatseed Россия  
Дата: 03.03.04 02:58
Оценка: 13 (1)
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Beatseed, Вы писали:

B>>хм, понял, и как теперь эти данные датасета передать обьекту TImage?
S>читаем доку по TBlobField (это в VCL)
B>>И как тогда узнать размер поля типа image.
S>и по функции DATALENGTH (это в SQL Books Online)
спасибо.
решил таки способом:
TADOBlobStream* stream;
stream=new TADOBlobStream((TBlobField*)ds->FieldByName("QueImage"),bmRead);
Image1->Picture->Bitmap->LoadFromStream(stream);
delete stream;

т.е. обмен можно через стримы и ч.з. файл, стрим конечно предпочтительней.
Re[7]: (HBITMAP)ADODataSet->FieldByName("Image")->Value.byre
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.03.04 04:42
Оценка:
Здравствуйте, Beatseed, Вы писали:
B>решил таки способом:
Молодец, правильно.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.