안녕하세요~!
TADOQuery를 이용해서 다음과 같은 쿼리를 실행하려고 합니다. 실제 디비에서 조회를 해보면 데이터가 있는데 프로그램 상에서는 데이터 조회를 하지 못하네요... 혹시 이런경험 있으신 분 계신가요?
DB는 Access를 사용하고, Access 상에서는 아래 쿼리가 동작합니다.
SELECT TEXT_INDEX, TEXT_ITEM
FROM T_SCREEN_TEXT
WHERE SC_TYPE = 'C' AND SC_NAME LIKE '*35|*' ORDER BY TEXT_INDEX ASC;
LIKE 구문에 *35|* 대신에 35| 가 들어가면 일부데이터 조회가 됩니다... 파라메터에 * 이 들어가면 안되는거 같은데...
이유를 모르겠네요..;;
void __fastcall TFormMain::m_BtnTestClick(TObject *Sender)
{
/* SQL Query */
UnicodeString strSql;
strSql = "SELECT TEXT_INDEX, TEXT_ITEM FROM T_SCREEN_TEXT WHERE SC_TYPE = :scType AND SC_NAME LIKE :scName ORDER BY TEXT_INDEX ASC;";
UnicodeString strType, strName;
strType = L"C";
strName = strName.sprintf(L"%s|", L"*35*");
try {
/* Create the query. */
TADOQuery* pAdoQuery = new TADOQuery(this);
pAdoQuery->Connection = m_ADOConn;
//pAdoQuery->SQL->Text = strSql;
pAdoQuery->SQL->Add(strSql);
pAdoQuery->Parameters->ParamByName("scType")->Value = strType;
pAdoQuery->Parameters->ParamByName("scName")->Value = strName;
/* Set the query to Prepared--it will improve performance. */
pAdoQuery->Prepared = true;
try {
pAdoQuery->Active = true;
}
catch (EADOError& e) {
MessageDlg("Error while connecting", mtError,
TMsgDlgButtons() << mbOK, 0);
return;
}
m_AdvSgScreenText->RowCount = pAdoQuery->RecordCount + 1;
for(int i=0; iRecordCount; i++)
{
m_AdvSgScreenText->Cells[0][i+1] = pAdoQuery->FieldByName("TEXT_INDEX")->AsInteger;
m_AdvSgScreenText->Cells[1][i+1] = pAdoQuery->FieldByName("TEXT_ITEM")->AsString;
m_AdvSgScreenText->Cells[2][i+1] = pAdoQuery->FieldByName("TEXT_ITEM")->AsString;
m_AdvSgScreenText->Cells[4][i+1] = L"";
pAdoQuery->Next();
}
pAdoQuery->Active = false;
pAdoQuery->Free();
}
catch (EADOError *e) {
OutputDebugString(e->Message.c_str());
}
m_AdvSgScreenText->AutoSizeColumns(true, 10);
}
//---------------------------------------------------------------------------
|