●ODBC

  1. □ODBCでデータベースにアクセスする見本(レコードセット)。

    CString strName;
    CString strCDE;
    CString strRow;

    m_pDb=new CDatabase(); ・・・1
    m_pDb->OpenEx("DSN=demo",0);・・・2


    CRecordset* pRc=new CRecordset(m_pDb);・・・3
    CString strSQL="SELECT NAME,SKU_CDE FROM SKUMST WHERE PSKU_CDE='" +strC+ "'";
    try{
    pRc->Open(CRecordset::snapshot,strSQL,CRecordset::readOnly);・・・4
    while (!pRc->IsEOF()){
    pRc->GetFieldValue("NAME",strName);・・・5
    pRc->GetFieldValue("SKU_CDE",strCDE);
    strRow = strName + "\t需要予測\t" + strCDE;
    m_fxgrid.AddItem(strRow,vtNone);
    pRc->MoveNext();・・・6
    }
    }
    catch(CDBException e){
    e.ReportError();
    delete(pRc);
    e.Delete();

    return 1;
    }
    pRc->Close();・・・7
    delete(pRc);

    m_pDb->Close();・・・8
    delete(m_pDb);

     

    1. 手順1:Cdatabaseクラスインスタンスの作成
    2. 手順2:データベースのオープン(引数はODBCデータソース)
    3. 手順3:CRcoudsetクラスインスタンスの作成
    4. 手順4:レコードセットのオープン(引数はSELECT文)
    5. 手順5:データの取り出し
    6. 手順6:レコードセットポインターの更新
    7. 手順7:レコードセットのクローズ
    8. 手順8:データベースのクローズ


  2. ODBCでデータベースにアクセスする見本(トランザクションの見本)。
  3. pos = g_mapRecord.GetStartPosition();
    m_pDb->BeginTrans();・・・1

    while(pos != NULL ){
    g_mapRecord.GetNextAssoc(pos,strKey,tabRecord);

    if(SQL(tabRecord)){
    m_pDb->Rollback・・・4
    return -1;
    }
    }
    m_pDb->CommitTrans();・・・3


    long CFFCapDlg::SQL(FilterMNT& tag)
    {


    //SQL 作成 tag.EditDiv 1:更新 、2:削除、3:追加

    CString strSQL;
    CString strUpd = "UPDATE FACTORYFILTERINGCAPABILITY SET ";
    CString strDel = "DELETE FACTORYFILTERINGCAPABILITY WHERE ";
    CString strIns = "INSERT INTO FACTORYFILTERINGCAPABILITY ";


    switch( tag.EditDiv ){
    case 1:
    strSQL = strUpd+"BUSINESSOPERATION_CODE='"+tag.BusinessOperation_CODE
    +"',SYSTEM_NO="+tag.System_NO
    +",BEVERAGETYPE_CODE='"+tag.BeverageType_CODE
    +"',MAXCAPABILITY="+tag.MaxCapability
    +",FILTERINGCAPABILITY="+tag.FilteringCapability
    +",PERCENTAGE="+tag.Percentage
    +",APSTARTDATE=to_date("+tag.APSatrtDate+" 'yy-mm-dd'),APENDDATE=to_date("+tag.APEndDate+" 'yy-mm-dd') WHERE BUSINESSOPERATION_CODE='"
    +tag.BusinessOperation_CODE+
    "' AND SYSTEM_NO="+tag.System_NO+
    " AND BEVERAGETYPE_CODE='"+tag.BeverageType_CODE+"'";

    break;
    case 2:
    strSQL = strDel+ "BUSINESSOPERATION_CODE='"+tag.BusinessOperation_CODE+
    "' AND SYSTEM_NO="+tag.System_NO+
    " AND BEVERAGETYPE_CODE='"+tag.BeverageType_CODE+"'";
    break;
    case 3:
    strSQL = strIns +" VALUES('"+tag.BusinessOperation_CODE+"',"
    +tag.System_NO+","
    +"'"+tag.BeverageType_CODE+"',"
    +tag.MaxCapability+","
    +tag.FilteringCapability+","
    +tag.Percentage
    +",to_date("+tag.APSatrtDate+" 'yy-mm-dd'),+to_date("+tag.APEndDate+" 'yy-mm-dd')";
    break;
    default:
    break;
    }

    try{
    m_pDb->ExecuteSQL(strSQL);・・・2
    }

    catch(CDBException e){
    e.ReportError();

    e.Delete();
    return -1;
    }

    return 0;
    }

     

    1. 手順1:トランザクションの開始
    2. SQLの実行
    3. コミット
    4. 更新処理中に失敗したらロールバック