powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / интересные факты / наблюдения / анализ чужих и собственных решений
25 сообщений из 280, страница 6 из 12
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474876
авторЕсли для объекта не определено свойство по умолчанию, то возвращающая его функция не может оказаться слева.
подразумавается - в обсуждаемом контексте не может, т.е. не может без дополнительных квалификаторов.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474886
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just another tutor...
Если для объекта не определено свойство по умолчанию, то возвращающая его функция не может оказаться слева.
Не так категорично.
Может, но с явным указанием свойства объекта.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
'Class Module "clsItem":
Option Explicit
Public Value As Long

'Module
Public Function GetItem() As clsItem
    Static Item As New clsItem
    Set GetItem = Item
End Function

Public Sub Test()
    Debug.Print GetItem.Value
    GetItem.Value =  5 &
    Debug.Print GetItem.Value
End Sub
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474887
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долго писал, сори. :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474888
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
just another tutorв VBA еще Calendar

Посмотрите в просмотрщик объектов. Date и Time - там описаны не как функции, а как property.
Раз не сказано, что read-only property, значит могут как отдавать так и принимать значения.
Если для для объекта определено одновременно и свойство get и свойство set/let? то имя свойства может быть
как слева так и справа в операторе присваивания значения.
Этак можно и до обычных переменных дойти.

Dim a As Integer
a = 8
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474896
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч... обычных переменных ...
:)
А через функцию с "обычной" переменной не "дойдем".
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474897
just another tutor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЭтак можно и до обычных переменных дойти
можно и дойти, если это по какой-то причине плохо или хорошо.
Пока мне не удается расшифровать смысл твоего высказывания.

так написать можно
Код: plaintext
1.
Dim a As Integer
a =  8  

а так нельзя
авторDim a As Integer
8=a

и так нельзя
авторDim a As Integer
8=a

Хорошо было бы определиться - что нам необходимо сделать:
осудить самы возможность использования Date и Time в качестве приемника значения
или научиться понимать, что происходит или может происходить, когда кто-то способен выступать в качестве приемника значения.

Подвох во всей этой истории только в том, что Mid = a&b&c - не имеет ничего общего с Date = #литерал или выражение#
хотя и выглядит похожим образом
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474899
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
nord-woolfВладимир Саныч... обычных переменных ...
:)
А через функцию с "обычной" переменной не "дойдем".
Once more, please?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474900
и
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и
Гость
автори так нельзя
автор
Dim a As Integer
8=a

подразумевалось
Dim 8 As Integer
8=a
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474902
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Саныч,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private A As Integer

Public Function GetA() As Integer
    GetA = A
End Function

Public Sub Test()
    Debug.Print GetA
    GetA =  5 
    Debug.Print GetA
End Sub
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474903
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
just another tutorможно и дойти, если это по какой-то причине плохо или хорошо.
Пока мне не удается расшифровать смысл твоего высказывания.
Мы ищем вещи, которые обычно используются справа, но допускают и использование слева, что может явиться сюрпризом для неискушенных. Функция (например, Mid) этому критерию отвечает. Переменная, даже если она является свойством объекта, - вряд ли.

just another tutorа так нельзя
авторDim a As Integer
8=a
Нет, про константы я такого не говорил. Хотя сюрприз тоже был бы, если бы.

just another tutorи так нельзя
авторDim a As Integer
8=a
У меня дежа-вю или тут действительно написано два раза одно и то же?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474904
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
иподразумевалось
Dim 8 As Integer
8=a
Ну ваще.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474905
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
nord-woolf GetA = 5
А что, кому-то здесь неизвестно, что так нельзя?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474907
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
А я почем знаю?
Я вот только сегодня узнал, что переменные бывают "обычными".
Наверно и "необычные" бывают.
:)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474908
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Тьфублин. Ну а как назвать переменную, чтобы было понятно, что имеется в виду именнопеременнаяанефункцияинесвойствоинеещечтонибудь?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474911
just another tutor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПеременная, даже если она является свойством объекта, - вряд ли.

Я Вам как человек необразованный скажу.
Остановиться, оно конечно, обязательно где-то надо.
Иначе глупости не избежать.

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

