Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 6 7 8 9 10 11 12 [13] 14 15   вперед  Ctrl
 Re: Баги Access  [new]
СавсемГость
Guest
.ЛП
Алё, Вась?
То, что "use keywords" - как то отменяет то, что "can only be"?
Принимается односложный ответ. Типа да/нет/не знаю/знаю, но не скажу.
После этого и поговорим.

четателей развелось, тля, плюнуть некуда :)
Никак не отменяет.
"use keywords" от "may use keywords" отличить, надеюсь, сможете?
19 дек 11, 16:36    [11790448]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40348
Короче говоря, эту проблему надо переносить в другой топик. В ответ на недокументированный синтаксис получаем недокументированное поведение.
19 дек 11, 16:41    [11790495]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
.ЛП
Guest
СавсемГость
Никак не отменяет.

Очень хорошо.
Имеем два утверждения из хелпа:
1. Булевская переменная может быть только Труе и Фалсе.
2. Результатом применения оператора Нот к значению Труе является Фалсе. И наоборот, Нот Фалсе равно Труе.
Имеем кусок кода, результат выполнения которого опровергает либо первое, либо второе утверждение. Явно написанное.

На данный момент все слова понятны?

"use keywords" от "may use keywords" отличить, надеюсь, сможете?

Со словарём справлюсь.
Однако ж даже со словарём не пойму, при чём тут вот это вот "use the keywords ... to assign ... to Boolean variables", если в приведённом куске кода не содержится ни одного присвоения значения булевской переменной.

Присвоение значения переменной типа Variant - есть. Присвоения значения переменной типа Boolean - нет.
К чему было акцентировано "use keywords", независимо от того, "may" или не "may"?
19 дек 11, 16:48    [11790562]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
.ЛП
Guest
Владимир Саныч
Короче говоря, эту проблему надо переносить в другой топик. В ответ на недокументированный синтаксис получаем недокументированное поведение.

Нет.
Синтаксис самый что ни на есть документированный.
Возможные значения типа Boolean - документированы.
Возможные результаты оператора Not - документированы.
Правила приведения типов вообще, и Integer к Boolean в частности - документированы.
Вместе оно не (всегда) работает.
Но почему-то говорят, что это не баг. Вах-вах-вах.
19 дек 11, 16:51    [11790587]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
СавсемГость
Guest
.ЛП,
Присвоение значения переменной типа Variant - есть. Присвоения значения переменной типа Boolean - нет.
Мы один и тот-же код обсуждаем?

К чему было акцентировано "use keywords", независимо от того, "may" или не "may"?
Было акцентировано, как раз отсутствие may. Надеюсь, многоуважаемому .ЛП знакомы принципы "Всё, что не разрешено - запрещено" и "использование недокументированных возможностей - на свой страх и риск"? Спекуляций на тему "как же тогда быть с присвоением результата логического выражения переменной типа Boolean??!!!", надеюсь, не будет.

ЗЫ: если можно, объясните притчу про крестик и трусы.
19 дек 11, 17:32    [11791017]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
.ЛП
Guest
СавсемГость
.ЛП,
Присвоение значения переменной типа Variant - есть. Присвоения значения переменной типа Boolean - нет.
Мы один и тот-же код обсуждаем?

Да.
Признаю свою оплошность, поторопился.
Видимо есть присвоение Boolean'у.
звиняйте, таки посыпаю голову пеплом. поспешил, не проверил. привычке решил, что там промежуточная упаковка-распаковка вылезает, ан нет.

Тогда переколбашусь слегка.
Есть два утверждения из хелпа.
1. Boolean variables are stored as 16-bit (2-byte) numbers, but they can only be True or False.
2. When other numeric types are converted to Boolean values, 0 becomes False and all other values become True.
По приведённому коду - либо не "can only be", либо не "becomes".

Надеюсь, многоуважаемому .ЛП знакомы принципы "Всё, что не разрешено - запрещено" и "использование недокументированных возможностей - на свой страх и риск"?

Приведение типов - документировано. Вообще. И numeric types к boolean в частности.

