Программа не работает при отсутствии сети, хотя сам сеть не
От: grey109 http://music.rekom.ru
Дата: 22.01.07 11:23
Оценка:
Написал программу, отдал заказчику, а он говорит что программа не работает.

Начал разбираться — действительно. Нашел причину — программа не работает при отсутствии сети, хотя сам сеть не использует. Программа написана на MFC, для доступа к базе данных используется DAO.

Программа работает, если сетевое подключание Включено. Если отключить — вылетает ошибка "программа выполнила недопустимую операцию...". Программу проверял на нескольких компьютерах — эффект от вкл.(выкл.) сети присутствует.

Вот то место где вылетает программа:

m_pDataBase = new CDaoDatabase;
try
{
    AfxMessageBox("1");
      m_pDataBase->Open(lpszPathName, FILE_SHARE_READ, FILE_SHARE_WRITE, ";PWD=pass");
    AfxMessageBox("2");
}


Если сеть включена — я вижу окно с 1 и окно 2. Если выключена — то только 1, потом вылетает ошибка.

Подскажите, плз, в чем может быть дело???
Re: Программа не работает при отсутствии сети, хотя сам сеть
От: DuШes  
Дата: 22.01.07 11:47
Оценка:
Здравствуйте, grey109, Вы писали:

G>Написал программу, отдал заказчику, а он говорит что программа не работает.


G>Начал разбираться — действительно. Нашел причину — программа не работает при отсутствии сети, хотя сам сеть не использует. Программа написана на MFC, для доступа к базе данных используется DAO.


G>Программа работает, если сетевое подключание Включено. Если отключить — вылетает ошибка "программа выполнила недопустимую операцию...". Программу проверял на нескольких компьютерах — эффект от вкл.(выкл.) сети присутствует.


G>Вот то место где вылетает программа:


G>
G>m_pDataBase = new CDaoDatabase;
G>try
G>{
G>    AfxMessageBox("1");
G>      m_pDataBase->Open(lpszPathName, FILE_SHARE_READ, FILE_SHARE_WRITE, ";PWD=pass");
G>    AfxMessageBox("2");
G>}
G>


G>Если сеть включена — я вижу окно с 1 и окно 2. Если выключена — то только 1, потом вылетает ошибка.


G>Подскажите, плз, в чем может быть дело???


ответ то вроде бы очевиден, lpszPathName ссылается на сетевое имя ресурса в connection string, т.е. скажем вместо localhost или локального имени компа ты используешь имя компьютера в сети с указанием домена...имхо, а вообще пора бы научиться использовать debug/
Re[2]: Программа не работает при отсутствии сети, хотя сам с
От: grey109 http://music.rekom.ru
Дата: 22.01.07 11:53
Оценка:
Здравствуйте, DuШes, Вы писали:

DШ>ответ то вроде бы очевиден, lpszPathName ссылается на сетевое имя ресурса в connection string, т.е. скажем вместо localhost или локального имени компа ты используешь имя компьютера в сети с указанием домена...имхо, а вообще пора бы научиться использовать debug/


Если бы все так было просто. В lpszPathName лежит что и положено "c:\dir\test.mdb", так что дело не в этом.
Re[3]: Программа не работает при отсутствии сети, хотя сам с
От: DuШes  
Дата: 22.01.07 11:55
Оценка: +1
Здравствуйте, grey109, Вы писали:

G>Здравствуйте, DuШes, Вы писали:


DШ>>ответ то вроде бы очевиден, lpszPathName ссылается на сетевое имя ресурса в connection string, т.е. скажем вместо localhost или локального имени компа ты используешь имя компьютера в сети с указанием домена...имхо, а вообще пора бы научиться использовать debug/


G>Если бы все так было просто. В lpszPathName лежит что и положено "c:\dir\test.mdb", так что дело не в этом.


так...ну а хотя бы exception->message ты можешь сюда выложить...а то гадать на кофейной гуще еще долго будем?
Re[4]: Программа не работает при отсутствии сети, хотя сам с
От: grey109 http://music.rekom.ru
Дата: 22.01.07 12:39
Оценка:
DШ>так...ну а хотя бы exception->message ты можешь сюда выложить...а то гадать на кофейной гуще еще долго будем?