С публичными переменными-членами класса можно обходиться так, как показал nord-woolf
Визуально это не должно вызывать вероятного удивления, в отличие от удивления, представленного в цитируемом тексте
studierenВладимир Саныч...
Здесь ничего чудесного нет. Главное то, что объект Range имеет свойство по умолчанию Value. Поэтому если мы ставим такой объект слева от знака присваивания, то мы фактически присваиваем что-то его свойству Value. Точно так же можно поступить, например, с объектом Control.

Добрый вечер уважаемый Саныч!
Вы не знаете почему такой эффект возможен только с теми пользовательскими функциями, которые возвращают объектный переменный? Вот если функция возвращает число, дату, текст или ещё что-то, то её уже невозможно использовать с левой стороны.
Да и что касается свойства объекта по умолчанию, я думаю Вы правы на все 100 %. :)

P.S. Цена вопроса чисто "спортивный интерес", не более того. :))

Если я правильно понимаю, предмет удивления - в отсутствии квалификации приемника.
Тем самым в присутствии свойства по умолчанию.
Иначе просто видно глазами - кто что кому присваивает.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474912
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
Ну надо-же по брюзжать на ночь глядя? :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474913
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
just another tutorЯ Вам как человек необразованный
А вот это не надо, это не надо. Я тут своей необразованностью много кого переплюну.

just another tutorВ Vba переменная-член класса и свойство могут вести себя сходным образом,
но не являются синонимами.
Это понятно. Но очевидно, что свойство МОЖЕТ вести себя как переменная. Причем не где-нибудь, а в простейшем случае. Так что удивления тут не будет.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474914
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
nord-woolfВладимир Саныч,
Ну надо-же по брюзжать на ночь глядя? :)
Да!
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474919
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч... Ну а как назвать переменную, чтобы было понятно, что имеется в виду именнопеременнаяанефункцияинесвойствоинеещечтонибудь?
Может так?:
Свойство, описанное переменной
vs
Свойство описанное процедурами(процедурой) свойств.

ps. Все-все, ушел спать.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474936
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
nord-woolfСвойство, описанное переменной
Это в ответ на "переменная, а не свойство"?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37551351
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы превратить строку в тип данных "дата" нужно использовать функцию CDate или DateValue . Но тут есть одна засада: данные функции в зависимости от региональных настроек Windows возвращают разные результаты, а иногда вообще ошибку.
Допустим, у нас есть строка в американском стиле и мы хотим в любом случае получить соответствующую дату. Я для этого создал функцию "ConvDate", где есть необязательный параметр "Style". Если в параметре указать "EN" или "English" или "US", то функция попытается преобразовать строку в дату сначала в американском стиле. Если не получится, то с помощью CDate.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Function ConvDate(DateString As String, Optional Style As String) As Date
    Dim DateResult As Date
    
    On Error Resume Next
    Select Case Style
    Case "EN", "English", "US"
        If DateString Like "[#]*[#]" Then
            ConvDate = Eval(DateString)
        Else
            ConvDate = Eval("#" & DateString & "#")
        End If
        If Err.Number <>  0  Then
            ConvDate = DateValue(DateString)
        End If
    Case Else
        ConvDate = DateValue(DateString)
        If Err.Number <>  0  Then
            If DateString Like "[#]*[#]" Then
                ConvDate = Eval(DateString)
            Else
                ConvDate = Eval("#" & DateString & "#")
            End If
        End If
    End Select
End Function

А вот и результат экспериментов:
Код: plaintext
1.
2.
3.
?ConvDate("31-JAN-2011")
 31 . 01 . 2011  
?ConvDate("31-ЯНВ-2011")
 31 . 01 . 2011  
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37551580
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(для текстов, совпадающих с текущей локалью)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub test()
  Dim s As String, s2 As String, s3 As String
  
  Dim d As Date, d2 As Date, d3 As String
  
  s = "12/31/2011"
  d = Format(s, "mm\/dd\/yyyy")
  
  s3 = "15-06-2011"
  d3 = Format(s3, "dd-mm-yyyy")
  
  s2 = "20 декабря 2010"
  d2 = Format(s2, "dd mmmm yyyy")
  Debug.Print d, d3, d2
