SOL9 2.0 Class: ADOXTables

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * ADOXTables.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL9
// 2009/06/07 Added a new method append(__in ADOXTable& table), which is used
// to append an ADOXTable object to an ADOXTables object

// 2009/06/07 Added a new method find(__in _bstr_t name, __out ADOXTable& table), which is used
// to find an ADOXTable object matching to name from an ADOXTables object

// 2009/06/07 Added a new method remove(__in _bstr_t name), which is used
// to remove an ADOXTable object matching to name from an ADOXTables object

///////////////////////////////
#pragma once

#include <sol/sql/ADOCollection.h>
#include <sol/sql/ADOXTable.h>

namespace SOL {

class ADOXTables :public ADOCollection {


public:
    ADOXTables()
    {
    }

public:
    ~ADOXTables()
    {
    }

public:
    HRESULT createInstance()
    {
        return ADOObject::createInstance(__uuidof(ADOX::Tables));
    }

public:
    void set(__in ADOX::TablesPtr pFs)
    {
        setObject((IDispatchPtr)pFs);
    }

public:
    ADOX::TablesPtr getTablesPtr()
    {
        return (ADOX::TablesPtr)getObject();
    }

public:
     bool getItem (
        __in const _variant_t& item,
        __out ADOXTable& table)
    {
        bool rc = false;
        ADOX::_TablePtr ptr = getItem(item);
        if (ptr) {
            table.set(ptr);
            rc = true;
        } else {
            throw Exception(E_FAIL, "%s: %s", "E_FAIL", __FUNCTION__);
        }
        return rc;
    }

public:
    ADOX::_TablePtr getItem(
            __in const _variant_t& item)
    {
        return getTablesPtr()->GetItem(item);
    }

public:
    //2009/06/07
    HRESULT append(
        __in ADOXTable& table)
    {
        HRESULT hr = E_FAIL;
        ADOX::_TablePtr ptr = table.getTablePtr();
        if (ptr) {
            _variant_t item((IDispatch *)ptr);
            hr = append(item);
            if (FAILED(hr)) {
                throw Exception(hr, "%s", __FUNCTION__);
            }
        }
        return hr;
    }

public:
    HRESULT append(
        __in const _variant_t& item)
    {
        return getTablesPtr()->Append(item);
    }

public:
    HRESULT remove(
        __in const _variant_t& item)
    {
        return getTablesPtr()->Delete(item);
    }

public:
    long getCount()
    {
        return getTablesPtr()->GetCount();
    }

public:
    HRESULT refresh()
    {
        HRESULT hr = getTablesPtr()->Refresh();
        if (FAILED(hr)) {
            throw Exception(hr, "%s", __FUNCTION__);
        };
        return hr;
    }

public:
    IUnknownPtr newEnum() 
    {
        return     getTablesPtr()->_NewEnum();
    }

public:
    //2009/06/07
    bool remove(__in _bstr_t tablename)
    {
        bool rc = false;
        long c = getCount();

        const char* ctablename =(const char*)tablename;
        ADOXTable table;
        for (long i = 0; i<c; i++) {
            _variant_t item(i);
            getItem(item, table);
            _bstr_t name = table.getName();
            const char* cname = (const char*)name;
            //compare two string(const char*) with case insentive
            if (_stricmp(ctablename, cname) ==0) {
                rc = getTablesPtr()->Delete(item);
                break;
            }
        }
        return rc;
    }

public:
    //2009/06/07
    bool find(__in _bstr_t tablename,
                __out ADOXTable& table)
    {
        bool rc = false;
        long c = getCount();

        const char* ctablename =(const char*)tablename;
        
        for (long i = 0; i<c; i++) {
            getItem(_variant_t(i), table);
            _bstr_t name = table.getName();
            const char* cname = (const char*)name;
            //compare two string(const char*) with case insentive
            if (_stricmp(ctablename, cname) ==0) {
                rc = true;
                break;
            }
        }
        return rc;
    }

public:
    void dump()
    {
        printf("<Tables>\n");
        long c = getCount();
        
        for (long i = 0; i<c; i++) {
            ADOXTable table;
            getItem(_variant_t(i), table);
            table.dump();
        }
        printf("</Tables>\n");

    }
};

}

Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.