powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Баги Access (топик не закрыт, можно добавлять)
25 сообщений из 370, страница 7 из 15
Баги Access (топик не закрыт, можно добавлять)
    #33509596
вероятно я слишком эмоционально насчет "всех" методов класса высказался.

попробую уточниться.

Надо обратить специальное внимание на методы обработки событий вообще
и на функции обработки события Terminate в особенности.

1) про ошибки в процедурах событий
Пусть есть форма, в которой на кнопку повешен код

Код: plaintext
1.
2.
3.
Private Sub Кнопка1_Click()
   Dim k
   k =  5  \  0 
End Sub
пусть код процедуры обработки события загрузки фомы выглядит так:

Код: plaintext
1.
2.
Private Sub Form_Load()
    Кнопка1_Click
End Sub

Пусть у вас есть стартовая функция StartFunction, которая запускается в
макросе Autoexec
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Function StartFunction()
    On Error GoTo ErrorBlock
    DoCmd.OpenForm "Форма1", acNormal
    Exit Function
ErrorBlock:
MsgBox "была ошибка и мы ее перехватили:" & Err.Description
  Debug.Print Err.Number, Err.Description
End Function

Приблизительно с фразы
автор"ошибки обработки событий локализуются в процедурах обработки событий. Такие ошибки не передаются в вызывающую функцию, в частности в Sub Main приложения".
начинается всякая приличная книжка про VB.
(Свое внимание я лишь недавно на это обратил)

В Акцессе, в данном примере, если в процедуре обработки события открытия формы происходит (неперехваченная) ошибка, то информация об этой ошибке в любом случае не попадает в StartFunction.

В mdb-проекте среда остановит выполнение на ошибочной строке, предлагая исправить или обойти ошибку.
В mde-проекте такая ошибка просто "пропадет", возможно вызвав сброс переменных проекта. Но никакого перехвата в с возвратом в вызывающую функцию не будет.
Мораль проста - потенциальные ошибки в процедурах обработки событий должны обрабатываться в самих процедурах обработки событий.
Ответственность за такую процедуру без обработчика ошибок - на разработчике.

Есть еще один специальный случай - ошибки в специальных событиях класса
- Initialize и Terminate

Пусть есть в стандартном модуле

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub FirstSub()
    On Error GoTo ErrorBlock
    SecondSub
    Exit Sub
ErrorBlock:
  'тут хотим обрабатывать перехваченную во внутренностях ошибку
  Debug.Print Err.Number, Err.Description
End Sub 

пусть есть

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub SecondSub()

    Dim MyObject As CMyClass
    Set MyObject = New CMyClass
    
    'MyObject.MyErrorProc
    MyObject.NormalProc
    
    Err.Raise vbObjectError +  54321 , , "My Terrible error"
    
End Sub

NormalProc - процедура в классе CMyClass - обычный метод, в которой не возникает ошибки.
MyObject.MyErrorProc - процедура в классе CMyClass (обычный метод), в которой возникает ошибка.


Привозникновении ошибки во второй процедуре, при выходе за ее границы экземпляр CMyClass подвергентся процедуре уничтожения.
Если в классе есть функция обработки события Terminate (Private Sub Class_Terminate() ), то она будет вызвана.

Если в этой функции нет источника для возникновения собственной ошибки, то информация об ошибке, возникшей в normalProc или, если код, как показано, закомментирован - в строке Err.Raise
передается в обработчик, установленный в FirstSub.

Если же в Class_Terminate возникает собственная ошибка, то возникает специальная ситуация, когда вновь возникшая ошибка скрывает информацию о предыдущей ошибке. Про классический VB пиишут, что он вообще не переживает именно такую ситуацию с ошибкой в Class_Terminate, и (компилированный) проект в таком месте просто падает. (Возможно это сервиспакозависимо - не проверял).

