powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Баги Access (топик не закрыт, можно добавлять)
25 сообщений из 370, страница 12 из 15
Баги Access (топик не закрыт, можно добавлять)
    #37578966
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
СавсемГостькагбэ... 1 != -1
И как же это значение 1 сидит в переменной, описанной As Boolean?
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37578986
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

такого можно достигнуть и другими способами, например через LSet. Но данный конкретный случай видится именно багом.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37579248
.ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СанычСавсемГостькагбэ... 1 != -1
И как же это значение 1 сидит в переменной, описанной As Boolean?
Очень просто. Например если WinAPI-функцию, возвращающую BOOL (сиплюсплюсный бул, который на самом деле инт), задекларить как возвращающую Boolean (вебешный), то именно так и будет - в Boolean окажется 1 вместо -1.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37579250
.ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, это не баг аксеса, это баг VB. Или даже скорее так - кривые руки программера, который не умеет апишные функции декларить.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37579381
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело не в единице. Там любое двухбайтное целое может оказаться.
Об эту бяку я споткнулся года 4-5 назад. Кажется, даже топик здесь был.
Тогда официальная дока на некий класс автоматизации сказала мне, что свойство возвращает булеан, во что я поверил, а он, такой-сякой, единицу мне в булеан запихивал.

Сейчас попробовал думать – баг это или фича. Решил, что баг - на таком основании:

Если бы это была фича, то кроме двухбайтных целых можно было бы напрямую, без copymemory или putmem в булеан любую букву запихнуть. Однако, это не так – проверка типа в примере VladK происходит. Значит, какой-то кусок механизма приведения типов отрабатывает (проверка совместимости объявленных типов), а какой-то нет – частично не работает для этого случая встроенное преобразование.
Слово частично означает следующее – если в процедуре GetP присваивать строку "3003" то произойдет преобразование к ближайшему совместимому типу – Integer и значение отлично присвоится в целевой boolean, а если присваивать букву – "K", то произойдет ошибка преобразования типов
Для фичи было бы прилично не проверять совместимость типов совсем и ошибку выдавать как раз для первого случая (попытки присвоения строки "3003") – вроде переполнения целого.
А так получается, что приведение к ближайшему совместимому числовому типу работает, а встроенное преобразование при этом выключается.
Дальше все ломается и логическое значение ведет себя как неотрицаемое - т.е. значение тождественно равно своему отрицанию.
и даже
b = cbool(b) его уже не лечит
Лечить может правильно подобранный OR - типа If b Then (b or -1)



модифицированный тест теста


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
Sub t1()
Dim b As Boolean
GetP b
b = CBool(b)
If b Then
    Debug.Print "check 1: b is true"
Else
    Debug.Print "check 1: b is false"
End If

If Not b Then
    Debug.Print "check 2: b is false"
Else
    Debug.Print "check 2: b is true"
End If

Debug.Print "check 3: b is " & b
Debug.Print b, b Or 4

Dim v As Variant
v = False
GetP v

If v Then
    Debug.Print "check 104: v is true"
Else
    Debug.Print "check 104: v is false"
End If

If Not b Then
    Debug.Print "check 204: v is false"
Else
    Debug.Print "check 204: v is true"
End If

Debug.Print "check 304: v is " & v
Debug.Print v, v Or 4


End Sub

Sub GetP(ByRef pOut As Variant)
  Dim bb As Boolean
  pOut = "3003" 'AscW("K")' "K" '1
     
End Sub

...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37579386
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повтор:
Лечить может правильно подобранный OR - типа If b Then b = (b or -1)
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37579450
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

b=CInt(b)
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37579477
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

у меня соображения, что это баг, примерно те же. Передача варианта параметром по ссылке в процедуру должна быть безопасна и подвергаться необходимой проверке и преобразованию типа, с точки зрения языка, в отличие от небезопасных (отданных на откуп программиста) вызовов LSet, и внешних функций, осуществляющих изменение памяти по переданному адресу. Здесь же кто-то решил срезать угол (или банально недосмотрел), основываясь на единстве внутреннего представления Boolean и Integer. И получился баг компилятора.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37579486
возможно, ОФФ. Если так, - уважаемые модераторы, удалите пост во избежание.

booby,
Дело не в единице. Там любое двухбайтное целое может оказаться.
{могабукаф поскипано}

А маны - для кого?Boolean Data Type


Boolean variables are stored as 16-bit (2-byte) numbers, but they can only be True or False. Boolean variables display as either True or False (when Print is used) or #TRUE# or #FALSE# (when Write # is used). Use the keywords True and False to assign one of the two states to Boolean variables.

