Page 1 of 1

Inserting JPG into BLOB

Posted: Mon 21 Sep 2009 14:09
by CHERTS
Hi all,

I use ODAC 6.8.0.0.48 for uploading images to database Oracle 10g

Table for uploading images:

Code: Select all

CREATE TABLE sgn$storage
    (id                             VARCHAR2(15) NOT NULL,
    num                            VARCHAR2(3) NOT NULL,
    text                           VARCHAR2(2000),
    usr                            VARCHAR2(15) NOT NULL,
    ext                            VARCHAR2(32),
    date_b                         DATE DEFAULT sysdate,
    pic                            BLOB)
  PCTFREE     10
  PCTUSED     40
  INITRANS    1
  MAXTRANS    255
  TABLESPACE  users
  STORAGE   (
    INITIAL     65536
    MINEXTENTS  1
    MAXEXTENTS  2147483645
  )
  LOB ("PIC") STORE AS SYS_LOB0000003334C00000$$
  (
  TABLESPACE  users
  STORAGE   (
    INITIAL     65536
    MINEXTENTS  1
    MAXEXTENTS  2147483645
  )
   NOCACHE LOGGING
   CHUNK 8192
   PCTVERSION 10
  )
Borland C++ Builder 6.0 code:

Code: Select all

void __fastcall TForm1::Button4Click(TObject *Sender)
{
        AnsiString img;
        TMemoryStream *OraImgStream_Insert = new TMemoryStream();
        OraImgStream_Insert->Clear();
        OraImgStream_Insert->Position = 0;
        Bitmap->SaveToStream(OraImgStream_Insert);
        OraQuery1->SQL->Clear();
        OraQuery1->Options->TemporaryLobUpdate = true;
        OraQuery1->SQL->Text = "insert into sgn$storage (id, num, text, usr, ext, date_b, pic) values ('001','2','Images 1','001','JPG',sysdate,'"+img+"')";
        OraQuery1->ParamByName('img')->LoadFromStream(OraImgStream_Insert, ftOraBlob);
        OraQuery1->Execute(); 
        OraImgStream_Insert->Free();
}
When you click on the 'Button4Click', a window with an error:

Parameter '6909287' not found

What is my mistake?

Re: Inserting JPG into BLOB

Posted: Tue 22 Sep 2009 04:59
by CHERTS
working code: :)

OraStoredProc1:

Code: Select all

  object OraStoredProc1: TOraStoredProc
    StoredProcName = 'SCAN_IMG_INSERT'
    SQL.Strings = (
      'begin'
      '  SCAN_IMG_INSERT(:PID, :PUSR, :PIMG);'
      'end;')
    Left = 464
    Top = 104
    ParamData = 
    CommandStoredProcName = 'SCAN_IMG_INSERT:0'
  end
Oracle procedure:

Code: Select all

CREATE OR REPLACE PROCEDURE SCAN_IMG_INSERT (
    pID in varchar2,
    pUSR in varchar2,
    pIMG in OUT BLOB) is
begin
    insert into sgn$storage (id, num, text, usr, ext, date_b, pic) values (pID,'1','Images Scaner',pUSR,'JPG',sysdate,pIMG);
end;
Borland C++ Builder 6 code:

Code: Select all

void __fastcall TForm1::Button4Click(TObject *Sender)
{
        TMemoryStream *OraImgStream_Insert = new TMemoryStream();
        TJPEGImage * Jpg = new TJPEGImage;
        OraImgStream_Insert->Clear();
        OraImgStream_Insert->Position = 0;
        Jpg->CompressionQuality = 80;
        try {
                Jpg->Assign(Bitmap);
                Jpg->SaveToStream(OraImgStream_Insert);
                OraStoredProc1->Options->TemporaryLobUpdate = true;
                OraStoredProc1->Params->ParamByName("PID")->AsString = "2645247";
                OraStoredProc1->Params->ParamByName("PUSR")->AsString = "2645247";
                OraStoredProc1->Params->ParamByName("PIMG")->AsOraBlob->LoadFromStream(OraImgStream_Insert);
                OraStoredProc1->ExecProc();
        }
        __finally {
                Jpg->Free();
                OraImgStream_Insert->Free();
        }

}
Topic can be closed!