В моих экспериментах - Акцесс не падает - в мдб среда останавливается на сбойной строке (Проект переводится при этом в состояние невозможности сохранения изменений). В mde - возникает окно сообщения о сбое в работе макроса, но краха акцесса не происходит. (проверял в 2002м)
В любом случае на это место нужно обратить внимание, особенно если
- класс содержится в библиотечном проекте
или
- в классе присутствуют "внешние" члены - типа рекордсетов и т.п.
Возможно в сложных проектах это может быть одной из причин падений.

---------------------------------------------

Еще один момент. С обработкой ошибок не связанный.
Для 97го акцесса существовала техника "предварительной загрузки модулей",
когда в стартовой процедуре дергались публичные константы модуля. с целью его принудительной загрузки и исключения задержки при первом обращении
к функциям модуля.
Для последующих версий оно вроде как не актуально.
Но среди прочего, не понимая куда двигаться, может быть я и за эту нитку дернул бы...

-----------------------------------------------
кроме того, хорошо бы изолировать багосбойные места типа
- перевода составной формы из иконизированного состояния в развернутое
- перехода формы в принт-превью и назад (результат - сброс объекта формы с потерей состояния самописных членов класса)
- обрашение к вложенной подчиненной в табличном виде до е первого разворота

(и т.п.)
-----------------------------------------------
Удачи.

ЗЫ
Если что-то надыбается пригодное к рассказу - послушал бы с удовольствием и благодарностью.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33509663
2 глупыйглупый:

Ух! Целая лекция! :-) Пошёл предметный разговор!

По сути вопроса.

Ситуаций, как "ошибки обработки событий локализуются в процедурах обработки событий. Такие ошибки не передаются в вызывающую функцию, в частности в Sub Main приложения" у нас нет принципиально. Т.е. ошибки обработчиков _событий_ по стеку не передаются. Есть работа с евентами нестандартных АктивИксов, проверим и их, может проморгали чего... Но тут может сработать закон подлости - на реальном проекте очень сложно что либо откручивать - замучаешься, не факт что прикрутишь назад, БагТрек и так не простаивает, а на тестовых примерах всё может работать без запинки.

"- в классе присутствуют "внешние" члены - типа рекордсетов и т.п."
Присутствуют, заразы, и в большом количестве. Поскольку, просто само просится обернуть конкретную запись в экземпляр класса (да ещё и не один - вложенный по принципу матрёшки), в динамическом рекордсете, со своими методами - исполнение кода методов выходит в стандартные модули, используя общие пр-ры, возвращается обратно, опять выходит - большая вложенность. Городить массивы и коллекции на этом непрактично. Именно эти возможности и есть - гимн Аксесу, за них его и люблю! Но много мин... впрочем, я уже как-то это писал.

В Class_ Initialize и Terminate в основном работают только счётчики объектов и освобождение ссылок на внутренние рекордсеты (!). Проверим. Но там есть одна хитрость... Фактически, инициализация класса происходит в специальном методе, встроенные недолюбливаю, бывают странности - "то возникает специальная ситуация, когда вновь возникшая ошибка скрывает информацию о предыдущей ошибке" - а вот над этим вообще задумался...

"При возникновении ошибки во второй процедуре, при выходе за ее границы экземпляр CMyClass подвергентся процедуре уничтожения." А вот это уже теплее - может падения Акса на объектах вызвано тем, что когда фактически рекурсия должна возвратиться в объект, объект уже сброшен или потерян Аксом, в результате какой-то нештатной ситуации. Т.е. вероятно Аксесовский интерпретатор просто передаёт управление на произвольный кусок памяти с мусором. (опять же это уже зона компетенции разработчиков Акса).

Собственно, обьясню, что я имел ввиду под обработкой ошибок в своём предыдущем посте. Извините, буду писать схематично, без деталей реализации.

