Programming/MFC2008. 9. 6. 16:30

ADO를 이용한 삽입, 삭제, 업뎃



void CTestADODlg::OnButton3()
{
 // DAO (Access2000) 이후 버젼 리딩가능
 AfxGetModuleState()->m_dwVersion = 0x0601;
 
 // COM이나 OLE를 라이브러리를 초기화한다.
 AfxOleInit();
 
 
 // ADO에 Connection 객체 사용
 _ConnectionPtr pConn;  
 HRESULT hr;
 BOOL IsConnectionOpen = FALSE;
 
 // DB를 열기 위한 예의상 구문으로 인식하고 넘어가자.
 
 CoInitialize(NULL);
 hr = pConn.CreateInstance(__uuidof(Connection));
 //pConn->CursorLocation =adUseClient;
 
 // 데이터베이스 접속
 if(SUCCEEDED(hr))
 {
  // Provider: 여기서는 mdb를 사용하므로, Microsoft.Jet.OLEDB.4.0를 선택한다.
  // Data위치: c:\\TestDb.mdb
  _bstr_t strMode("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= d:\\dbTest.mdb;");
  try
  {
   hr = pConn->Open(strMode,_bstr_t(L""),_bstr_t(L""), -1);
  }
  catch(_com_error& e)
  {
   AfxMessageBox(e.Description());
   AfxMessageBox(e.ErrorMessage());  
  }
 }
 if(SUCCEEDED(hr))
 {
  AfxMessageBox("데이터베이스 연결됨");
  IsConnectionOpen = TRUE;
 }
 
 // 데이터베이스에 연결이 되었다면,
 if(IsConnectionOpen)
 {
  _RecordsetPtr pRs;
  hr = pRs.CreateInstance(__uuidof(Recordset));
  _bstr_t strQuery("Select * from tblTest");
     
  // INSERT 구문
  try
  {
   // 테이블명(tbltest)에서 필드ID에 200, Checker에 300을 삽입한다.
   _bstr_t bstrQuery("INSERT INTO tbltest(ID,Checker) values('200','300')");
   
   // 0L에서 0은 int형 0L은 long형을 의미한다.
   // long형이 int 보다 더 큰수 저장가능

   _variant_t valValue(0L);


   // 새로운 트랜젝션을 시작한다.
   pConn->BeginTrans();
   pRs = pConn->Execute((_bstr_t)bstrQuery, &valValue, adOptionUnspecified);


   // 현재 트랜젝션에서 일어난 변경을 저장하고 트랜젝션을 닫고
   // 새로운 트랜젝션을 시작한다.
   pConn->CommitTrans();
 
  }
  catch(_com_error& e)
  {
   AfxMessageBox(e.Description());
   AfxMessageBox(e.ErrorMessage());  
  }
 
 
  // UPDATE 구문
  try
  {
   // 필드명 ID의 값이 2인 모든 곳의 필드명 ID, Checker의 필드값을 변경
   _bstr_t bstrQuery2("UPDATE tbltest SET ID = 2000 , Checker = 300 WHERE ID = 2 ");
   _variant_t valValue2(0L);
   pConn->BeginTrans();
   pConn->Execute((_bstr_t)bstrQuery2, &valValue2, adOptionUnspecified);
   pConn->CommitTrans();
 
  }
  catch(_com_error& e)
  {
   AfxMessageBox(e.Description());
   AfxMessageBox(e.ErrorMessage());  
  }
 

  // DELETE 구문
  try
  {
   // ID가 200인 tbltest 테이블 내의 Record를 삭제.
   _bstr_t bstrQuery3("DELETE FROM tbltest WHERE ID = 200 ");
   _variant_t valValue3(0L);


  pConn->BeginTrans();
   pConn->Execute((_bstr_t)bstrQuery3, &valValue3, adOptionUnspecified);
   pConn->CommitTrans();
 
  }
  catch(_com_error& e)
  {
   AfxMessageBox(e.Description());
   AfxMessageBox(e.ErrorMessage());  
  }
 }
}

Posted by skensita