powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / win32 приложение для Windos XP
8 сообщений из 8, страница 1 из 1
win32 приложение для Windos XP
    #38579403
Миха неопытный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени.

Пытаюсь написать win32-приложение (в MS Visual C++ 2010) для Windows XP. Функция - работа с базой Access (mdb).
Отлаживаю в win7. Программа нормально коннектится к базе.
Запускаю на winXP - соединение не устанавливает.

Подскажите, как определить, "чего в супе не хватает"?
...
Рейтинг: 0 / 0
win32 приложение для Windos XP
    #38579436
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сообщений об ошибках не хватает.
...
Рейтинг: 0 / 0
win32 приложение для Windos XP
    #38579453
Миха неопытный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

С сообщениями напряг. Пробовал вставлять обработчик - валится на PrintProviderError().
void PrintComError(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());

// Print COM errors.
printf("Error ");
printf(" Code = %08lx ", e.Error());
printf(" Code meaning = %s ", e.ErrorMessage());
printf(" Source = %s ", (LPCSTR) bstrSource);
printf(" Description = %s ", (LPCSTR) bstrDescription);
}

void PrintProviderError(_ConnectionPtr pConnection)
{
// Print Provider Errors from Connection object.
// pErr is a record object in the Connection's Error collection.
ErrorPtr pErr = NULL;

if( (pConnection->Errors->Count) > 0) {
long nCount = pConnection->Errors->Count;
// Collection ranges from 0 to nCount -1.
for (long i = 0;i < nCount;i++) {
pErr = pConnection->Errors->GetItem(i);
printf(" Error number: %x %s", pErr->Number,
pErr->Description);
}
}
}

То, что удаётся получить:
Error Code = 80004003 Code meaning = Неправильный указатель Source = (null) Description = (null)
...
Рейтинг: 0 / 0
win32 приложение для Windos XP
    #38579473
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Миха неопытныйС сообщениями напряг.Значит это первое на что надо обратить внимание.
Сделаешь правильную обработку ошибок - пол-задачи решишь.
...
Рейтинг: 0 / 0
win32 приложение для Windos XP
    #38579507
Миха неопытный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Тогда дополнительный вопрос: как в моём случае сделать правильную обработку ошибок?
...
Рейтинг: 0 / 0
win32 приложение для Windos XP
    #38579573
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Миха неопытныйWhite Owl,

Тогда дополнительный вопрос: как в моём случае сделать правильную обработку ошибок?А это зависит от того как ты пытаешься работать с базой.
Если ODBC то одно, если OLEDB то другое, если COM то третье...
Открываешь MSDN, ищешь там доку на свой интерфейс и ищешь куда скидываются номера и тексты ошибок и как их оттуда выкапывать.
Еще учти что у тебя в игре два приложения - твое собственное и Акцесс, ошибка может появляться как на твоей стороне, так и в Акцессе - отлавливать надо ВСЕ.
...
Рейтинг: 0 / 0
win32 приложение для Windos XP
    #38579623
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Миха неопытныйОтлаживаю в win7. Запускаю на winXP
Ну, из общих соображений,
правильно отлаживать на XP, а проверять на Win7.
Я именно так и поступаю, рабочий комп-XP, а проверяю на чистых 7-ках и 8-ках и т.п.
И у меня проблем как правило нет. Не спец, но слышал утверждение что рантаймы "разные цепляются".

Миха неопытныйкак определить, "чего в супе не хватает"?
В XP может элементарно не хватать .Net Framework.
С одной стороны для win32 он нафиг не нужен, но с другой стороны студия его каким-то волшебным образом цепляет.
У меня есть ряд больших консольных проектов C++, кот. я постоянно компилирую на VC++2005 EE, На других XP/2003 они никогда не запускаются пока не скормишь .Net v. >= 2.0 SP1.
Читал, что эта фигня как-то отключается, но руки не дошли.
Но это вряд ли твой случай, т.к. прога при указанной проблеме ругается в самом начале и весьма характерным MsgBox-ом.

Далее, ты говоришь про mdb.
Миха неопытныйПрограмма нормально коннектится к базе.
Запускаю на winXP - соединение не устанавливает.
По крайней мере могу сказать с уверенностью, что если на VB6 под XP компилировать код (естественно 32-битный) со строкой коннекта вида
Код: vbnet
1.
2.
  adoConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
   path_to_mdb & "\database.mdb;Mode=Share Deny None;Persist Security Info=False;Jet OLEDB:Database Password=mypassword"


то этот коннект будет идеально работать на любых 7-ках и 8-ках включая 64-битные.
Т.е. 32-битное приложение автоматически цепляет 32-битный драйвер кот. ВЕЗДЕ присутствует. Бытующее мнение по поводу того что надо ставить какие-то супер-драйвера от новых офисов неверно.

Еще существенным является версия Microsoft ActiveX Data Objects Library.
В VB6 можно прилепить любую версию, а использоваться будет последняя имеющаяся, т.е. 2.8 а вот в .Net, если прилепишь 2.6 через COM, то она и будет использоваться. Надо сразу прилеплять последнюю, т.е. 2.8. Здесь еще разумно применять позднее связывание:
Код: vbnet
1.
Set adoConn = CreateObject("ADODB.Connection")


Не знаю как это переложить на C++.

White OwlЕще учти что у тебя в игре два приложения - твое собственное и Акцесс, ошибка может появляться как на твоей стороне, так и в Акцессе - отлавливать надо ВСЕ.
Работа с mdb-базами поддерживается на уровне OS и Акцесса как такового не требует.
Могу даже сказать больше.
mdb, созданная программно открывается в любом Access (т.е. и в 2000-м, кот. я например пользуюсь, и в каком-нибудь супер новой версии, которым я например не пользуюсь).
Если открыть такую (созданную программно) mdb в "новом" Access, то в старом она уже никогда не откроется, но OLEDB через строку коннекта приведенную выше будет продолжать работать с этой mdb корректно.

Миха неопытныйТогда дополнительный вопрос: как в моём случае сделать правильную обработку ошибок?
О какой "обработке" может итти речь, если "соединение не устанавливает".
На строке коннекта выскочит msgbox с сообщением о том, почему не подключились к БД.

Не, м.б. конечно ты не через OLEDB работаешь. Тогда не знаю.
...
Рейтинг: 0 / 0
win32 приложение для Windos XP
    #38580528
Миха неопытный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Огромное спасибо за развёрнутое подтверждение моих сомнений. Похоже, более новые версии библиотек ...
Дальше копать не стал. Установил VS на winXP, собрал - всё ОК :) И на ХР, и на 7.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / win32 приложение для Windos XP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]