1-я Ситуёвина. Классическая, академическая, в любом учебнике и екзамплах от МС. Я её описывать не буду - каждая пр-ра или ф-ция имеет свой обработчик, кучу строк кода, прямую реакцию на ошибку и т.п. Этот подход неудобен в реальных проектах, из-за большого кол-ва однотипного кода, копи-пасты, невозможностью повторного использования, рефакторинга и т.п. (много причин).

2-я Ситуёвина. Уже лучше. Применяется в реальной работе, в пр-рах, у которых обязаны быть явные обработчики. Но без недостатка 1-го метода.

Function BlaBla (...) As Long

On Error Goto err_no:
...
err_no:
Exit Sub '- штатный выход

err_yes:
Sys_ErrorHandlerA(ByRef BlaBla As Long, ...) 'стандартный обработчик ошибок проекта, тип А
...
End Sub

В данном случае ошибки перехватываются накоплением, но обработка и реакция, а так-же логирование и т.п., а так-же принятие решения переносится в стандартные трапы уровня проекта - и уже там ракручиваем стек. Именно таким методом у нас обрабатывается до 80% ошибок. Ситуация может усугибиться большой вложенностью, выходом из VBA в API, но штатно вызывающая пр-ра ВСЕГДА обязана передавать вверх, вместе с результатами своей работы и контрольные точки - номера ошибок или флаги FL_STOP, FL_TRAP, FL_ABORT... Это позволяет вызывающим пр-рам однозначно обрабатывать ситуацию.

3-я Ситуёвина. Вот как раз она вызывает у меня сомнения, но приносит реальную пользу в проекте, например, избавляя от обработки достаточно большого кол-ва тривиальных ситуаций, не требующих изощрённого траха.

Function BlaBla (...) as Long

On Error Goto err_no:
...
ExampleClass.Go '- метод класса, не имеющий обработчика
ExampleClass.End '- тоже
...

err_no:
Exit Sub '- штатный выход

err_yes:
BlaBla = Sys_ErrorHandlerB(...) 'стандартный обработчик ошибок проекта, тип B
...
End Sub

В этом случае ошибка внутри метода экземпляра класса, теоретически и практически (99%) возвращает ошибку внутрь вызывавшей пр-ры - и опять уходит на обработку в другую пр-ру, которая, блин, тоже может содержать свой обработчик. Сложнее с ситуациями, когда внутри метода класса код уходит в модули, вызывая стандартные методы, которые в свою очередь имеют глобальные обработчики, и в свою очередь могут вызывать методы классов, которые не имеют обработчиков, а могут возвратить ошибку в вызывающую и... см. мочало с начала... Т.е. вот тут-то и могут возникать штопорные рекурсии системных ловушек Sys_ErrorHandlerB, довольно муторные в отслеживании и понимании - и это главный недостаток такого подхода.

Уф... утомился... :-) К сожалению всё выше описанное к трабле с паролем имхо не имеет отношения, поскольку пр-ры инициализации входят в тот %% пр-р, имеющих собственные и безусловные перехваты ошибок. Вот в них-то как раз и загадка. Вместо выброса ошибки Аксес падает. :-( Локализуем.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33509688
2 ТеньОтцаГамлета

про процедуры обработки событий
я не пытался "развести чужую беду руками".
с одной стороны, это была реакция на Вашу фразу
авторТеперь падает при работе кода инициализации приложения. Т.е. не выбрасывает ошибку, если она вообще есть, (везде стоят обработчкики, а кто не может обработать самостоятельно - передаёт ошибку вверх по стеку вызова).
Передача "вверх по стеку" для обработчиков событий неприменима - них в некотором смысле - "нет верха". Это функции косвенного вызова по существу.
Источники (точки) вызова при этом находятся за пределами вба-кода.

с другой - я так или иначе собирался это куда-то "слить" по случаю.
практически - удачный повод для "высказаться" получился.
Есть надежда, что этот текст все-равно для кого-нибудь будет полезен.
В книжках "акцесс за 5 секунд" об этом вряд ли напишут.
Вопросов на эту тему нет. (Иногда вопросов нет потому, что человек не знает, о чем именно он должен спросить и какими словами. )

в целом - сорри за оффтоп.


по содержанию последнего вашего поста -
Если вы раскручиваете стек через самописный связный список-стек, то и информация о текущей ошибке внятно привязывается к каждому текущему входу стека любым удобным образом.
Если вы как-то иначе раскручиваете стек вызовов, и это не военная тайна,
и нет внутреннего сопротивления - может поделитесь в отдельном топике
(я и вопрос могу задать по такому случаю - как, мол, мне до стека добраться настоящего, без прикручивания рядом своего ? :)) )
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33509690
глпглп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
типа уточнение:
Источники (точки) вызова при этом как правило находятся за пределами вба-кода.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33510089
2 глупыйглупый:

