More BLOB problems

Discussion of open issues, suggestions and bugs regarding ODAC (Oracle Data Access Components) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
Doug Hurst
Posts: 5
Joined: Thu 19 May 2005 19:04
Location: Fairfax, VA 22031

More BLOB problems

Post by Doug Hurst » Mon 13 Jun 2005 13:02

The third time I try to call this, I get the following error

Project BBSConvertTransfer.exe raised exception class EAssertionFailed with message 'Assertion failure [D:\Projects\delphi\Dac\Source\MemData.pas. line 6307'. .....

The ODAC setup for the BLOB is bolded below. The BLOBs are binar files containing fingerprint images and are about 600K each in size.

try
{
OraStoredProc->Close();
OraStoredProc->Params->ParamValues["V_ALIAS_NAME_1"] = TMainForm::GetValueForCode(AnsiString("T2_AKA"), 0);
OraStoredProc->Params->ParamValues["V_ALIAS_NAME_2"] = TMainForm::GetValueForCode(AnsiString("T2_AKA"), 1);
OraStoredProc->Params->ParamValues["V_ALIAS_NAME_3"] = TMainForm::GetValueForCode(AnsiString("T2_AKA"), 2);
OraStoredProc->Params->ParamValues["V_ALIAS_NAME_4"] = TMainForm::GetValueForCode(AnsiString("T2_AKA"), 3);
OraStoredProc->Params->ParamValues["V_ALIAS_NAME_5"] = TMainForm::GetValueForCode(AnsiString("T2_AKA"), 4);
OraStoredProc->Params->ParamValues["V_ALIEN_NBR"] = TMainForm::GetValueForCode(AnsiString("T1_TCN"), 0).SubString(2,9);
OraStoredProc->Params->ParamValues["V_ASC_MACHINE_ID"] = TMainForm::GetValueForCode(AnsiString("2.905"), 0);
OraStoredProc->Params->ParamValues["V_ASC_QC_ID"] = TMainForm::GetValueForCode(AnsiString("2.919"), 0);
//OraStoredProc->Params->ParamValues["V_ASC_SITE_ID"] = TMainForm::GetValueForCode(AnsiString("2.916"), 0);
OraStoredProc->Params->ParamValues["V_ASC_USER_ID"] = TMainForm::GetValueForCode(AnsiString("2.906"), 0);
OraStoredProc->Params->ParamValues["V_CITY"] = TMainForm::GetValueForCode(AnsiString("2.911"), 0);
OraStoredProc->Params->ParamValues["V_CITZ_CODE"] = TMainForm::GetValueForCode(AnsiString("T2_CTZ"), 0);
OraStoredProc->Params->ParamValues["V_DOB_DT_1"] = TMainForm::GetValueForCode(AnsiString("T2_DOB"), 0);
OraStoredProc->Params->ParamValues["V_EFIPS_DAI"] = TMainForm::GetValueForCode(AnsiString("T1_DAI"), 0);
OraStoredProc->Params->ParamValues["V_EFIPS_TCN"] = TMainForm::GetValueForCode(AnsiString("T1_TCN"), 0);
OraStoredProc->Params->ParamValues["V_EFIPS_TCR"] = TMainForm::GetValueForCode(AnsiString("T1_TCR"), 0);
OraStoredProc->Params->ParamValues["V_EFIPS_TSN"] = TMainForm::GetValueForCode(AnsiString("2.904"), 0);
OraStoredProc->Params->ParamValues["V_EXT_SYS"] = TMainForm::GetValueForCode(AnsiString("2.902"), 0);
OraStoredProc->Params->ParamValues["V_EXT_SYS_ID"] = TMainForm::GetValueForCode(AnsiString("2.903"), 0);
OraStoredProc->Params->ParamValues["V_EYE_COLOR_CODE"] = TMainForm::GetValueForCode(AnsiString("T2_EYE"), 0);
OraStoredProc->Params->ParamValues["V_FBI_NAME"] = TMainForm::GetValueForCode(AnsiString("T2_NAM"), 0);
OraStoredProc->Params->ParamValues["V_FBI_NBR"] = TMainForm::GetValueForCode(AnsiString("T2_FBI"), 0);
OraStoredProc->Params->ParamValues["V_FBI_TCN"] = TMainForm::GetValueForCode(AnsiString("T1_TCN"), 0);
AnsiString as103 = TMainForm::GetValueForCode(AnsiString("1.03"), 0);
for (int i=10 ; i Params->ParamValues["V_FINGERPRINT" + IntToStr(i) + "_STATUS"] = "Y";
else
OraStoredProc->Params->ParamValues["V_FINGERPRINT" + IntToStr(i) + "_STATUS"] = "N";
}
for (int i=1 ; i Params->ParamValues["V_FINGERPRINT" + IntToStr(i) + "_STATUS"] = "Y";
else
OraStoredProc->Params->ParamValues["V_FINGERPRINT" + IntToStr(i) + "_STATUS"] = "N";
}
OraStoredProc->Params->ParamValues["V_FIRST_NAME"] = TMainForm::GetValueForCode(AnsiString("2.908"), 0);
AnsiString asFPSentDateProc = TMainForm::GetValueForCode(AnsiString("T1_TCN"), 0).SubString(11,8);
OraStoredProc->Params->ParamValues["V_FP_SENT_DT"] = asFPSentDateProc.SubString(5,2) + "/" +
asFPSentDateProc.SubString(7,2) + "/" +
asFPSentDateProc.SubString(1,4);
OraStoredProc->Params->ParamValues["V_FP_TAKEN_DT"] = TMainForm::GetValueForCode(AnsiString("T2_DPR"), 0);
OraStoredProc->Params->ParamValues["V_GENDER_CODE"] = TMainForm::GetValueForCode(AnsiString("T2_SEX"), 0);
OraStoredProc->Params->ParamValues["V_HAIR_COLOR_CODE"] = TMainForm::GetValueForCode(AnsiString("T2_HAI"), 0);
OraStoredProc->Params->ParamValues["V_HEIGHT"] = TMainForm::GetValueForCode(AnsiString("T2_HGT"), 0);
OraStoredProc->Params->ParamValues["V_LAST_NAME"] = TMainForm::GetValueForCode(AnsiString("2.907"), 0);
OraStoredProc->Params->ParamValues["V_LOCAL_ORI_NBR"] = TMainForm::GetValueForCode(AnsiString("T1_ORI"), 0);
OraStoredProc->Params->ParamValues["V_MIDDLE_NAME"] = TMainForm::GetValueForCode(AnsiString("2.909"), 0);
OraStoredProc->Params->ParamValues["V_MIL_NBR"] = TMainForm::GetValueForCode(AnsiString(""), 0);
OraStoredProc->Params->ParamValues["V_MNU_NBR"] = TMainForm::GetValueForCode(AnsiString("T2_MNU"), 1);
OraStoredProc->Params->ParamValues["V_OCA_NBR"] = TMainForm::GetValueForCode(AnsiString("T2_OCA"), 0);
OraStoredProc->Params->ParamValues["V_POB_CODE"] = TMainForm::GetValueForCode(AnsiString("T2_POB"), 0);
OraStoredProc->Params->ParamValues["V_RACE_CODE"] = TMainForm::GetValueForCode(AnsiString("T2_RAC"), 0);
OraStoredProc->Params->ParamValues["V_REASON_FP_FORM"] = TMainForm::GetValueForCode(AnsiString("T2_RFP"), 0);
TDateTime copyTimeProc = globalDateTime->CurrentDateTime();
AnsiString asUniqueDateProc = copyTimeProc.FormatString("mm/dd/yyyy");
OraStoredProc->Params->ParamValues["V_RECEIVED_DATE"] = asUniqueDateProc;
OraStoredProc->Params->ParamValues["V_RECV_DT"] = TMainForm::GetValueForCode(AnsiString(""), 0);
OraStoredProc->Params->ParamValues["V_REGIONAL_ORI_NBR"] = TMainForm::GetValueForCode(AnsiString("T1_DAI"), 0);
OraStoredProc->Params->ParamValues["V_REJECT_DATA"] = TMainForm::GetValueForCode(AnsiString("T2_MSG"), 0);
OraStoredProc->Params->ParamValues["V_RESPONSE_TIME"] = 0.0; //TMainForm::GetValueForCode(AnsiString(""), 0);
OraStoredProc->Params->ParamValues["V_SCAN_TYPE"] = TMainForm::GetValueForCode(AnsiString("2.904"), 0).SubString(7,1);
OraStoredProc->Params->ParamValues["V_SEARCH_RESULT"] = TMainForm::GetValueForCode(AnsiString(""), 0);
OraStoredProc->Params->ParamValues["V_SENT_TO_FBI_FLAG"] = "Y";
OraStoredProc->Params->ParamValues["V_SSN_1"] = TMainForm::GetValueForCode(AnsiString("T2_SOC"), 0);
OraStoredProc->Params->ParamValues["V_STATE_CODE"] = TMainForm::GetValueForCode(AnsiString("2.912"), 0);
OraStoredProc->Params->ParamValues["V_STREET"] = TMainForm::GetValueForCode(AnsiString("2.910"), 0);
OraStoredProc->Params->ParamValues["V_SUBMIT_COUNT"] = "1";
OraStoredProc->Params->ParamValues["V_WEIGHT"] = StrToInt(TMainForm::GetValueForCode(AnsiString("T2_WGT"), 0));
OraStoredProc->Params->ParamValues["V_ZIP_CODE"] = TMainForm::GetValueForCode(AnsiString("2.913"), 0);
TOraLob *vBLOB = new TOraLob(OraSession->OCISvcCtx);
vBLOB->CreateTemporary(ltBlob);
vBLOB->LoadFromFile(asrFile);
vBLOB->WriteLob();
OraStoredProc->ParamByName("V_EFTS")->AsOraBlob = vBLOB;
OraStoredProc->Prepare();
if (OraStoredProc->Prepared == true)
OraStoredProc->ExecProc();
delete vBLOB;
}
catch(...)
{
StatusMemo->Lines->Add("Stored procedure failed!");
}

