Exemplo n.º 1
0
Arquivo: doc.cpp Projeto: EdgarTx/wx
//----------------------------------------------------------------------------------------
bool MainDoc::OnInitODBC()
{
    wxChar Dsn[SQL_MAX_DSN_LENGTH+1];
    wxChar DsDesc[254+1]; // BJO20002501 instead of 512
    Temp0 = wxEmptyString;
    i_DSN = 0;       // Counter
    int i;
    //---------------------------------------------------------------------------------------
    // Initialize the ODBC Environment for Database Operations

    if (!DbConnectInf.AllocHenv())
    {
        return false;
    }

    //---------------------------------------------------------------------------------------
    const wxChar sep = 3; // separator character used in string between DSN and DsDesc
    wxSortedArrayString s_SortDSNList, s_SortDsDescList;
    // BJO-20000127
    // In order to have same sort result on both Dsn and DsDesc, create a 'keyed' string.
    // The key will be removed after sorting
    wxString KeyString;
    //---------------------------------------------------------------------------------------
    while (wxDbGetDataSource(DbConnectInf.GetHenv(), Dsn, SQL_MAX_DSN_LENGTH, DsDesc, 254))
    {
        i_DSN++;   // How many Dsn have we ?
        KeyString.Printf(_T("%s%c%s"),Dsn, sep, DsDesc);
        s_SortDSNList.Add(Dsn);
        s_SortDsDescList.Add(KeyString);
    }

    //---------------------------------------------------------------------------------------
    // Allocate n ODBC-DSN objects to hold the information
    // Allocate n wxDatabase objects to hold the column information
    p_DSN = new DSN[i_DSN];  //BJO
    db_Br = new BrowserDB[i_DSN];
    for (i=0;i<i_DSN;i++)
    {
        KeyString = s_SortDsDescList[i];
        KeyString = KeyString.AfterFirst(sep);

        // ODBC-DSN object
        (p_DSN+i)->Dsn = s_SortDSNList[i];
        (p_DSN+i)->Drv = KeyString;
        (p_DSN+i)->Usr = wxEmptyString;
        (p_DSN+i)->Pas = wxEmptyString;
        Temp0.Printf(_T("%02d) Dsn(%s) DsDesc(%s)"),i,(p_DSN+i)->Dsn.c_str(),(p_DSN+i)->Drv.c_str());
        wxLogMessage(Temp0);

        // wxDataBase object
        (db_Br+i)->p_LogWindow = p_LogWin;
        (db_Br+i)->ODBCSource  = (p_DSN+i)->Dsn;
        (db_Br+i)->UserName    = (p_DSN+i)->Usr;
        (db_Br+i)->Password    = (p_DSN+i)->Pas;
        (db_Br+i)->pDoc        = this;
        (db_Br+i)->i_Which     = i;
    }

    DbConnectInf.FreeHenv();

    //---------------------------------------------------------------------------------------
    if (!i_DSN)
    {
        wxString message = _("No Dataset names found in ODBC!\n");
        message += _("           Program will exit!\n\n");
        message += _("                       Ciao");
        wxMessageBox( message,_("-E-> Fatal situation"));
        return false;
    }
    //---------------------------------------------------------------------------------------
    return true;
}