"Есть надежда, что этот текст все-равно для кого-нибудь будет полезен."
Реально полезен! :-) Не сомневайтесь!

"Если вы раскручиваете стек через самописный связный список-стек, то и информация о текущей ошибке внятно привязывается к каждому текущему входу стека любым удобным образом"
Именно, путь наименьшего сопротивления и наибольшего удобства.

"может поделитесь в отдельном топике"
Увы мне... Совсем нет времени писать, просто не до этого. Я больше читаю и больше по конкретным своим вопросам. А ору в форум тогда, когда уже прищимило и опухло! :-)

"Источники (точки) вызова при этом как правило находятся за пределами вба-кода"
Да можно ловить и там (да пребудет с вами СИла и API, или что-либо другое, имеющее на борту адресную арифметику)... Вопрос - зачем и кого тут хотеть перемудрить? MZ-Tools, например, имхо, именно так и поступает. Но вот код проекта Аксеса (не дай бог ещё и компилируемый налету) это такой фарш из нативного кода ОС, среды, Джета, интерпретатора байт кода и т.п... там жизни не хватит разобраться.
Но вообще-то, я лично, изначально, против таких методов - теряется цельность (красота что ли) пректа и в некоторых местах он становится похож на бред параноика... :-( Смешивать тёплое с квадратным - плюсы от таких подходов могут потеряться среди минусов. Если мне, как прикладнику, не дали в ВБА явно оперировать указателями и участками памяти (хитровыверты не в счёт), то это "жжж" неспроста!..

Всё имхо, ессно. :-) Удачи. Спасибо за участие.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33518344
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up (по запросам трудящих)
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33538035
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот я собрал описание глюка.
компоненты: access 2003 sp2(rus), winxp sp2(eng) , 3dplanesoft screensaver(lostwtach)
какую нибудь форму с пустым источником данных делаем в adp проекте.
на открытие вешаем код, который к рекордсету формы присваивает рекордсет(локальная переменная) полученный на базе adodb.command.
после этого присвоения можно проверить recordsource у этой формы, и он будет выглядить типа {?= sptest (?,?) }
потом ставим запуск скринсейвера на 1 минуту и ждем...
дождались запуска, двигаем мышкой , кликаем в логин, входим в сеанс и получаем ошибку....типа "select * from {?= sptest (?,?) } такого источника нету"....
если, не получиться сделать так, то просто надо взять подчиненную форму.
еще особенность. можно сделать это с листбоксом. тада access при входе в сеанс после скринсейвера перезапросит его источник данных и слетит выбранный элемент.
глюк токо с 3dplanesoft screensaver (скринсейвер такой)
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33587932
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этот пост лучше бы назвать "глюки акцесс".

не знаю ни "как попал", ни "как выбрался". Но на прошлой неделе день был целиком потерян.

"Вдруг" (последовательность событий не отследил) стал глючить проект в одном из мдбюков в коде класса.

код в классе примерно такой:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private lngVar as Long
Private aR() as String ' Lbound=1 
...

Sub Add(Element as String)
...
    lngVar=lngVar+ 1 
    aR(lngVar)=Element
...
End Sub

