TBlobField Size Error?
Posted: 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.
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?