|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Следующая ситуация. В прошлом году, летом была реорганизация предприятия. Наш отдел был передан другой организации. Сменилось место работы, компьютеры, программы. Вот что оказалось у меня на новом месте. На сервере стоит Windows 7 64 bit, Office 2010 32 bit и Office 2003 У меня на компьютере стоит Windows 7 32 bit, Office 2010 32 bit и Office 2003 Первоначально всё работало нормально. Потом после какого-то обновления произошла следующая история. Программа разработанная на моём компьютере отказывается работать на сервере. Выдаёт сообщение типа "Ошибка в запросе. Должно быть INSERT, UPDATE или DELETE" не дословно, но смысл похожий. Делаешь сжатие-восстановление, программа начинает работать на сервере. Зато перестаёт работать на моём компьютере. С тем же сообщением. Делаю уже у себя сжатие-восстановление, программа начинает работать у меня, но прекращает на сервере. Системщик только разводит руками и что-то говорит о разных обновлениях. По моему настоянию с сервера снесли оба офиса и установили Office 2010 32 bit заново. Ошибка ушла. Примерно через три месяца, после очередных обновлений, похожая ситуация всплыла у заказчиков, которым рассылались новые версии программы. У части заказчиков программа отказывалась работать с аналогичным сообщением. Причём на работе и у меня дома программа она запускалась без проблем. По моей инструкции пользователи на местах произвели сжатие-восстановление программы. У части она заработала, а у части - нет. Что сделал. Дома под Windows XP в Access 2003 произвёл декомпиляцию программы. Затем поджал её. Программа заработала и на тех машинах, где раньше отказывалась работать. Кто-нибудь встречался с такими проблемами? Как их решали? И что надо делать, чтоб их избежать? ------------------------------------------------------------- А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 11:13 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Я правильно понимаю, что под словом "программа" тут разумеется обычная БД в формате MDB? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 11:20 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Что за сервер? Если база Access только оболочка, проверьте DISTINCTROW в запросах. Система должна решить, что исполнять клиенту, а что серверу. Нужно смотреть текст запросов где происходит ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 11:30 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Дополнительная информация. Программа сделана в формате Access 2000, mdb. Запускалась на Access с 2000 до 2016. ActiveX не используется, API используется. Программа разрабатывалась и работает в 32-х и 64-х разрядных офисах. И до нашего переезда никаких проблем не возникало. Вот только на старом месте в качестве операционки стояла Windows XP. Статистику набрать к сожалению не могу Во многих местах в качестве операторов сидят пожилые женщины, которые не могут сказать, что у них за операционка и какая версия офиса. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 11:34 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Прошу прощения. Ошибся. На сервере стоит операционка Windows Server 2008 R2 SP1 64 бит. Программа представляет собой разделённую базу в формате MDB. Один файл с кодом, другой - с данными. Нужно поместить их в один каталог в любом разрешенном месте. Автоматически подключаются таблица и начинается работа. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 11:47 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
1. Сделайте резервную копию. 2. Декомпилируйте базу, сожмите, закройте. Откройте, скомпилируйте, сожмите, закройте. Сделайте защищенный MDE файл. Он должен копироваться в VBA.Environ("TEMP") пользователя. Именно с ним он должен работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 12:12 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Это надо делать на каждом рабочем месте. Там где не работает программа. Сейчас таких пользователей 6-8. Но у меня могут быть неточные сведения. Часть информации до меня могла просто не дойти. Всего пользователей более 80. Т.е в среднем на одном из 9-10 компьютеров такая неприятность. Некоторые находятся на расстоянии 300-400 км, некоторые ещё далее. Ездить по пользователям - не выход. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 12:32 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Пользователи должны работать на терминальном сервере, куда заходят через удаленный доступ. При подключении выполняется start.cmd @copy db.mde %TEMP% /y @start "C:\Program Files\Microsoft Office\Office15\msaccess.exe" %TEMP%/db.mde @exit ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 12:59 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Не путайте то что делаете для своей организации и то, что рассылается сторонним пользователям. Какой терминальный сервер? Какой удалённый доступ? Вы о чём? Не везде и Access стоит. Не везде даже системщики свои есть. Работа с программой должна быть максимально проста. Разархивируй на диск и работай. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 16:36 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Joss, Свои пять копеек. Делал проги, рассылал клиентам. И постоянно ловил таких аналогичных "Барабашек", пока не привёл всех к единому стандарту. А именно рантайм 2007. Иначе идут конфликты библиотек "и всё такое прочее". На крайний случай, если народ не хочет/не умеет удалять из своих Офисов компонент Access, рекомендую ставить одновременно рантайм 2007 и цеплять на ярлычок запуска программы её запуск именно из под рантайма. Под рантайм, кста, отлично идёт и mdb, и mde. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 18:04 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
ну и иногда проблемы запуска у клиентов совсем по другим причинам: маниакальный уровень настройки антивирусов, урезанные права юзеров в Винде, плюс сам Офис порой согласно установленному уровню безопасности считает запуск проги недопустимым ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 18:08 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Хорошие пожелания так и останутся пожеланиями. У одних стоит лицензитя, у других - пиратка, У одних 32 бит, у других - 64. У одних 2003, у других - 2013. И ничего изменить нельзя. Это не наши подразделения. Не они хотят взять у нас программу, а мы просим, чтоб они у нас её взяли. Вот такие дела. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 23:01 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Joss, так я не зря упомянул про Рантайм 2007, установленный параллельно. Ну и в ялыке запуска вашего приложения, в "Ярлык" - в поле "Объект" вставить строку принудительного запуска приложения Рантаймом, что то типа "C:\Program Files (x86)\Microsoft Office\Office12\msaccess.exe" "C:\Каталог\ИмяПроги.mdb" Только уточнить надо где именно лежит файл запуска рантайма, лень искать. Вот, к слову, похожее здесь же обсуждалось: http://www.sql.ru/forum/1235622/access-runtime-sovmestimost?hl=runtime ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 23:21 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Смотри написанное выше. Никто лишних телодвижений делать не будет. Никто не будет скачивать рантайм и ставить его параллельно уже стоящему Access. Тем более 32-х и 64-х версии Access несовместимы. Это по официальной информации от Микрософта. Хотя я ухитрялся запускать и работать в портабле версии Офиса 2003 при параллельно установленном Офисе 2010 64 бит. Пока решил следующее. После отладки программы нести её домой. Там под ХР на 2003 декомпилировать и сжимать без компиляции и рассылать в таком виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 10:01 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Попробуйте так: #If VBA7 Then Public Declare PtrSafe Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (pwszKLID As Any) As Long Public Declare PtrSafe Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal HKL As String, ByVal Flags As Long) As Long #Else Public Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (pwszKLID As Any) As Long Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal HKL As String, ByVal Flags As Long) As Long #End If ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 11:12 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
PaulBПопробуйте так: #If VBA7 Then Public Declare PtrSafe Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (pwszKLID As Any) As Long Public Declare PtrSafe Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal HKL As String, ByVal Flags As Long) As Long #Else Public Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (pwszKLID As Any) As Long Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal HKL As String, ByVal Flags As Long) As Long #End If Извините, я не понял к чему это? Можете пояснить? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 11:55 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Вы написали об использовании API. Что бы это работало под разными версиями Access используйте условную компиляцию ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 12:44 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Joss, А вы пытались понять, почему именно возникает ошибка? Код под отладкой смотрели? Сжатие может влиять на некоторые вещи, но возможно, основная ошибка именно в коде или в данных. Например, могли возникнуть битые строки в таблице, из-за чего код работает вообще непонятно как. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 13:03 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Такое сообщение об ошибке обычно выдается, когда программа пытается выполнить неверный запрос, который даже не начинается с INSERT, UPDATE или DELETE ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 13:04 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Joss, ну, идти на поводу у ленивых клиентов тоже нужно и можно до каких то определённых пределов. Практика показывает, что сами потом крайним останетесь ;) По поводу "32-х и 64-х версии Access". А при чём тут разрядность, если вы запускаете прогу из под Рантайма, фактически - из под независимой отдельной копии Access? Эта такая штука, как я успел убедиться - отлично бегает хоть на XP, хоть на 10-ке. Проверял сам лично на XP, XP/64, 2003 Server, 7/32, 7/64, 8.1, юзеры пишут - что и на 10-ке полёт нормальный. Кроме того, я говорил, что могут иметь место факторы "вне самого Access". То, что "никто не будет ничего делать" - а) не факт, но допустим б) Сделайте это "сами": вышлите в инсталляхе тот же Рантайм, прикрутите батничек на разовую установку и вуаля. Можно даже сделать достаточно полноценный инсталлятор, например, при помощи InnoSetup. Тогда клиент запускает одну инсталляшку. Ну, через удалённый доступ можете зайти к клиенту, сами настроить - если это важно. Иногда и мне приходится так делать - это проще и быстрее. В общем, я бы тут проблему разделил на две части: 1. Проверить на практике сам принцип и возможность решения проблемы косяков с помощью рантаймов. Думается мне, что это проще и быстрее сделать именно на практике, чем гадать и теоретизировать до бесконечности ;) 2. Способ установки необходимого комплекта на комп юзерам. Тут уже варианты на ваш выбор. Разумеется, я не смею настаивать - в конце концов, это у вас проблема, и варианты поиска решений - тоже у вас. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 16:05 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Спасибо за советы, постараюсь ответить каждому. to PaulB У меня всё это сделано в программе, и как я писал выше она прекрасно работает на всех версиях Офиса от 2000 до 2016 и на 32-х и 64-х битных версиях. Всё дело в том, что на 9 компьютерах из 10 программа запускается, а на десятом - нет. Причём это не связано ни с версией офиса, ни с его разрядностью. to MrShin авторА вы пытались понять, почему именно возникает ошибка? Код под отладкой смотрели? Сжатие может влиять на некоторые вещи, но возможно, основная ошибка именно в коде или в данных. Например, могли возникнуть битые строки в таблице, из-за чего код работает вообще непонятно как. Ошибка возникает до первой точки останова. Ставишь точку останова в самом первом выполняемом операторе. Ошибка возникает до неё. Ни данные, ни код не испорчен. Берёшь работающую программу, ставишь на проблемный компьютер - не работает. Ставишь на исходный - работает. Проблема на работе была решена сносом офиса и повторной установкой. авторТакое сообщение об ошибке обычно выдается, когда программа пытается выполнить неверный запрос, который даже не начинается с INSERT, UPDATE или DELETE Это ясно, но это не тот случай. Ведь на части компьютеров программа прекрасно работает с теми же данными. to Tarasios авторJoss, ну, идти на поводу у ленивых клиентов тоже нужно и можно до каких то определённых пределов. Практика показывает, что сами потом крайним останетесь ;) По поводу "32-х и 64-х версии Access". А при чём тут разрядность, если вы запускаете прогу из под Рантайма, фактически - из под независимой отдельной копии Access? Эта такая штука, как я успел убедиться - отлично бегает хоть на XP, хоть на 10-ке. Проверял сам лично на XP, XP/64, 2003 Server, 7/32, 7/64, 8.1, юзеры пишут - что и на 10-ке полёт нормальный. Кроме того, я говорил, что могут иметь место факторы "вне самого Access". То, что "никто не будет ничего делать" - а) не факт, но допустим б) Сделайте это "сами": вышлите в инсталляхе тот же Рантайм, прикрутите батничек на разовую установку и вуаля. Можно даже сделать достаточно полноценный инсталлятор, например, при помощи InnoSetup. Тогда клиент запускает одну инсталляшку. Ну, через удалённый доступ можете зайти к клиенту, сами настроить - если это важно. Иногда и мне приходится так делать - это проще и быстрее. В общем, я бы тут проблему разделил на две части: 1. Проверить на практике сам принцип и возможность решения проблемы косяков с помощью рантаймов. Думается мне, что это проще и быстрее сделать именно на практике, чем гадать и теоретизировать до бесконечности ;) 2. Способ установки необходимого комплекта на комп юзерам. Тут уже варианты на ваш выбор. Разумеется, я не смею настаивать - в конце концов, это у вас проблема, и варианты поиска решений - тоже у вас. Тут придётся отвечать последовательно. На счёт пользователей. Наша организация собирает анкеты определённой формы отчётности. Их можно представить как бумажный документ. Ну или в том модуле, что я разработал. Вся эта информация сливается в общую базу данных. Ввод данных из модуля автоматизирован., бумажные документы вводятся вручную. Если программа не понравится пользователям, они могут отсылать анкеты на бумаге и тогда мы тут будем корячиться и вводить данные с бумажных анкет. Анкеты собираются каждый квартал. И каждый раз рассылается новый модуль с новыми данными. Нельзя один раз поставить модуль и постоянно им пользоваться. На счёт рантайма. Смотри написанное выше. Никто лишних телодвижений делать не будет. Никто не будет скачивать рантайм и ставить его параллельно уже стоящему Access. Тем более 32-х и 64-х версии Access несовместимы. Это по официальной информации от Микрософта. Как я писал, Во многих организациях нет даже штатного системщика. Иногда даже звонят и спрашивают, как надо разархивировать. Вчера звонили и заявляли, что никак не могут прикрепить отчёт к письму. А возиться с установкой и деинсталяцией Access никто не будет. Тем более что гарантию, что всё заработает я дать не могу. Единственное, до чего я додумался. Создать bat или cmd файл на декомпиляцию и последующее сжатие базы. И рассылать такой файл вместе с модулем, с указанием, что если возникнет такая ошибка, то запустить этот файл. Это в 99,9% случаев срабатывает. Но как написать такой файл я пока без понятия. Надо указать путь к Access, путь к обрабатываемому файлу. А я пока с этим не разобрался. Ну не писал я раньше такие файлы. Может кто-нибудь подскажет, как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 09:45 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Joss, ну вообще то, само сжатие можно навесить на прогу, например, при каждом выходе из программы. Сами же DOS команды и основы создания тех же батников неимоверно просты, есть в инетах куча примеров и буквально за час вы "проникнетесь". Хотя опять же здесь всё упирается в точные координаты файла access.exe, а они в разных версиях разные ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 19:22 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Возможно, это по вашей теме: http://www.sql.ru/forum/143018/szhatie-i-vosstanovlenie-bd-iz-komandnoy-stroki http://www.sql.ru/faq/faq_topic.aspx?fid=155 Хотя вот лично мне бы (при условии что это больше нужно мне, а не клиентам) было бы удобнее и быстрее "вылечить" клиента по удалёнке, например - через тимвивер. Практика показывает, что даже самые "деревянные" клиенты почти без проблем могут её у себя запустить и назвать мне (мылом, аське или по телефону) айди и пароль. Тем более, что существует модуль тимвивера, не требующий инсталляции у клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 19:28 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
TarasiosJoss, ну вообще то, само сжатие можно навесить на прогу, например, при каждом выходе из программы. Сами же DOS команды и основы создания тех же батников неимоверно просты, есть в инетах куча примеров и буквально за час вы "проникнетесь". Хотя опять же здесь всё упирается в точные координаты файла access.exe, а они в разных версиях разные ;) Проблема в том, что компакт не помогает. Помогает декомпиляция программы. А она запускается только из командной строки (я других способов не знаю). А для неё надо задавать полный путь к декомпилируемому файлу. Простые батники я писал: создание/удаление каталогов, файлов, перемещение по каталогам. А вот такого типа - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2017, 09:09 |
|
На одних компьютерах программа работает, на других - нет.
|
|||
---|---|---|---|
#18+
Joss, зачем вы пытаетесь сделать батник, не имея опыта, если прекрасно знаете среду MS Access и VBA? Создайте аксесовскую утилитку, в которой покажите красивую формочку с рюшками, определите где расположен екзешник access (можно через SysCmd(acSysCmdAccessDir) & "MSACCESS.EXE"), запустите шелом с командной строкой /декомпайл вашу основную базу и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2017, 09:26 |
|
|
start [/forum/topic.php?fid=45&msg=39386296&tid=1611833]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 171ms |
0 / 0 |