Глюк проявился в том, что
при прохожденнии кода отладчиком после выполнения строки
lngVar=lngVar+1
значение lngVar отставалось равным нулю, а значение aR(lngVar) оставалось присвоенным внутри процедуры и сразу
терялось по завершении процедуры.
Последующее обращение к массиву в другом методе дает ошибку выхода за границы диапазона, а сам массив пустой. как будто его не заполняли.
При этом код вида lngVar=125 (конкретное значение) вполне нормально выполнялся.
в стандартых модулях - "все нормально".
Глюк касался конкретного проекта. В других "все путем".
Намучился я с этим до потери пульса. Как только ни тряс бубном.
и декомпайл тебе, и переменные местами поменять, и компилировать и сохранить, выйти и войти. Экспорт модуля, удаление, импорт из текстового файла. - Ноль эмоций.
Перезапуск кампутера - ничего конечно не дал.
Оно вроде дешевле в новый проект все импортировать. Но так задрало, что бился головой в эту стену до конечного одурения.

В какойто момент заметил, что при если держать мышиный курсор на "больной" строке, то, при подадании маркера позиции исполнения на эту строку видно, что значение присваивается и тут же теряется.
чума.
решил - щаз покурю и "разберу халабуду вдребезги...".
Что я сделал после покурить - я не запомнил. Какая-то очередная комбинация на тему сжать, выйти и войти, компилировать и сохранить.
После чего просто нажал F5 и оно сработало. Проект "вылечился".
Не хотел писать, потому что не знаю, как стабильно воспроизвести такую ситуацию. Как и не запомнил/не понял "лечащую" комбинацию.
Потом подумал - кажется, сам я все-таки наверно больше одного раза в такое попадал.
Может все-таки кто-нибудь скажет - "что это было", и как же с ним грамотно бороться.
акцесс 2002 сп3
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33587972
2 Victosha:

Эпиграф:
"Есть многое на свете, друг Горацио, что без пол-литры, хых, не разобрать..." (с) Кажется, С.Есенин.

Лирика:
Коллега, выпейте чаю с мёдом и сушками... :-) Отстранитесь на денёк от этой работы. Отдохните. Потом свежим взглядом в бой.

По сути вопроса:
Я вас понимаю... :-) Код очевидный до простоты. Глюк... Нда-с... Можно много чего гадать, всё равно кроме вас никто вердикт не вынесет, проект-то ваш и вам там всё виднее. К сожалению, чем больше и сложнее проект на Аксе, тем чаще проявляются "духи тундры". У любого аксессиста с опытом целый ворох таких историй. ПО сложное, многослойное, и понять кто там где (а главное - почему) глючит порою очень сложно. Как лечить такие глюки я и сам не знаю. Знаю только по личному опыту, что они имеют свойство накапливаться и жутко выбивают из рабочей колеи. И, кстати, потом как-то тихо сами собою сходят на нет, рассасываются... В общем - "верь, бойся, проси".

Гадание на:
1. Евенты для объекта содержащего данный код есть? Нет ли в них терминейта данного объекта?
2. Нет ли во время работы висящих классов таймеров (опять таки с кодом терминейта или работающе с данной переменной?)
3. Есть ли хитрый ватч экспершын? Или алиасы локальных переменных... Условная компилейшын? Чёрт знает...
33... (33 дурацких пункта прямого к делу отношения не имеющие)

А вот тут случай был:
А у меня редактор кода Акса стал самопроизвольно брать на себя фокус! Почувствуйте хохму! Сидите вы, скажем в аське, достаёте коллегу вопросами, поднимаете глаза - опа - а уже фигачите в редакторе кода... Отличная шутка от индийских программистов! Причём, целый день может быть тихо, потом опять... (в этот момент исполняется код и я грешу на классы таймеров, поднятые в пректе для евентов, видать его исполнение поднимает окно, хотя брекпоинтов нет... но всё равно такое чудо)