ЗЫ: если можно, объясните притчу про крестик и трусы.

Дык вся притча уже и сказана.
В бане - "Авраам Моисеевич, или крестик снимите, или трусы наденьте".
19 дек 11, 17:51    [11791191]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
СавсемГость
Guest
>.ЛП,
>Видимо есть присвоение Boolean'у.

Видимо есть ... запись в память, "выделенную" под Boolean значения типа Variant/Byte(?)
А вот приведения к Boolean нет совсем
Я уже почти готов согласиться, что это бак VB
19 дек 11, 18:22    [11791449]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
.ЛП
Guest
СавсемГость
Видимо есть ... запись в память, "выделенную" под Boolean значения типа Variant/Byte(?)

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

А вот приведения к Boolean нет совсем

Ну как же это "нет совсем"?
Ведь значение типа String преобразуется.
Сначала в numeric type. Если сумеет.
Потом из numeric type в Boolean. С багом.

Если бы было "нет совсем", т.е. например не происходило бы преобразования стринга в интеджер, то был бы другой коленкор. Можно было бы со спокойной совестью поставить этот случай на ту же полку, где стоит LSet и WinAPI.
А так имеем то, что "преобразовывали, преобразовывали, да не выпреобразовывали". В полном противоречии с хелпом, раз уж речь зашла о документированности и допустимости (и допустимости через документированность) преобразований.
19 дек 11, 18:45    [11791570]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40348
.ЛП
Ведь значение типа String преобразуется.
Сначала в numeric type. Если сумеет.
Потом из numeric type в Boolean. С багом.

?CBool("true")
True
?CBool("false")
False
19 дек 11, 18:52    [11791606]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
.ЛП
Guest
Владимир Саныч
.ЛП
Ведь значение типа String преобразуется.
Сначала в numeric type. Если сумеет.
Потом из numeric type в Boolean. С багом.

?CBool("true")
True
?CBool("false")
False

