Page 1 of 1

More BLOB problems

Posted: Mon 13 Jun 2005 13:02
by Doug Hurst
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!");
}

Posted: Thu 16 Jun 2005 15:43
by Alex
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.

More BLOB problems

Posted: Mon 27 Jun 2005 14:19
by Doug Hurst
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.

Posted: Fri 01 Jul 2005 15:10
by Alex
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.