З.Ы. Искренне сочувствую. Бывает. :-)

З.Ы.Ы. Просто поддержал, типа, морально. Всё равно импортируйте в новый проект весь код и проведите дефрагментацию и чистку всего рабочего компа. И реестра тоже. От греха... (тьфу 3 раза, по дереву, с левой ноги, и т.п. см. сборник народных рецептов)
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33587973
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаю, что конкретно было и как конкретно с этим бороться.
Но повреждения компилированного VBA кода, увы, встречаются очень часто. И проявления этого бывают разные. Какое-то время назад я создал ярлык, запускающий Access с /Decompile. И очень активно им пользуюсь. Считаю, что это хорошо помогает избавиться от подобных проблем.


ЗЫ Извините, если я ответил не в тему. Еще не проснулся :-)
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33587992
2 Serge Gavrilov:

Дык в том-то и беда, что не всегда декомпил форева! :-( Не думаю, что автор Victosha не знает об этом ключе.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33587996
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Victoshaзначение lngVar отставалось равным нулю, а значение aR(lngVar) оставалось присвоенным внутри процедуры и сразу
терялось по завершении процедуры.
Симптомы (почти) такие, как будто эти две переменных описаны дважды - один раз внутри процедуры и один раз вне. Тогда внутри процедуры происходят нужные действия с локальными переменными, а при выходе становятся видны внешние, у которых ничего не изменилось.

Victoshaи переменные местами поменять
Интересно, пробовал ли ты добавить в явном виде описание локальных переменных в процедуре, которое Аксессу примерещилось, а потом его убрать.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33588000
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТеньОтцаГамлета2 Serge Gavrilov:
...
Не думаю, что автор Victosha не знает об этом ключе.
Я и не подразумевал это. Я сказал лишь о том, что при написании кода я запускаю Access практически только с этим ключем. А не тогда, когда уже может и поздно.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33588010
2 Serge Gavrilov:

>Я и не подразумевал это.
А я и не подразумевал, что вы подразумевали... :-)) Не хотел задеть, извините.

>Access практически только с этим ключем.
Да я делаю почти так-же. Только реже - в конце дня сбрасываю последнюю сборку, перед копией в архив. И каждый раз думаю о том, что ДЕКОМПИЛ - деструктивный, недокументированный метод. Тот же Гетц, околомайкрософтовские гуру на забугорных форумах по Аксу, всегда ПРЕДУПРЕЖДАЮТ о том, что часто им пользоваться чревато... (тут невнятное бормотанине на 3 страницы)... Но я понимаю, что это - край, экстремальная медицина.

Глубокий офф-топ, рекурсивный:
Вот интересно, а если со следующим сервис-паком Акса, ключ /DECOMPILE без явного указания параметров -rX%123-CDE и -rY%DASF-OBANA будет просто форматировать винт программисту? :-)) Ну им ваапще удобно так, в микрософте...

2 Victosha:
А это мысль - попробвать совсем другие имена переменных и массива. Вдруг интерпретатору они не нравятся, по религиозным мотивам, всякое бывает...
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33588039
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТеньОтцаГамлета2 Serge Gavrilov:

>Я и не подразумевал это.
А я и не подразумевал, что вы подразумевали... :-)) Не хотел задеть, извините.
Да вы меня и не задели, вам показалось :-)
ТеньОтцаГамлета...
И каждый раз думаю о том, что ДЕКОМПИЛ - деструктивный, недокументированный метод. Тот же Гетц, околомайкрософтовские гуру на забугорных форумах по Аксу, всегда ПРЕДУПРЕЖДАЮТ о том, что часто им пользоваться чревато... (тут невнятное бормотанине на 3 страницы)...
"Я не знаю, как там в Лондоне, я не была, может у них и собака друг человека, а у нас УПРАВДОМ друг человека" (с) "Бриллиантовая рука"

