ADO не идет
От: Satrap  
Дата: 04.03.02 07:58
Оценка:
Помогите ADO чайнику.
Вот такой кусок кода прекрасно работает на компьютере, где он компилировался VC++(6.0),
но при переносе на другую рабочую станцию попытка открыть набор записей бросает
исключение.

//-----------------------------------------------------------
try{

    m_pConnection.CreateInstance(__uuidof(Connection));
    m_pRecordset.CreateInstance(__uuidof(Recordset));
        
    m_pConnection->Open(
       _T("Provider=SQLOLEDB.1;Data Source=PASHA;"
    "Initial Catalog=COMMON;UID=sa;PWD=;"),"","",-1);

    m_pRecordset->Open("SELECT DISTINCT inn FROM closed",
    theApp.m_pConnection.GetInterfacePtr(),
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);
...
//-----------------------------------------------------------

на "другой" станции установлен MDAC 2.0 с того-же диска, что и VC++.
Аналогичный по смыслу кусок на шаблонах OLE-DB работает и там и там.
Re: ADO не идет
От: retalik www.airbandits.com/
Дата: 04.03.02 08:40
Оценка: 2 (1)
Здравствуйте Satrap, Вы писали:

S>Помогите ADO чайнику.

S>Вот такой кусок кода прекрасно работает на компьютере, где он компилировался VC++(6.0),
S>но при переносе на другую рабочую станцию попытка открыть набор записей бросает
S>исключение.

S>
S>//-----------------------------------------------------------
S>try{

S>    m_pConnection.CreateInstance(__uuidof(Connection));
S>    m_pRecordset.CreateInstance(__uuidof(Recordset));
S>


а что говорит
catch(_com_error &e)
{
    MessageBox(0, e.Source()+" "+e.Description(), "Ошибка", MB_OK);
}

?

S>
S>    m_pConnection->Open(
S>       _T("Provider=SQLOLEDB.1;Data Source=PASHA;"
S>    "Initial Catalog=COMMON;UID=sa;PWD=;"),"","",-1);

Может, на той машине, где VC, установлена (и импортируется) ADO посвежее?

S>    m_pRecordset->Open("SELECT DISTINCT inn FROM closed",
S>    theApp.m_pConnection.GetInterfacePtr(),
S>    adOpenDynamic,
S>    adLockOptimistic,
S>    adCmdText);
S>...
S>//-----------------------------------------------------------
S>

S>на "другой" станции установлен MDAC 2.0 с того-же диска, что и VC++.
S>Аналогичный по смыслу кусок на шаблонах OLE-DB работает и там и там.
Успехов,
Виталий.
Re[2]: ADO не идет
От: Аноним  
Дата: 06.03.02 09:12
Оценка:
Здравствуйте retalik, Вы писали:

R>а что говорит

R>
R>catch(_com_error &e)
R>{
R>    MessageBox(0, e.Source()+" "+e.Description(), "Ошибка", MB_OK);
R>}
R>

R>?
Выглядит вот так:
    catch(_com_error *e)
    {
        CString Error = e->ErrorMessage();
        AfxMessageBox(e->ErrorMessage());
    }
    catch(...)
    {
        MessageBox(_T("Исключение не обработано"));
    }

А при ответе, к сожалению, неизменно выбирает второй обработчик, а чего там ловить
я увы не представляю.
Большое спасибо.
Re[3]: ADO не идет
От: retalik www.airbandits.com/
Дата: 06.03.02 12:27
Оценка: 3 (1)
Здравствуйте Аноним, Вы писали:

А>Здравствуйте retalik, Вы писали:


А>Выглядит вот так:

А>
А>    catch(_com_error *e)
А>    {
А>        CString Error = e->ErrorMessage();
А>        AfxMessageBox(e->ErrorMessage());
А>    }
А>    catch(...)
А>    {
А>        MessageBox(_T("Исключение не обработано"));
А>    }
А>

А>А при ответе, к сожалению, неизменно выбирает второй обработчик, а чего там ловить

И это правильно! (с) не мое.
Так как _com_error* и _com_error — это разные типы, а при ошибке смарт-пойнтеры неизменно бросают _com_error по значению, то первый обработчик и не выбирается.
Измени обработчик на _com_error&, и он неизбежно сработает, клянусь моей треуголкой! (с) не мое.
PS: и еще Description() обязательно выводи, может помочь.
Успехов,
Виталий.
Re[4]: ADO не идет
От: Satrap  
Дата: 10.03.02 13:21
Оценка:
Здравствуйте retalik, Вы писали:

R>Измени обработчик на _com_error&, и он неизбежно сработает, клянусь моей треуголкой! (с) не мое.

R>PS: и еще Description() обязательно выводи, может помочь.

Обработчик сработал, но упорно возвращал пустые строки даже на провоцируемые ошибки, а вот установка ADO 2.6
сняла вопрос в принципе!!!!! Бальшое пасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.