When other numeric types are converted to Boolean values, 0 becomes False and all other values become True. When Boolean values are converted to other data types, False becomes 0 and True becomes -1.

ЗЫ: и не "лечить" надо, а курить... всё те-же маны. До полного. И окончательного.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37579509
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедиктbooby,

b=CInt(b)

Да, но это двойное преобразование типа.
Всего лишь подтверждает тИповую неполноценность boolean.

2СавсемГость

я рад тому, что вам хочется что-то сказать.
Жаль только, что вы ничего не говорите.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37579527
booby,
к чему слова, когда на небе звёзды?
Под спойлер из моего предидущего поста заглядывали?
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37579775
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot СавсемГость]...
к чему слова, когда на небе звёзды?
...[quot]

Претензия на дискурс не может заканчиваться просто подъемом к небу глаз.
Попробуйте сформулировать свою идею так, чтобы можно было к ней отнестись как логической пропозиции.
Может быть тогда все читатели одновременно ахнут, и отрукоплещут вас. Или вам.
А пока лишь вспомнается французский горожанин, мечтающий о смене социального статуса.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37580057
booby,
под спойлер -таки не заглядывали :)
Там цитата из справки по VBA:

Boolean Data Type

Boolean variables are stored as 16-bit (2-byte) numbers, but they can only be True or False. Boolean variables display as either True or False (when Print is used) or #TRUE# or #FALSE# (when Write # is used). Use the keywords True and False to assign one of the two states to Boolean variables.

When other numeric types are converted to Boolean values, 0 becomes False and all other values become True. When Boolean values are converted to other data types, False becomes 0 and True becomes -1.


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

ваша цитата:
When other numeric types are converted to Boolean values, 0 becomes False and all other values become True.

Здесь не написано явно, что Not True = False
Значите это не гарантируется и багом не является ситуация, когда not True = True
Иными словами, если Debug.print b показывает True, то не гарантируется,
что debug.print b , not b покажет true, False

Спасибо за разъяснения. Вот теперь все совершенно понятно.

(не знаю только, куда деть такое понимание. Может есть конструктивные предложения?)
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37580158
booby,
Здесь не написано явно, что Not True = False
Значите это не гарантируется и ...
Я процитировал не всю справку по VBA
Сорри, не удержался.

...и багом не является ситуация, когда not True = Trueот комментария воздержусь

Иными словами, если Debug.print b показывает True, то не гарантируется,
что debug.print b , not b покажет true, FalseСовершенно верно. Не гарантируется. Внимательно перечитайте раздел Not Operator в справке VBA.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37580404
.ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажите, может быть в справке (совершенно случайно) написано, что 2*2=4?
Если нет, то наверное не стоит считать багом цифру 5, выданную конструкцией Debug.Print 2*2
Ясность полная.

"не знаю только, куда деть такое понимание" (с)
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37580418
.ЛП,
не поверите, написано. Не дословно, конечно. Но, что есть, то есть.

ЗЫ: вброс защитан!
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37582513
.ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СавсемГостьне поверите, написано. Не дословно, конечно. Но, что есть, то есть.
Не поверите, но если уж "не дословно, конечно", то там написано и про то, что Not True = False
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37582557
.ЛПНе поверите, но если уж "не дословно, конечно", то там написано и про то, что Not True = False
Not True = False
но не
Not 1 = False
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37582568
.ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СавсемГость.ЛПНе поверите, но если уж "не дословно, конечно", то там написано и про то, что Not True = False
Not True = False
но не
Not 1 = False
Сказано же по-русски
Boolean variables ... can only be True or False
Какое слово непонятно? Если все слова понятны, то какое такое 1?

Упорствуете в своём "не баг" - ваше право. Только тогда придётся хелп сжевать. Или перестать на него ссылаться.
Или крестик снять, или трусы надеть.
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37582586
.ЛП,
что ж так разволновало ?
Какое слово непонятно? Если все слова понятны, то какое такое 1?
11774029
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37582657
.ЛПСказано же по-русски
Boolean variables ... can only be True or False

Какое слово непонятно?

.ЛП,
учимся читать всю статью, а не только понравившиеся части:
Use the keywords True and False to assign one of the two states to Boolean variables.

Какое слово не понятно ?
...
Рейтинг: 0 / 0
Баги Access (топик не закрыт, можно добавлять)
    #37582935
.ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СавсемГостьучимся читать всю статью, а не только понравившиеся части:
Use the keywords True and False to assign one of the two states to Boolean variables.

Какое слово не понятно ?
Алё, Вась?
То, что "use keywords" - как то отменяет то, что "can only be"?
Принимается односложный ответ. Типа да/нет/не знаю/знаю, но не скажу.
После этого и поговорим.

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


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