Oracle(поле Blob) + Delphi проблема с отображением фото в DBImage

Nedr
Дата: 24.06.2009 13:44:24
1)Есть орокловая база, в ней табличка с полем foto d котором лежат картинки в двоичном виде.
2)Есть WEB сервис на asp C#
3)GUI приложение на Delphi обращается к WS в ответ получает XMLDataSet, через дельфийский компонент Gekko получаем ту же DataSet в струтктуре Delphi, связываем ее с DBGrid, все нормально отображается. Затем кидаю на форму DBImage связываю ее с гридом, в результае получаю вместо фото, в DBImage, надпись (foto) т.е DataField.

PS
Пытаюсь сделать через поток, то же ругается!!!
procedure TForm1.StreamImage(Sender: TDataSet);
                          var
                          striamImage: TStream;
                          Bitmap: TBitmap;

begin
if Sender <> nil then
begin

  striamImage:= TCustomClientDataSet.Create(DataSetImage.DataSetField('foto'),bmRead);
  Sender.First;
  striamImage:= DataSetImage.CreateBlobStream(DataSetImage.DataSetField('foto'),bmRead);
  Bitmap:= TBitmap.Create;
  Bitmap.LoadFromStream(striamImage);
  DBImage3.Picture.Graphic:= Bitmap;
end;
end;
ддддддд
Дата: 24.06.2009 14:07:38
На какой строке ругается
и какую ошибку пишет?
Nedr
Дата: 24.06.2009 14:19:31
Последний вариант кода:
procedure TForm1.StreamImage(Sender: TDataSet);
                          var
                          striamImage: TStream;
                          Bitmap: TBitmap;

begin
if Sender <> nil then
begin
  Sender.First;
  striamImage:= DataSetImage.CreateBlobStream(DataSetImage.DataSetField('foto'),bmRead);
  Bitmap:= TBitmap.Create;
  Bitmap.LoadFromStream(striamImage);
  DBImage3.Picture.Graphic:= Bitmap;
end;
end;

Ругается на
  striamImage:= DataSetImage.CreateBlobStream(DataSetImage.DataSetField('foto'),bmRead);
Nedr
Дата: 24.06.2009 14:25:29
Переделал как:
striamImage:= DataSetImage.CreateBlobStream(DataSetImage.FieldByName('foto'),bmRead);
Пишет ошибку:

Access violation at address XXXXXXXX in module midas.dll
ддддд
Дата: 24.06.2009 14:54:19
надо создать поток вначале.
striamImage:= TStream.Create;
Nedr
Дата: 24.06.2009 15:12:46
Создал. Но нечего не изменилось....
ддддд
Дата: 24.06.2009 15:44:36
значит надо искать здесь

DataSetImage.DataSetField('foto')

что за компонент DataSetImage ?

и вообще непонятно зачем это:

  striamImage:= TCustomClientDataSet.Create(DataSetImage.DataSetField('foto'),bmRead);
  Sender.First;
Nedr
Дата: 24.06.2009 15:57:59
Последний вариант!:
procedure TForm1.StreamImage(Sender: TDataSet);
                          var
                          striamImage: TStream;
                          Bitmap: TBitmap;

begin
if Sender <> nil then
begin
  Sender.First;
  striamImage:= TStream.Create;
  striamImage:= DataSetImage.CreateBlobStream(DataSetImage.FieldByName('foto'),bmRead);
  Bitmap:= TBitmap.Create;
  Bitmap.LoadFromStream(striamImage);
  DBImage3.Picture.Graphic:= Bitmap;
end;
end;

DataSetImage - эту дасет возвращает компанент GekkoDotNetDataSet(переводит XMLDataSet в дельфийскую датасет)

Ниже как он это делает:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
      GekkoDotNetDataSet1.Get;
      CreateDataGrids(GekkoDotNetDataSet1);
end;

procedure TForm1.StreamImage(Sender: TDataSet);
                          var
                          striamImage: TStream;
                          Bitmap: TBitmap;

begin
if Sender <> nil then
begin
  Sender.First;
  striamImage:= TStream.Create;
  striamImage:= DataSetImage.CreateBlobStream(DataSetImage.FieldByName('foto'),bmRead);
  Bitmap:= TBitmap.Create;
  Bitmap.LoadFromStream(striamImage);
  DBImage3.Picture.Graphic:= Bitmap;
end;
end;

procedure TForm1.CreateDataGrids(Sender: TGekkoDotNetDataSet);
                          var
                          Iter : Integer;
begin
      if Sender <> nil then
       begin
          for Iter:= 0 to Sender.TableCount - 1 do
          begin
            DataSourseGrid.DataSet:= Sender.DataTable[Iter];
            //DataSetImage.Assign(Sender.DataTable[Iter]);
            DataSetImage:= Sender.DataTable[Iter];
            DataSourseImage.DataSet:= DataSetImage;
          end;
            DataSourseImage.DataSet:= DataSetImage;
       end;

end;


procedure TForm1.GekkoDotNetDataSet1RequestGetInvocation(Sender: TObject);
var
wsSoap : WebService1Soap;
begin
     wsSoap:=  GekkoDotNetDataSet1 as WebService1Soap;
     wsSoap.HelloWorld();
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
StreamImage(DataSetImage);
end;
ддддд
Дата: 24.06.2009 16:13:15
1.Не нашел где создается DataSetImage
2.Если он все-таки создается и передается в качестве параметра, то к нему надо обращаться как к входному параметру
т.е. заменить на Sender
striamImage:= Sender.CreateBlobStream(DataSetImage.DataSetField('foto'),bmRead);
дддд
Дата: 24.06.2009 16:14:35
striamImage:= DataSetImage.CreateBlobStream(Sender.DataSetField('foto'),bmRead);