Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ODBC - ошибка драйвера.  (Прочитано 19140 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Шнибл
Помогающий

ru
Offline Offline
Пол: Мужской

« : 30-08-2010 12:11 » 

Ошибка возникает в работающем проекте когда в существующую таблицу добавляется поле (на сервере), после этого в акцесе из формы - источником которой является эта таблица можно только просмотреть данные, при изменении пишет что во время просмотра данные заблокировал другой пользователь хотите сохранить изменения и вернутся позже. В менеджере таблиц при попытке обновить таблицы выскакивает ошибка ODBC драйвера (как название темы дословно без всяких кодов). Иногда (в прошлые разы) ошибка эта лечилась перелинкованием таблицы, но в этот раз почему то не работает.
Таблицы находятся на sql2000 клиентская часть в access2007, знаю что данная ошибка возникает и при работе access2003 + sql.
Записан
Шнибл
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 30-08-2010 12:13 » 

Забыл упомянуть в акцессе в настройках по блокировкам как только не извращался - они роль не играют. (если перелинковать таблицу то иногда ODBC ошибка пропадает н овнести изменения в строки по прежнему нельзя - пишет что во время изменения кто-то другой поправил (работал с БД один - проверено))
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #2 : 30-08-2010 13:57 » 

Шнибл, лучше бы тебе поискать какие-то логи, заглянуть в System Events.. Без более детальной информации, боюсь, будет трудно понять что имеется в виду.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Шнибл
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 31-08-2010 05:42 » 

Это же штатная ошибка в приложении (правда почему то код не выдает) и я так понимаю что в System Events таких ошибок не пишется (если не прав поправтье где настроить - сейчас по крайней мере просмотрел журнал там про это ничего нету) В интернете про эту ошибку крайне мало информации и где встречалась тоже пишут чт опомагает перелинкование таблиц.
По мимо решения проблемы хотелось бы еще выяснить из-за чег оона появляется Улыбаюсь т.к. Схему БД на серваке правлю частенько а ошибка такая вылетает редко, пока так и не понял с чем связано, ну вернее такая байда точно не появляется если идет добавление таблицы, а вот если в таблицу добавить столбец, то иногда вылетает эта ошибка.
« Последнее редактирование: 31-08-2010 05:45 от Шнибл » Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #4 : 31-08-2010 06:23 » 

Ну, из всего этого я понял следующее: есть сервер с базой и клиент через ODBC. Клиент цепляется к серверу. ODBC, видимо, кэширует себе схему базы и начитает работать с ней.
В это же время кто-то добавляет в таблицу новый столбец  Быть такого не может , то есть меняет схему. На месте ODBC, обратившись к этой таблице я бы обнаружил несоответствие схемы и кэша и выдал ошибку.
Замечу, что я не уверен именно в таком механизме работы ODBC, но это представляется достаточно вероятным.
Можно лишь настоятельно посоветовать не менять схему при подключенном клиенте.

Если таблица по-прежнему заблокирована... Хм.. попробуй перезагрузить сервис MSSQL...
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Шнибл
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 31-08-2010 11:20 » 

Очень похоже на правду (если столбец удалить и перелинковать таблицу то все начинает работать номрально). Сорри мою неграмотность но я сделаю предположение что раз ODBC наcтраивается на клиенте то и кэш должен быть там же, тогда вопрос как обнулить/перезапустить кэш ODBC если он работает по Вашему принципу, саму машину клиентскую перегружал, ODBC переделывал (имеется ввиду что удалил и создал снова)- результаты те же.

Является ли добавление столбца изменением схемы БД ? (в акцессе связи (схема данных) не проставлены, все связи-отношения между таблицами прописаны в SQL). Вопрос к тому что данный трабл с ошибкой обновления ODBC и блокированием записей проявляется именно на той машине, блин как бы объяснить то Улыбаюсь короче на мне установлен enterprise menedger который настроен на сервак, и есть сборка Акцесовская, добавляю через enterprise menedger столбец, лезу в акцесовскую сборку - при обновлении таблицы получаю ошибку ODBC (раньше в этом случае помагало перелинкование таблицы и это решало все проблемы) при попытке изменить запись - ошибку блокировки (допустим столбец не обязательный был). Но если говорить о кеше - почему то в это же время на другой машине запускаю старую сборку - не пытаясь обновить таблицу меняю запись - никаких сообщений об ошибке все корректно работает или в общем это и подтверждает Ваши догадки, раз столбец не обязательный то сервак корректно о нем умалчивает и никаких конфликтов с неким кэшем ODBC не возникает на другой машине ? ....

Я так понимаю совет перезагрузить сервис MSSQL имеет отношение к серваку, в связи с вышеописанным я так понимаю не нужно его перезапускать ?
« Последнее редактирование: 31-08-2010 11:31 от Шнибл » Записан
Шнибл
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 31-08-2010 11:54 » 

По поводу добавление столбца в это же время, а какие еще методы бвают по изменению структуры БД ? в оффлайне то структуру не поменяешь, выходит убедись что никто с тем что ты будешь править не работает и меняй схему, предварительно позаботившись на тестовом о клиенте, или есть какие другие варианты как схему менять в рабочей БД ?
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #7 : 31-08-2010 13:04 » new

Является ли добавление столбца изменением схемы БД ?
Да, именно это я и имел в виду.

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

Именно сначала отключить всех клиентов, поменять базу, а потом подключить обратно. Вообще подразумевается, что такая операция достаточно редка и производится только при серьезных изменениях архитектуры приложений. Обычно схему базы продумывают на начальном этапе разработки.
В больших компаниях держат 2 базы - одна основная, вторая - её копия.. Чтобы клиенты не терялись, используется сложная схема с обновлением одной базы и переключением клиентов на вторую на это время...

А про твою проблему... Давай еще раз с конца: что не работает и какие ошибки?
Совет перезапустить сервис я давал с целью дать серверу возможность завершить и закрыть все текущие транзакции и блокировки, если они есть. Возможно, это на какое-то врмя поможет..
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Шнибл
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 31-08-2010 13:33 » 

по моему даже в 1С начиная с 8 версии уже в конфигураторе можно обновить схему не гоняя пользователей. Проблемы в том что меняю таблицу в которой никто сейчас не работает не вижу.

Про проблему:
Что делаю:
1. через Enterprise Manager на сервере SQL2к добавляю в таблице еще одно необязательное поле;
2. закрываю Enterprise Manager;
3. открываю акцесовскую сборку (с зажатым shift);
4. Лезу в раздел таблицы (в акцессе можно хранить сами таблицы внутри сборки а можно хранить только ссылки на таблицы на сервере через предварительно настроенный ODBC) - у меня второй вариант - все таблицы на сервере в акцессе только ссылки.
5. Открываю диспечер связанных таблиц, выбираю измененную таблицу и пытаюсь её обновить. При корректной работе она обновляется но иногда на этом этапе выскакивает ошибка: "ODBC - ошибка драйвера".
6. В некоторых случаях ошибка "ODBC - ошибка драйвера" лечится удалением таблицы (вернее ODBC ссылки) из проекта и новое добавление этой таблицы (ссылка ODBC) в проект.  Но в этот раз такое лекарство не действует.
7. Если удалить внесенный столбец таблицы (п.1) на сервере и перелинковать в проекте таблицу - все начинает опять работать.

имя поля вроде никакое не зарезирвированное в общем бред какой то.

Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #9 : 01-09-2010 04:28 » 

огласите название столбца и его тип
Записан

I Have Nine Lives You Have One Only
THINK!
Шнибл
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 01-09-2010 07:20 » 

по п1 добавляю 2 столбца:
    а) Имя Person тип bit обязательный столбец значение по умолчанию false
    б) Имя Nomenkl тип int размер длинна 4 допускаются значения null
Захожу в акцесс, обновляю таблицы вытаскиваю на форму чекбокс подвязываю его на Person все прекрасно работает.
в общем всем спасибо все работает Улыбаюсь

Поиск действий как получить ошибку:
Залезаю на скуле в диаграммы создаю связь между Nomenkl и счетчиком в таблице номенклатура
При создании отмечаю галочками следующие пункты - Chek existing date on creation, Enforce  relationship for replication,  галку Enforce  relationship for Insert and Update снимаю, сохраняюсь, лезу в Акцесс обновляю таблицы, все прекрастно работает.
Лезу в скуль на этой созданной связи ставлю галку Enforce  relationship for Insert and Update - сохраняюсь, лезу в акцесс - получаю ошибку  ODBC.
Лезу в скуль удаляю связь, сохраняюсь, лезу в акцесс пытаюсь обновить таблицы - ошибка ODBC.
« Последнее редактирование: 01-09-2010 07:28 от Шнибл » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines