[ alex @ 27.02.2002. 09:46 ] @
Pozdrav svima,

Ranije sam pisao o ovom mom problemu u okviru teme o portabilnosti koda, ali sam vam ostao duzan podrobnijeg objasnjenja, jer me problem jos uvek muci.

Naime, radim na poprilicno velikom C++ informacionom sistemu i razvijam ga na Windows2000 uz VisualC++ 6.0. Aplikacija za pristup bazi koristi DAO (pristupa Access mdb fajlu), iako sam poceo da portujem sve na ADO (s ciljem da promeni ciljna baza), medjutim, pritisnut rokovima, portovanje na ADO ce morati da saceka sledecu verziju.

U cemu je problem? Pod Windows2000, program korektno pristupa bazi i program funkcionise bez problema, dok pokretanjem istog programa na Windows98 program puca prilikom otvaranja Recordset-a.

Tok programa je sledeci - program prilikom startovanja otvara bazu i otvara recordset sa lozinkama i korisnicima (to radi isto dobro na W2k i W98), a zatim nakon logovanja otvaraju se ostali recordset-ovi. Na W2k nadalje sve funkcionise sasvim ok, dok pod W98 program puca uz gresku sa KERNEL32.DLL

Konkretan deo koda koji obavlja otvaranje recordset-a je sledeci:
Code:

BOOL CBaseSet::OpenSet(CString ostr_Sort, CString ostr_Filter, int nOptions, int nOpenType, LPCTSTR sqlStatement)
{
    m_nOpenType        =    nOpenType;
    m_nOptions        =    nOptions;
    m_sqlStatement    =    NULL;

    if (!IsOpen())
    {
        if (!m_sqlStatement){
            if (ostr_Filter!="")
                m_strFilter = ostr_Filter;
            if (ostr_Filter=="")
                m_strFilter="";
        }
        if (ostr_Sort!="") 
            m_strSort = ostr_Sort;
        if ((ostr_Sort==" "))
            m_strSort="";
        try{
            Open(m_nOpenType, m_sqlStatement, m_nOptions); // Win98 problem!!!
        }
        catch(CDaoException *e)
        {
            DaoError(e, "Open");
            e->Delete();
            return FALSE;
        }
        catch(CMemoryException *m) {
            AfxMessageBox("Memory Exception!");
            m->Delete();
            return FALSE;
        }
        m_RecordCount=CDaoRecordset::GetRecordCount();
        SetLockingMode(FALSE);
        BOOL b = GetLockingMode();
        return TRUE;
    }
    else
    {
           return TRUE;
    }
}


Kao sto se vidi u kodu, Win98 problem je u Open funkciji koja je member CDAORecordset objekta. Debagovanjem sam utvrdio da je u toj funkciji problem.

Inace, na oba sistema koristi se DAO3.6 (koristio sam DAO3.5, medjutim imao sam isti problem).

Ne uspevam da resim ovaj problem jer mi je totalno nejasan. Napominjem da je aplikacija kompletno vec bila napisana, a da sam ja zaduzen za maintenance i razvoj novih opcija i features-a programa (poprilicno odvratan posao).

Ukoliko neko ima neke pointere ili je imao neka slicna iskustva, neka mi se obavezno javi!

Hvala unapred svima!

Pozdrav,
alex.
[ leka @ 11.04.2002. 02:32 ] @
Očekivao sam da se VC++ i Microsoft majstori jave i pomognu alex... Izneveriše me! :)
[ alex @ 11.04.2002. 11:04 ] @
Ma nema veze, resio sam problem jos odavno.. :)

Postovacu resenje kad dodjem u firmu cisto da kompletiram temu.

Poz, alex.