? CBool(#1/1/2012#)
True
? Not CBool(#1/1/2012#)
False


А вот при попытке сделать
Sub GetP(ByRef pOut As Variant)
    pOut = #1//1/2012#
End Sub

получается "программа выполнила невыполнимое и будет закрыта".
Бида бида огорчение...
19 дек 11, 19:04    [11791675]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
СавсемГость
Guest
>.ЛП,
>Потом из numeric type в Boolean. С багом.
Такое впечатление, что не к Boolean, а к его внутреннему представлению.

ЗЫ: как по мне, что LSet, что "обычная" процедура с передачей "хитрожёлтого" типа по ссылке в параметр с формальным типом вариант, - те же яйца, только в профиль.
19 дек 11, 19:05    [11791685]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
СавсемГость
Guest
.ЛП,

А вот при попытке сделать

Sub GetP(ByRef pOut As Variant)
    pOut = #1//1/2012#
End Sub

получается "программа выполнила невыполнимое и будет закрыта".
Если это баг копипаста, то будет Overflow. Если умышленно, то до рантайма и не дойдёт.
19 дек 11, 19:09    [11791701]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Бенедикт
Member

Откуда:
Сообщений: 2099
СавсемГость
>.ЛП,
>Видимо есть присвоение Boolean'у.

Видимо есть ... запись в память, "выделенную" под Boolean значения типа Variant/Byte(?)
А вот приведения к Boolean нет совсем
Я уже почти готов согласиться, что это бак VB
Чтобы было меньше вопросов:
Private Enum VARENUM
   VT_EMPTY = 0
   VT_NULL = 1
   VT_I2 = 2
   VT_I4 = 3
   VT_R4 = 4
   VT_R8 = 5
   VT_CY = 6
   VT_DATE = 7
   VT_BSTR = 8
   VT_DISPATCH = 9
   VT_ERROR = 10
   VT_BOOL = 11
   VT_VARIANT = 12
   VT_UNKNOWN = 13
   VT_DECIMAL = 14
   VT_I1 = 16
   VT_UI1 = 17
   VT_UI2 = 18
   VT_UI4 = 19
   VT_INT = 22
   VT_UINT = 23
   VT_VOID = 24
   VT_ARRAY = &H2000
   VT_BYREF = &H4000
End Enum

Private Type MyVariantName3
   Val0 As Integer
   Val1 As Integer
   Val2 As Integer
   Val3 As Integer
End Type
Private Type MyVariantName4
   Val0 As Long
   Val1 As Long
End Type
Private Type MyVariant
   vt As Integer 'комбинация значений VARENUM
   wReserved1 As Integer
   wReserved2 As Integer
   wReserved3 As Integer
   Value As MyVariantName3
End Type

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
   pvDest As Any, pvSource As Any, ByVal cBytes As Long)

Sub t1()
 Dim b As Boolean
 
 b = True
 Debug.Print "Адрес переменной b: " & VarPtr(b)
 Debug.Print "До вызова процедуры GetP"
 Debug.Print "Шестн. значение переменной b: " & Hex$(b)

 GetP b
 
 Debug.Print "После вызова процедуры GetP"
 Debug.Print "Шестн. значение переменной b: " & Hex$(b)
 
 'далее по вкусу
End Sub

Sub GetP(ByRef pOut As Variant)
  Dim mv As MyVariant
  Dim mvn4 As MyVariantName4
  Dim boolVal As Boolean
  
  Debug.Print "Процедура GetP"
  
  CopyMemory mv, pOut, Len(mv)
  If mv.vt = (VT_BOOL Or VT_BYREF) Then
     Debug.Print "Переменная pOut типа Variant имеет подтип VT_BOOL | VT_BYREF"
     LSet mvn4 = mv.Value
     Debug.Print "Адрес переменной типа VT_BOOL, на которую ссылается pOut: " & mvn4.Val0
     CopyMemory boolVal, ByVal mvn4.Val0, LenB(boolVal)
     Debug.Print "До присвоения значения переменной pOut типа Variant"
     Debug.Print "Шестн. значение переменной типа VT_BOOL, на которую ссылается pOut: " & Hex$(boolVal)
  End If
  
  pOut = "3003"
     
  If mv.vt = (VT_BOOL Or VT_BYREF) Then
     CopyMemory boolVal, ByVal mvn4.Val0, LenB(boolVal)
     Debug.Print "После присвоения значения переменной pOut типа Variant"
     Debug.Print "Шестн. значение переменной типа VT_BOOL, на которую ссылается pOut: " & Hex$(boolVal)
  End If
End Sub
Вывод:
t1
Адрес переменной b: 1242890
До вызова процедуры GetP
Шестн. значение переменной b: FFFF
Процедура GetP
Переменная pOut типа Variant имеет подтип VT_BOOL | VT_BYREF
Адрес переменной типа VT_BOOL, на которую ссылается pOut: 1242890
До присвоения значения переменной pOut типа Variant
Шестн. значение переменной типа VT_BOOL, на которую ссылается pOut: FFFF
После присвоения значения переменной pOut типа Variant
Шестн. значение переменной типа VT_BOOL, на которую ссылается pOut: 3003
После вызова процедуры GetP
Шестн. значение переменной b: 3003
Т. е. баг (не приведение к типу Boolean, несмотря на то, что информация о типе, на который ссылается Variant, имеется) в момент присвоения pOut.
19 дек 11, 19:13    [11791716]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
.ЛП
Guest
СавсемГость
Если это баг копипаста, то будет Overflow. Если умышленно, то до рантайма и не дойдёт.

Да нет, совсем не бага копипаста. И до рантайма доходит. Что я делаю не так?

Может у нас датавременные константы в коде стали как-то по-другому писаться?
19 дек 11, 19:15    [11791729]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Бенедикт
Member

Откуда:
Сообщений: 2099
СавсемГость
ЗЫ: как по мне, что LSet, что "обычная" процедура с передачей "хитрожёлтого" типа по ссылке в параметр с формальным типом вариант, - те же яйца, только в профиль.
Ничего подобного. LSet небезопасен. Присвоение значения Variant-у обязано быть безопасным.
19 дек 11, 19:18    [11791742]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Бенедикт
Member

Откуда:
Сообщений: 2099
не тот вывод скопипастил. Вот соответствующий коду:
t1
Адрес переменной b: 1242890
До вызова процедуры GetP
Шестн. значение переменной b: FFFF
Процедура GetP
Переменная pOut типа Variant имеет подтип VT_BOOL | VT_BYREF
Адрес переменной типа VT_BOOL, на которую ссылается pOut: 1242890
До присвоения значения переменной pOut типа Variant
Шестн. значение переменной типа VT_BOOL, на которую ссылается pOut: FFFF
После присвоения значения переменной pOut типа Variant
Шестн. значение переменной типа VT_BOOL, на которую ссылается pOut: BBB
После вызова процедуры GetP
Шестн. значение переменной b: BBB
19 дек 11, 19:25    [11791772]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
СавсемГость
Guest
Пришёл лесник Бенедикт и всех разогнал
19 дек 11, 19:35    [11791800]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
СавсемГость
Guest
>.ЛП,
>Да нет, совсем не бага копипаста. И до рантайма доходит. Что я делаю не так?
Невнимательно смотрите.
Sub GetP(ByRef pOut As Variant)
    pOut = #1//1/2012#
End Sub

У Вас два слеша подряд в "литерале даты".
19 дек 11, 19:38    [11791809]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
.ЛП
Guest
СавсемГость
>.ЛП,
>Да нет, совсем не бага копипаста. И до рантайма доходит. Что я делаю не так?
Невнимательно смотрите.
Sub GetP(ByRef pOut As Variant)
    pOut = #1//1/2012#
End Sub

У Вас два слеша подряд в "литерале даты".

А, не, это бага копипаста.
Пальцы заплетаются, простите.
19 дек 11, 19:44    [11791832]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40348
Пальцы заплетаются за язык...
19 дек 11, 20:06    [11791941]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Баги Access (топик не закрыт, можно добавлять)  [new]
vip-y
Member

Откуда: From Future
Сообщений: 464
начал работать с аксом 2003 глючит часто
при быстрой работе копирования и т.д. надинает отваливатся главная форма у меня
самое ужасное - импорт таблиц dBase 5, OOCB с этим делом вообще непонятки
то нормально импортируется один и тот же файл, то выскакивают всякие ошибки (типо путь не найдет или ошибка драйвера)
часто теряются связи с таблицами bdf
21 май 13, 19:45    [14329363]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access (топик не закрыт, можно добавлять)  [new]
Kroko
Member

Откуда:
Сообщений: 1
Access 2003.
Есть главная форма, внутри которой подчиненная.
Подчиненная выполнена в табличном виде и на ее первом поле висит макрос, который по клику на это поле открывает другую форму.
При открытии главной формы, в какую бы точку подчиненной формы не кликнешь - срабатывает это макрос, но самое странное, что срабатывает только 1 раз, т.е. сразу после открытия формы. При этом он нормально продолжает отрабатывать при клике на нужное поле.
Не понимаю в чем дело и как такое возможно.
16 июл 13, 09:40    [14571149]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Баги Access (топик не закрыт, можно добавлять)  [new]
hardfate
Member [скрыт]

Откуда:
Сообщений: 8
я вообще пока себе не скачал офис 2013, один очень важный документ открыть по асесу не мог, а надо было срочно, ппц
24 июл 15, 16:41    [17931234]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access (топик не закрыт, можно добавлять)  [new]
__Michelle
Member

Откуда:
Сообщений: 2786
hardfate,

И в чем баги?
В отсутствии на машине нужной версии Access?
24 июл 15, 16:50    [17931303]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access (топик не закрыт, можно добавлять)  [new]
tanchukz
Member

Откуда: Киев
Сообщений: 1
как по мне вообще баговая система, лучше использовать My SQL
8 авг 15, 11:48    [17992519]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 6 7 8 9 10 11 12 [13] 14 15   вперед  Ctrl
Все форумы / Microsoft Access Ответить