Ты про:
catch(CDaoException* e)
{
    AfxMessageBox("3");
      AfxMessageBox(e->m_pErrorInfo->m_strDescription, MB_ICONEXCLAMATION);
    AfxMessageBox("4");
      delete m_pDataBase;
      e->Delete();
      return FALSE;
}


?

Если да, то e->m_pErrorInfo->m_strDescription ничего не выводит. Даже окна не появляется, после окна с 3.
Re[5]: Программа не работает при отсутствии сети, хотя сам с
От: DarkSid Россия  
Дата: 22.01.07 12:59
Оценка:
Здравствуйте, grey109, Вы писали:

DШ>>так...ну а хотя бы exception->message ты можешь сюда выложить...а то гадать на кофейной гуще еще долго будем?


G>Ты про:

G>
G>catch(CDaoException* e)
G>{
G>    AfxMessageBox("3");
G>      AfxMessageBox(e->m_pErrorInfo->m_strDescription, MB_ICONEXCLAMATION);
G>    AfxMessageBox("4");
G>      delete m_pDataBase;
      e->>Delete();
G>      return FALSE;
G>}
G>


G>?


G>Если да, то e->m_pErrorInfo->m_strDescription ничего не выводит. Даже окна не появляется, после окна с 3.


Права на директорию какие? Там при открытии создается файл блокировок. Может на данную директорию права только чтение без записи?
Какая системная база для акссесса установлена по умолчанию? Может в системной БД не прописаны права данного пользователя?
Re[6]: Программа не работает при отсутствии сети, хотя сам с
От: grey109 http://music.rekom.ru
Дата: 22.01.07 13:07
Оценка:
DS>Права на директорию какие? Там при открытии создается файл блокировок. Может на данную директорию права только чтение без записи?

Дело не в правах, т.к. все происходит на одной и тоже машине и винде. Разница только что сетевой шнурок подключен или нет. Только чтение галки не стоит.

DS>Какая системная база для акссесса установлена по умолчанию? Может в системной БД не прописаны права данного пользователя?


Тоже дело не в этом, т.к. наличии или отсутствие сетевого шнурка прав не меняет.


Вообще мистика какая-то получается. Программу писал сам с нуля. Каких-либо сетевых компонентов не использовал, а программа получилось "сетевая" (
Re: Программа не работает при отсутствии сети, хотя сам сеть
От: DarkSid Россия  
Дата: 22.01.07 13:18
Оценка:
Здравствуйте, grey109, Вы писали:

G>Написал программу, отдал заказчику, а он говорит что программа не работает.


G>Начал разбираться — действительно. Нашел причину — программа не работает при отсутствии сети, хотя сам сеть не использует. Программа написана на MFC, для доступа к базе данных используется DAO.


G>Программа работает, если сетевое подключание Включено. Если отключить — вылетает ошибка "программа выполнила недопустимую операцию...". Программу проверял на нескольких компьютерах — эффект от вкл.(выкл.) сети присутствует.


G>Вот то место где вылетает программа:


G>
G>m_pDataBase = new CDaoDatabase;
G>try
G>{
G>    AfxMessageBox("1");
G>      m_pDataBase->Open(lpszPathName, FILE_SHARE_READ, FILE_SHARE_WRITE, ";PWD=pass");
G>    AfxMessageBox("2");
G>}
G>


G>Если сеть включена — я вижу окно с 1 и окно 2. Если выключена — то только 1, потом вылетает ошибка.


G>Подскажите, плз, в чем может быть дело???


Может при шнурке она ищет системную БД на шаре ресурсе и находит. Когда шнурка нет — нет и шар ресурса.
Re[7]: Программа не работает при отсутствии сети, хотя сам с
От: DuШes  
Дата: 22.01.07 13:22
Оценка:
Здравствуйте, grey109, Вы писали:

DS>>Права на директорию какие? Там при открытии создается файл блокировок. Может на данную директорию права только чтение без записи?


G>Дело не в правах, т.к. все происходит на одной и тоже машине и винде. Разница только что сетевой шнурок подключен или нет. Только чтение галки не стоит.


DS>>Какая системная база для акссесса установлена по умолчанию? Может в системной БД не прописаны права данного пользователя?


G>Тоже дело не в этом, т.к. наличии или отсутствие сетевого шнурка прав не меняет.



G>Вообще мистика какая-то получается. Программу писал сам с нуля. Каких-либо сетевых компонентов не использовал, а программа получилось "сетевая" (


посмею предположить — не могла ли возникнуть та ситуация что первый раз запустил процесс, он отработал с ошибкой, процесс не выгрузился и держит в эксклюзиве базу открытой???

второе смотрим sdk:

lpszName
A string expression that is the name of an existing Microsoft Jet (.MDB) database file. If the filename has an extension, it is required. If your network supports the uniform naming convention (UNC), you can also specify a network path, such as "\\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB.MDB". (Double backslashes are required in string literals because "\" is the C++ escape character.)

Some considerations apply when using lpszName. If it:

Refers to a database that is already open for exclusive access by another user, MFC throws an exception of type CDaoException. Trap that exception to let your user know that the database is unavailable.

Is an empty string ("") and lpszConnect is "ODBC;", a dialog box listing all registered ODBC data source names is displayed so the user can select a database. You should avoid direct connections to ODBC data sources; use an attached table instead.

Otherwise does not refer to an existing database or valid ODBC data source name, MFC throws an exception of type CDaoException.

Note
For details about DAO error codes, see the DAOERR.H file. For related information, see the topic "Trappable Data Access Errors" in DAO Help.



попробуй все таки увидеть или код ошибки или текст в режиме отладки — ну что за AfxMessagebox в самом деле, поставь брякпоинт на открытии базы, посмотри заходишь ли ты в catch, и какой exception ты ловишь? сначала лови CDaoException, затем общий Exception...

третье — если укажем lpszName должен быть выведен диалог открытия базы, укажи файл в диалоге, проверь дальнейшее выполнение, орять таки после открытия диалога ты сможешь проверить правильность твоей connection_string///

четвертое — мистики в нашей работе не бывает..

удачи
Re[5]: Программа не работает при отсутствии сети, хотя сам с
От: DuШes  
Дата: 22.01.07 13:25
Оценка:
Здравствуйте, grey109, Вы писали:

DШ>>так...ну а хотя бы exception->message ты можешь сюда выложить...а то гадать на кофейной гуще еще долго будем?


G>Ты про:

G>
G>catch(CDaoException* e)
G>{
G>    AfxMessageBox("3");
G>      AfxMessageBox(e->m_pErrorInfo->m_strDescription, MB_ICONEXCLAMATION);
G>    AfxMessageBox("4");
G>      delete m_pDataBase;
      e->>Delete();
G>      return FALSE;
G>}
G>


G>?


G>Если да, то e->m_pErrorInfo->m_strDescription ничего не выводит. Даже окна не появляется, после окна с 3.


лови не просто CDaoException, но еще и Exception — чтото мне подсказывает, что ты не продублировал \ при указании имени файла или же ошибка к DAO вообще не относится...что кстати и поджтверждает факт что ты в catch не входишь...
Re[2]: Программа не работает при отсутствии сети, хотя сам с
От: grey109 http://music.rekom.ru
Дата: 22.01.07 13:30
Оценка:
DS>Может при шнурке она ищет системную БД на шаре ресурсе и находит. Когда шнурка нет — нет и шар ресурса.

А можно поподробнее про системную БД?
Re[3]: Программа не работает при отсутствии сети, хотя сам с
От: DarkSid Россия  
Дата: 22.01.07 13:36
Оценка:
Здравствуйте, grey109, Вы писали:

DS>>Может при шнурке она ищет системную БД на шаре ресурсе и находит. Когда шнурка нет — нет и шар ресурса.


G>А можно поподробнее про системную БД?


здесь
И
здесь
Re[4]: Программа не работает при отсутствии сети, хотя сам с
От: grey109 http://music.rekom.ru
Дата: 23.01.07 07:58
Оценка: :)
Всем спасибо! Проблема решена. Дело оказалось в том, что библиотека dao350.dll была зарегистрирована в реестре на сетевом ресурсе, соответственно при запуске программы без сети, эта ДЛЛка не находилась и программы вылетала.

Перерегистрация REGSVR32.EXE x:\Program Files\Common Files\Microsoft Shared\DAO\dao350.dll решила проблема.

Еще раз все спасибо за помощь!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.