Не думаю, что запуск с decompile опаснее, чем просто запуск Access
По крайней мере по моему опыту, а он не очень маленький.
Происходит удаление записей с компилированным кодом из таблицы MSysAccessStorage (для формата 2002)
Многие стандартные действия зачастую оказываются гораздо опаснее недокументированных фичей.

ТеньОтцаГамлета
...
Вот интересно, а если со следующим сервис-паком Акса, ключ /DECOMPILE без явного указания параметров -rX%123-CDE и -rY%DASF-OBANA будет просто форматировать винт программисту? :-)) Ну им ваапще удобно так, в микрософте...
буду явно указывать параметры, если еще буду работать с Access
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33588058
2 Serge Gavrilov:
Лично у меня с декомпилом тоже пока не было никаких проблем (тьфу 3 раза... и всё такое). Однако, "ложки-то нашлись, но осадок остался" :-))

>Многие стандартные действия зачастую оказываются...
"Это точно..." (с) Красноармеец т.Сухов.

2 Victosha:
У меня был очень похожий глюк с глобальной переменной, ещё на А97 до SR2, году эдак в 98-м... Компилятор ругался на явно описанную переменную. Тоже не понял почему. Тоже бубен по кругу... Вылечил как? Обхохочитесь. Просто строчку с объявлением написал на одну строчку ниже! Заработало! Возвращаю на прежнее место - еггог в коде, переменная не обьявлена. Закомментил эту строчку русскими идиоматическими выражениями.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33588217
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПросто строчку с объявлением написал на одну строчку ниже!
это мы не раз проходили. как раз с 97го живой иногда бубун.
и на 2000м живой. на 2002м вроде не приходилось так сильно руками махать.

строчка ниже - очень сильно раздражает. Понятный смысл - вызвать декомпиляцию модуля. Но для этого и просто пробел поставить должно быть достаточно. Однако - пожалте строчкой ниже, выше или вообще добавить пустую переменную, ни для чего не нужную.

Это плохо. Это может и не "баги акцесс". Но отсутсвтие внятно документированного описания поведения проекта. Это раздражает.

Недавно натыкался где-то на информацию о том, что неправильная последовательность действий после /decompile может приводить проект в очумение. чего-там там сразу после декомпайл делать не рекомендуется. то-ли сжимать, то-ли копмилировать-сжимать. надо раздельно сделал одно. вышел-вошел, сделал другое.

Это, кажется, связано с еще и с переносом прокта из старшей версии (2003) в младшую (2000).
2003й сохраняет в проекте ссылку на свою библиотеку типов, с которой 2000й обойтись не может. надо типа на 2000м тот самый декомпайл и волшебную последовательность.
то-ли это статья на support.microsoft, то ли где-то в типах у кого-то. думал запомню. а сейчас найти не могу.

Кстати, фенечку про запуск пустого акцесса с опцией декомпайл я у Serge Gavrilov приметил. он относительно недавно в каком-то топике об этом говорил. Мне понравилось - удобная штука. я себе тоже такой ярлык завел. Спасибо.

Еще один для меня рядом лежащий для вопрос - переход mdb проекта в
состояние "контроля доступа". при программной работе с экзеплярами форм/отчетов и их свойствами.
Когда-то даже попадалось описание набора набора свойств формы, изменение которых должно к этому вести. Опять же - не сохранилось, а строить серию экспериментов я уже точно сил не найду. Впрочем, в условиях - "каждому по экземпляру интерфейса" - оно вроде только теоретический интерес.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33612835
дурачок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При печати формы, основанной на сохраненном запросе с опцией WITH OWNERACCESS OPTION;,
методом PrintOut для формирования данных в поле печати требуется наличие
прав на чтение для базовых таблиц запроса.

обсуждение здесь
http://www.sql.ru/forum/actualthread.aspx?tid=273355
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33634867
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
use pubs
create proc авторы
@ct as int
as
select * from authors where contract=@ct

это сохраненная процедура для имитации глюка(она может быть любая. принцип в том , что для получение набора данных должна испо-я процедура)

также приложен adp проект. все сделано на базе pubs.

нужно открыть форма1
свернуть ее, развернуть ее.
и получим косяк.который никак не отловишь. а как обойти тоже идей нету.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33634875
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Косяк, подчиненные формы и таб бар.

обсуждения косяка постом выше по этой ссылке.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33657098
RoloTomasi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALTER COLUMN
если поле NOT NULL запрос
Код: plaintext
ALTER TABLE [table] ALTER COLUMN [mid] INTEGER NULL;
сделает его nullable(NULL)
но если поле NULL
то запрос
Код: plaintext
ALTER TABLE [table] ALTER COLUMN [mid] INTEGER NOT NULL;
бесполезен.
Кто нить знает как побороть(DDL) не пересоздавая таблицу?
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33657157
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RoloTomasiALTER COLUMN
если поле NOT NULL запрос
Код: plaintext
ALTER TABLE [table] ALTER COLUMN [mid] INTEGER NULL;
сделает его nullable(NULL)
но если поле NULL
то запрос
Код: plaintext
ALTER TABLE [table] ALTER COLUMN [mid] INTEGER NOT NULL;
бесполезен.
Кто нить знает как побороть(DDL) не пересоздавая таблицу?
Вы не перепутали? У меня результат противоположен вашему (Access 2002, mdb).
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33657692
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serge Gavrilov Вы не перепутали? У меня результат противоположен вашему (Access 2002, mdb).+1 (2000, mdb) (NOT NULL работает, NULL - нет)
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #33657838
RoloTomasi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serge GavrilovВы не перепутали? У меня результат противоположен вашему (Access 2002, mdb).
Так и есть
Исправленая версия
ALTER COLUMN
если поле NULL запрос
Код: plaintext
ALTER TABLE [table] ALTER COLUMN [mid] INTEGER NOT NULL;
сделает его not nullable(NOT NULL)
но если поле NOT NULL, то запрос
Код: plaintext
ALTER TABLE [table] ALTER COLUMN [mid] INTEGER NULL;
не работает.
Т.е. NULL->NOT NULL работает а обратно нет.
Кто нить знает как побороть(DDL) не пересоздавая таблицу?
Пока только
-создание временого(идентичного нужног поля)
-перенос данных из переопределяемого
-переименование временого и удаление старого
-ну и манипуляции с констрейнтами.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #34124194
забавная бага 97 аксесса
1. есть запрос (табличек 5-7, да плюс один сохраненный запрос, усе провязаныя INNER джойнами).
2. получен преобразованием базы пердыдущей версии, не правился (руками).
3. возвращает некоторое количество данных (при открытой соотвествующей форме - т.е. заданных значениях параметров).

4. Заменяем одну из связей на LEFT джойн - записи не возвращаются.
5. даже не заменяя - копирую текст в пустой бланк - записи не возвращаются (начинаю вспоминать про "фичи" типа х-прод-джойна, и тихо сходить с ума)
6. тады просто шевелю одну связь в конструкторе мышом, ничего больше не меняя - записи перестают возвращаться.

7. на нн-ые сутки замечаю, что связь между двумя табличками (вернее - 2-мя экземплярами одной таблички) и в конструкторе и в тексте не та, которая должна быть, т.е. не та, "которая возвращает записи". (а зеркальная - там типо дерево). (и, собсно, не та, что осталась в предыдущей версии).


Получаица, что если не трогать "неправильно" сохраненный по какой-то причине запрос, он выполняется "правильно". как аксесс умудрился перевернуть связь в тексте (бланке) запроса, при этом сохранив где-то унутре праильный "откомпилированный запрос", который видимо и выполнялся, пока его не потревожишь руками - непнятна.
такие дела.
...
Рейтинг: 0 / 0
25 сообщений из 370, страница 7 из 15
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Баги Access (топик не закрыт, можно добавлять)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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