Alex
Posts: 655
Joined: Mon 08 Nov 2004 08:39

Post by Alex » Thu 16 Jun 2005 15:43

Please reduce your sample and specify your ODAC version, Oracle client/server versions also specify if you use net option. If it is possible send us small demo project to demonstrate your problem and include scripts to create server objects. Send message to ODAC support address.

Doug Hurst
Posts: 5
Joined: Thu 19 May 2005 19:04
Location: Fairfax, VA 22031

More BLOB problems

Post by Doug Hurst » Mon 27 Jun 2005 14:19

Latest ODAC version from odac555cb5.exe

TOraLob *vBLOB = new TOraLob(OraSession->OCISvcCtx);
vBLOB->CreateTemporary(ltBlob);
vBLOB->LoadFromFile(asrFile);
vBLOB->WriteLob();
OraStoredProc->ParamByName("V_EFTS")->AsOraBlob = vBLOB;
OraStoredProc->Prepare();
if (OraStoredProc->Prepared == true)
OraStoredProc->ExecProc();
delete vBLOB;

The code above is in a timer. The timer is enabled and it processes a record every time the timer is triggered.

It appears something is not being given back in memory. These BLOBs are about 600K - 700K in size. In a loop, after attempting to load about 3 of them, my program bombs. I have another program that is similar functionally, but puts in smaller BLOBs (5-6K). It lasts a lot longer, but still bombs eventually.

Alex
Posts: 655
Joined: Mon 08 Nov 2004 08:39

Post by Alex » Fri 01 Jul 2005 15:10

Sorry for not answering you before. The most possible cause of your problem is "delete vBLOB; " line in your code (it is my fault that I'm include C++ example with this line in one of mine forum topics). Please try to remove this line from your code, the vBLOB variable will be freed internally in OraStoredProc.Params.
If you encounter any other problems please inform us.

Post Reply