End Sub

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub test()
  Dim s As String, s2 As String, s3 As String
  
  Dim d As Date, d2 As Date, d3 As String
  
  s = "12/31/2011"
  d = Format(s, "mm\/dd\/yyyy")
  
  s3 = "15-06-2011"
  d3 = Format(s3, "dd-mm-yyyy")
  
  s2 = "20 декабря 2010"
  d2 = Format(s2, "dd mmmm yyyy")
  Debug.Print d, d3, d2
End Sub

поищите - на форуме есть примеры, как подменить локаль на время выполнения процедуры

Вы наверное не поняли мой пост. Я попытался создать универсальную функцию, которая по возможности все строки в любом формате превращает в дату вне зависимости от настройки Windows. К примеру, допустим у Вас Windows настроен на русскую интерпретацию даты, но в тоже время у Вас строка на английский лад. Как Вы собираетесь преобразовать строку?
Пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
?ConvDate("31-December-2001")
 31 . 12 . 2001  
?ConvDate("31-Декабря-2001")
 31 . 12 . 2001  
?ConvDate("31-Декабрь-2001")
 31 . 12 . 2001 
?ConvDate("#1/15/2001#")
 15 . 01 . 2001  
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37551987
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы правы. я действительно не понял. Не рассмотрел ваш код.
Это одна сторона монеты.

Другие стороны состоят вот в чем:
1)
Вы заставили на русской локали работать
Код: plaintext
? eval("#15-June-2001#")
и
Код: plaintext
? eval("#June 15 001#")

Подразумевается, что английский язык всегда установлен.

Сможете тем же способом заставить, без установленного немецкого, правильно отработать

Код: plaintext
? eval("#15-Juni-2001#")
или
Код: plaintext
? eval("#Juni 15 2001#")
или
Код: plaintext
? eval("#Dezember 15 2001#")

2) то что
Код: plaintext
1.
2.
? eval("#05/03/2001#")
 03 . 05 . 2001  
это правдоподобно до тех пор, пока не выяснится, что создатель строки подраумевал
5 марта, а не 3 мая.

PS
Это не претензии. Ваша функция хорошая.
Другое дело, что я, как пользователь "библиотечного кода", предпочел бы
функцию с явно задаваемым форматом преобразования и, может быть, явными языковыми идентификаторами в качестве параметров.

В любом случае спасибо.
Поведение eval в этом месте любобытно и малоизвестно.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37553292
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyДругое дело, что я, как пользователь "библиотечного кода", предпочел бы
функцию с явно задаваемым форматом преобразования и, может быть, явными языковыми идентификаторами в качестве параметров.

Забыл написать 1 деталь.
В SQL Server если в строке указать дату в формате 'yyyymmdd', то вне зависимости от настроек сервера всегда дата будет интерпретироваться одинаково:
Код: plaintext
SELECT CAST('20111130' AS Smalldatetime)

Такое же свойство имеется и у Access / VBA, но только чуть-чуть по другому.
Если в строке указать дату в формате "yyyy-mm-dd" (вместо "-" также допускается пробел или слеш "/"), то вне зависимости от региональных настроек функция CDate и Datevalue (да и DateAdd) возвращает ВСЕГДА одинаковую дату.
Код: plaintext
1.
2.
3.
4.
5.
?DateValue("2011 11 1")
 01 . 11 . 2011  
?CDate("2011-11-03")
 03 . 11 . 2011  
?DateAdd("d",  1 , "2011/12/1")
 02 . 12 . 2011 
А вот так уже нельзя, VBA будет ругаться:
Код: plaintext
?DateValue("2011 13 01")

P.S. Как не странно, но в FAQе об этом вообще ни слова.
И там не указана ещё одна деталь:
даты в Access / VBA можно указать и таким образом:
Код: plaintext
SELECT # 01 /JAN/ 2011 #, #February  2   2010 #, # 2011 -MAY  15 #, # 11 / 2009 /Jun#
Т.е. если название месяца указать на английском, то день, месяц, год можно указать в любом порядке. Из этих форматов чаще всего пользуюсь первым способом, т.е. формат #DD/MMM/YYYY#, т.к. полностью исключает разночтение. Думаю даже для новичков будет наиболее "читабельным". :)
...
Рейтинг: 0 / 0
25 сообщений из 280, страница 6 из 12
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / интересные факты / наблюдения / анализ чужих и собственных решений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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