TBlobField Size Error?

Discussion of open issues, suggestions and bugs regarding UniDAC (Universal Data Access Components) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
supersk
Posts: 3
Joined: Mon 18 Jan 2010 01:51

TBlobField Size Error?

Post by supersk » Mon 18 Jan 2010 02:19

environment: C++Builder 2007, Unidac 3.0 ,MSAccess
The following code when using ADO Connection is right, but Using Unidac is wrong.

Code: Select all

Save Image:
		dtmdlCDIPS->untblTempl->Active = true;
	dtmdlCDIPS->untblTempl->Append();

	dtmdlCDIPS->untblTempl->FieldByName("TEMPLNAME")->AsString = rzcbb1->Text;
	dtmdlCDIPS->untblTempl->FieldByName("TEMPLNO")->AsString = rzedt1->Text;
	dtmdlCDIPS->untblTempl->FieldByName("ADDDATE")->AsDateTime = Date();
	dtmdlCDIPS->untblTempl->FieldByName("TEMPLTOP")->AsInteger = TemplTop;
	dtmdlCDIPS->untblTempl->FieldByName("TEMPLLEFT")->AsInteger = TemplLeft;
	dtmdlCDIPS->untblTempl->FieldByName("TEMPLHEIGHT")->AsInteger = TemplHeight;
	dtmdlCDIPS->untblTempl->FieldByName("TEMPLWIDTH")->AsInteger = TemplWidth;
	//生成Memo对象
	TMemoryStream *MS1, *MS2;
	MS1 = new TMemoryStream;
	MS2 = new TMemoryStream;

	//将轮廓图加入
	GetJpegStream(imgen2->IEBitmap->VclBitmap,MS1);
	//将数组加入
	for (int i = 0; i Write(&TemplData[i][j], sizeof(float));
		}
	}
	MS2->Position = 0;
	int size1 = MS1->Size;
	TBlobField *dstBlob;
	dstBlob = (TBlobField*)dtmdlCDIPS->untblTempl->FieldByName("TEMPLIMAGE");
	dstBlob->LoadFromStream(MS1);
	((TBlobField *)dtmdlCDIPS->untblTempl->FieldByName("TEMPLSOURCE"))->LoadFromStream(MS2);
	dtmdlCDIPS->untblTempl->Post();
	dtmdlCDIPS->untblTempl->Active = false;

	MS2->Free();
	MS1->Free(); 
Read Code:
	AnsiString QueryStr;
	QueryStr += "SELECT TEMPLIMAGE FROM TEMPLDB WHERE TEMPLNAME = ";
	QueryStr += QuotedStr(Trim(rzdbedt1->Text)) + " AND TEMPLNO = ";
	QueryStr += QuotedStr(Trim(rzdbedt2->Text));

	dtmdlCDIPS->unqrytempl->Close();
	dtmdlCDIPS->unqrytempl->SQL->Clear();
	dtmdlCDIPS->unqrytempl->SQL->Add(QueryStr);
	dtmdlCDIPS->unqrytempl->Open();
	if (dtmdlCDIPS->unqrytempl->RecordCount > 0) {
		TMemoryStream *MS1;
		MS1 = new TMemoryStream;
		((TBlobField *)dtmdlCDIPS->unqrytempl->FieldByName("TEMPLIMAGE"))->SaveToStream(MS1);
		MS1->Position = 0;
		int size2 = MS1->Size;
		MS1->SaveToFile("C:\1.jpg");
		TJPEGImage *MyJPEG;
		MyJPEG = new TJPEGImage;
		MyJPEG->PixelFormat = pf8bit;
		MyJPEG->LoadFromStream(MS1);
		imgenvwTempl->Bitmap->Assign(MyJPEG);
		imgenvwTempl->Update();
		MS1->Free();
		MyJPEG->Free();
	}

Attention: for the same image, size1 does not equal to size2, why?

Plash
Devart Team
Posts: 2844
Joined: Wed 10 May 2006 07:09

Post by Plash » Mon 18 Jan 2010 08:44

What field type are you using in the database to store the image?

supersk
Posts: 3
Joined: Mon 18 Jan 2010 01:51

Memo

Post by supersk » Tue 19 Jan 2010 01:04

I used Access DB and Image type is memo.

Post Reply