|
ADO Wrapper 클래스를 만들고 있는데요..
필요할 때 불러다 쓰기만 하려구 하는데요.. 수월하지가 않네요..
다른 것은 그냥 그럭저럭 만들었는데.. 저장 프로시져 호출하는
메소드를 만들고 실행하는 것이 그리 수월치가 않습니다.
저는 그냥 저장 프로시져 실행하는 메소드에 TParameters 객체만
동적으로 생성해서 인자로 넘겨주고 실행하면 결과를 받을
생각인데..그렇게 만들고 실행하면 Access Violation이 나는데..
어디가 잘못된 것인지..전혀 감을 잡지 못하고 있습니다.
Collection 객체를 어떻게 쓰는 지 몰라서 그런 것 같은데요..
아래의 소스를 보시고 조언을 좀 해주세요.. 참고로, 저장 프로시져는
결과값만 리턴하고 결과셋(ResultSet)은 가지지 않습니다.
// 호출하는 루틴
void __fastcall TForm1::Button10Click(TObject *Sender)
{
OleVariant Value;
TParameters *pParameters = new TParameters(NULL,NULL);
pParameters->Clear();
pParameters->CreateParameter("ActionFlag",ftString,pdInput,0,NULL); // <= Access Violation 발생
pParameters->CreateParameter("CarID",ftInteger,pdInput,0,NULL);
pParameters->CreateParameter("ActionResult",ftInteger,pdOutput,0,&Value);
pParameters->ParamByName("ActionFlag")->Value = "U"; // UPDATE
pParameters->ParamByName("CarID")->Value = 3;
bool bResult = m_pMyAdo->ExecProc("sp_cCarSetup_UpdateDelete",pParameters);
int iResult = pParameters->FindParam("ActionResult")->Value;
}
//-------------------------------------------------------------------------
// ADO Wrapper class의 ExecProc 메소드 부분
//-------------------------------------------------------------------------
bool MyAdo::ExecProc(AnsiString sProcName, TParameters *pParameters)
{
if ( m_bOpen == false ) return m_bOpen;
try {
m_pProc->ProcedureName = WideString(sProcName);
m_pProc->Parameters = pParameters;
m_pProc->ExecProc();
} catch (EDatabaseError &e) {
MessageBox(NULL, e.Message.c_str(),"ADO Connection",MB_OK);
m_bOpen = false;
}
return m_bOpen;
}
|