powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / интересные факты / наблюдения / анализ чужих и собственных решений
25 сообщений из 280, страница 5 из 12
интересные факты / наблюдения / анализ чужих и собственных решений
    #37428991
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sator Arepo,

Спасибо! Хорошие ссылки. Читаю и изучаю.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37435722
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы использовать регулярные выражения я создал такую функцию:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function RegularExp(strPattern As String, strText As String) As String
    Static objRegExp As Object
    
    If objRegExp Is Nothing Then
        Set objRegExp = CreateObject("VBScript.RegExp")
        objRegExp.Global = True
    End If
    objRegExp.Pattern = strPattern
    RegularExp = objRegExp.Replace(strText, "")
End Function
И действительно, если мне нужно выбрать все цифры из определённого текста, то получаю вот такой результат:
Код: plaintext
1.
?RegularExp("[^0-9]", "qweqw676q aw76^,eабвгд")
 67676 
А вот если мне нужно выбрать из текста только английские буквы, то попробовал так:
Код: plaintext
1.
?RegularExp("[^A-z]", "qweqw676q aw76^,eабвгд")
qweqwqaw^e
Поначалу не понял, что здесь делает "^" ? Попробовал чуть-чуть по другому задать шаблон.
Код: plaintext
1.
?RegularExp("[^A-Za-z]", "qweqw676q aw76^,eабвгд")
qweqwqawe
Оказывается по умолчанию объект RegExp чувствительный к регистру, да и как-то странно "чувствительный". Никак не ожидал, что в диапазоне "A-z" окажется символ "^". А потом понял, что в диапазоне "A-z" также находятся такие символы как "[\]^_`".
А вот в VBA и в Jet SQL эти символы не входят в данный диапазон.
Код: plaintext
1.
2.
3.
SELECT
    '123^456' Like '*[A-z]*' AS Test1,
    '12z^456' Like '*[A-z]*' AS Test2,
    '[\]^_`' Like '*[A-z]*' AS Test3;
Результат запроса:
Код: plaintext
 0 , - 1 ,  0 
У объекта RegExp есть ещё одно свойство - " IgnoreCase ", которое как раз и рассчитано на "чувствительность к регистру".
Пробую так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function RegularExp(strPattern As String, strText As String) As String
    Static objRegExp As Object
    
    If objRegExp Is Nothing Then
        Set objRegExp = CreateObject("VBScript.RegExp")
        objRegExp.Global = True
        objRegExp.IgnoreCase = True
    End If
    objRegExp.Pattern = strPattern
    RegularExp = objRegExp.Replace(strText, "")
End Function

Код: plaintext
1.
?RegularExp("[^A-Z]", "[\]^_`{}Aa")
Aa
Теперь чтобы не попали "случайные" символы я должен указать диапазон "A- Z " или же " a-z ".
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462288
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся как-то с одной проблемой: есть таблица с несколькими полями, из которых в соответствии с требованиями бизнес правил 4 поля (условно назову Field1, Field2, Field3, Field4) должны были всегда либо заполнены, либо пустые, т.е. частичное заполнение не допускается.
Тогда я на стороне SQL Server создал вот такой Check Constraint:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ALTER TABLE dbo.Table1 WITH CHECK ADD  CONSTRAINT [CK_Table1] CHECK 
    ((CASE WHEN Field1 Is Null THEN  1  ELSE  2  END) +
    (CASE WHEN Field2 Is Null THEN  2  ELSE  3  END) +
    (CASE WHEN Field3 Is Null THEN  3  ELSE  4  END) +
    (CASE WHEN Field4 Is Null THEN  4  ELSE  1  END) =  10 )
GO

ALTER TABLE dbo.Table1 CHECK CONSTRAINT [CK_Table1]
GO
А в "родных" таблицах MS Access этот же Check Constraint выглядел бы примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub SetCheckConstraint()
    Dim strSQL AS String

    strSQL = "ALTER TABLE Table1 ADD CONSTRAINT CK_Table1 CHECK (" & _
        "IIf(IsNull(Field1), 1, 2) + IIf(IsNull(Field2), 2, 3) + " & _
        "IIf(IsNull(Field3), 3, 4) + IIf(IsNull(Field4), 4, 1) = 10);"
    CurrentProject.Connection.Execute strSQL
End Sub

Т.е. идея данного Check Constraint состоит в том, что в случае заполнения всех полей или наоборот не заполнения всегда получим в сумме 10, а если хотя бы одно поле не заполнено, тогда как остальные поля заполнены, то уже сумма никак не получится 10.
Конечно можно было бы переписать данный код и таким образом:
Код: plaintext
1.
2.
3.
strSQL = "ALTER TABLE Table1 ADD CONSTRAINT CK_Table1 CHECK (" & _
    "IIf(IsNull(Field1), 1, 0) + IIf(IsNull(Field2), 1, 0) + " & _
    "IIf(IsNull(Field3), 1, 0) + IIf(IsNull(Field4), 1, 0) IN (0, 4));"
End Sub
Но насколько мне известно IN работает точно также как и OR. И я решил обойтись без него. :)

Есть ли у кого-нибудь другая более "продвинутая" идея, более красивое решение?

Вот пример красивого решения другой проблемы:
если нам нужно отфильтровать данные за текущий месяц, то можно использовать вот такой код а запросах:
Код: plaintext
WHERE Month([SomeDate]) = Month(Date()) AND Year([SomeDate]) = Year(Date())
или такой:
Код: plaintext
WHERE Format([SomeDate], "yyyymm") = Format(Date(), "yyyymm")
Но мне больше нравится вот такой вариант (на днях в каком-то топике полином показывал)
Код: plaintext
WHERE DATEDIFF("m", [SomeDate], Date()) =  0 

Вот и думаю, а может действительно есть более "красивый" и эффектный Check Constraint?
P.S. Вопрос чисто из разряда "спортивный интерес". :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462336
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenТ.е. идея данного Check Constraint состоит в том, что в случае заполнения всех полей или наоборот не заполнения всегда получим в сумме 10, а если хотя бы одно поле не заполнено, тогда как остальные поля заполнены, то уже сумма никак не получится 10.

Можно сэкономить 8 вызовов функций (4 раза IIF, 4 раза IsNull):
Код: plaintext
1.
strSQL = "ALTER TABLE Table1 ADD CONSTRAINT CK_Table1 CHECK (" & _
    "(([Field1] Is Null)+([Field2] Is Null)+([Field3] Is Null)+([Field4] Is Null)) In (0,-4));"
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462367
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwrqwr,

Хороший вариант. :)
А вот в SQL Server наверное без CASE WHEN ... THEN ... перевести нельзя?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462377
alvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,

так в последнем варианте ведь нет iif или case.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462388
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenА вот в SQL Server наверное без CASE WHEN ... THEN ... перевести нельзя?Напрямую нельзя, т.к. там нет логического типа данных, а в Access - есть, да еще и участвующий в неявных преобразованиях (в 0 или -1).
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462523
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenСтолкнулся как-то с одной проблемой: есть таблица с несколькими полями, из которых в соответствии с требованиями бизнес правил 4 поля (условно назову Field1, Field2, Field3, Field4) должны были всегда либо заполнены, либо пустые, т.е. частичное заполнение не допускается.
Тогда я на стороне SQL Server создал вот такой Check Constraint:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ALTER TABLE dbo.Table1 WITH CHECK ADD  CONSTRAINT [CK_Table1] CHECK 
    ((CASE WHEN Field1 Is Null THEN  1  ELSE  2  END) +
    (CASE WHEN Field2 Is Null THEN  2  ELSE  3  END) +
    (CASE WHEN Field3 Is Null THEN  3  ELSE  4  END) +
    (CASE WHEN Field4 Is Null THEN  4  ELSE  1  END) =  10 )
GO

ALTER TABLE dbo.Table1 CHECK CONSTRAINT [CK_Table1]
GO
А в "родных" таблицах MS Access этот же Check Constraint выглядел бы примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub SetCheckConstraint()
    Dim strSQL AS String

    strSQL = "ALTER TABLE Table1 ADD CONSTRAINT CK_Table1 CHECK (" & _
        "IIf(IsNull(Field1), 1, 2) + IIf(IsNull(Field2), 2, 3) + " & _
        "IIf(IsNull(Field3), 3, 4) + IIf(IsNull(Field4), 4, 1) = 10);"
    CurrentProject.Connection.Execute strSQL
End Sub

Т.е. идея данного Check Constraint состоит в том, что в случае заполнения всех полей или наоборот не заполнения всегда получим в сумме 10, а если хотя бы одно поле не заполнено, тогда как остальные поля заполнены, то уже сумма никак не получится 10.
Конечно можно было бы переписать данный код и таким образом:
Код: plaintext
1.
2.
3.
strSQL = "ALTER TABLE Table1 ADD CONSTRAINT CK_Table1 CHECK (" & _
    "IIf(IsNull(Field1), 1, 0) + IIf(IsNull(Field2), 1, 0) + " & _
    "IIf(IsNull(Field3), 1, 0) + IIf(IsNull(Field4), 1, 0) IN (0, 4));"
End Sub
Но насколько мне известно IN работает точно также как и OR. И я решил обойтись без него. :)

Есть ли у кого-нибудь другая более "продвинутая" идея, более красивое решение?
...

Термины вроде "красивое" и "изящное" плохи тем, что предполагают наличие развитых навыков мышления и надежную систему оценок среди любителей красоты.
Разумно понизить градус и заменить красивое на прикольное.
Есть ли варианты прикольнее?
Если 4 поля числовые, то все заполнены можно сформулировать так
(sgn(a)*sgn(b)*sgn(c)*sgn(d)) is not null
(в расчете на то, что sgn в jet сможет принять null-значения)
а все пропущены так
(a+b+c+d) is Null

для строковых полей можно записать что-то такое
все заполнены
(sgn(len(a))*sgn(len(b))*sgn(len(c))*sgn(len(d))) is null
все пропущены
(a+b+c+d) is Null
или
(len(a)+len(b)+len(c)+len(d)) is Null

в принципе, вариант для строк м.б. применим и для чисел.

Выбирая между прикольными и нормальными вариантами можно руководствоваться
1)решением о том, какой из вариантов наиболее прямо выражает намеренеия создателя
2) какой из вариантов выглядит привлекательнее с точки зрения последующего сопровождения.
как-то так...

ясно ли читателю, почему создатель написал
(sgn(a)*sgn(b)*sgn(c)*sgn(d)) is not null

а не
(a*b*c*d) is not null
?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462525
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опечатка, д.б. так

все заполнены
(sgn(len(a))*sgn(len(b))*sgn(len(c))*sgn(len(d))) is not null
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462567
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
врядли это чем-то лучше уже предложенного ... просто - "в копилку" ))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table #t (f1 int, f2 int, f3 int, f4 int)


alter table #t add check 
(
	isnull(cast(f1 as bit), 0 ) & isnull(cast(f2 as bit), 0 ) & isnull(cast(f3 as bit), 0 ) & isnull(cast(f4 as bit), 0 )= 1 
	or
	isnull(cast(f1 as bit), 0 ) | isnull(cast(f2 as bit), 0 ) | isnull(cast(f3 as bit), 0 ) | isnull(cast(f4 as bit), 0 )= 0 	
)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
insert into #t
select  1 ,  2 ,  3 ,  4 

insert into #t
select  1 ,  2 ,  3 , null

insert into #t
select  1 ,  2 , null, null

insert into #t
select  1 , null, null, null

insert into #t
select null, null, null, null

--
select * from #t

--
drop table #t
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462598
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёврядли это чем-то лучше
хуже =)
Код: plaintext
1.
insert into #t
select  0 ,  0 , null,  0 
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462611
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
qwrqwrёврядли это чем-то лучше
хуже =)
Код: plaintext
1.
insert into #t
select  0 ,  0 , null,  0 

хмм, даа ))
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462612
:-Q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
:-Q
Гость
А чем решение в лоб хуже
Код: plaintext
1.
2.
3.
4.
5.
alter table #t add check 
(
	(f1 is null and f2 is null and f3 is null and f4 is null)
	or
	(f1 is not null and f2 is not null and f3 is not null and f4 is not null)
);
?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462621
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем решение в лоб хуже
Код: plaintext
1.
2.
3.
4.
5.
alter table #t add check 
(
	(f1 is null and f2 is null and f3 is null and f4 is null)
	or
	(f1 is not null and f2 is not null and f3 is not null and f4 is not null)
);
?


Так чересчур понятнее получается, не по "индусский".
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462623
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем решение в лоб хуже
Код: plaintext
1.
2.
3.
4.
5.
alter table #t add check 
(
	(f1 is null and f2 is null and f3 is null and f4 is null)
	or
	(f1 is not null and f2 is not null and f3 is not null and f4 is not null)
);
?


слишком явно выражает намерения создателя.
Противно даже сопровождать такое надменное проявление образования.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37462649
:-Q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
:-Q
Гость
согласен.

не по-людски получилось :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474743
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как известно, Mid (Mid$) это функция, которая извлекает часть текста. Как-то мне попался код, где функция Mid "вела себя" не так, как обычная VBA функция. Mid принимала значение, а не возвращала как обычные функции (хотя в справочнике Access'а об этом тоже написано, но я как в справочнике особо не рылся до этого, поэтому для меня было полным неожиданностью этот факт). Вот примерчик:
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub Test()
    Dim S As String
    
    S = "Test!!!"
    Mid(S,  5 ,  3 ) = "..."
    MsgBox S
End Sub
В результате мы получим "Test...".
Т.е. если часть символов в самом тексте надо заменить другими символами, то можно использовать Mid, но только не с правой стороны знака равенства как обычно, а с левой.
А вот Left и Right или другие текстовые функции не обладают таким "даром".
После этого случая я стал искать ещё другие функции, которые могли бы работать как с правой стороны, так и с левой стороны знака равенства (=), т.е. принимать значения, а не только возвращать. Нашёл ещё 2 функции: это Date (или VBA.Date() ) Time (или VBA.Time() ). Эти функции возвращают не только текущую дату и время, но и могут изменить дату и время компьютера (если пользователь имеет права администратора). Больше пока не нашёл встроенных функций, возвращающих и принимающих параметров.

Может быть кто-то подскажет, есть ли ещё такие функции?

Чисто экспериментально выяснил, что пользовательские функции, возвращающие некоторые виды объектных переменных (к сожалению не всех видов), обладают таким свойством. Вот примерчик из Excel'а:
Копируем значение ячейки "A1" в "A2".
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Function SomeRange(Address As String) As Range
    Set SomeRange = Range(Address)
End Function

Sub Test()
    Dim R As Range
    
    Set R = Cells( 1 ,  1 )
    SomeRange("A2") = R
End Sub
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474758
ZezaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,
без обид - чисто для справки...:))
хелпА97
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Инструкция Time
Устанавливает системное время.
Синтаксис
Time = время

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

Дополнительные сведения

Если аргумент время является строкой, инструкция Time пытается 
преобразовать ее в значение времени, используя разделители 
компонентов времени, определенные в текущей системе.  
Если указанную строку не удастся преобразовать в допустимое время, возникает ошибка.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474762
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ZezaMstudieren,
без обид - чисто для справки...:))
Дык, вроде коллега studieren именно это и сказал...

Но зато:

studierenЧисто экспериментально выяснил, что пользовательские функции, возвращающие некоторые виды объектных переменных (к сожалению не всех видов), обладают таким свойством. Вот примерчик из Excel'а:
Копируем значение ячейки "A1" в "A2".
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Function SomeRange(Address As String) As Range
    Set SomeRange = Range(Address)
End Function

Sub Test()
    Dim R As Range
    
    Set R = Cells( 1 ,  1 )
    SomeRange("A2") = R
End Sub

Здесь ничего чудесного нет. Главное то, что объект Range имеет свойство по умолчанию Value. Поэтому если мы ставим такой объект слева от знака присваивания, то мы фактически присваиваем что-то его свойству Value. Точно так же можно поступить, например, с объектом Control.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474774
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч...
Здесь ничего чудесного нет. Главное то, что объект Range имеет свойство по умолчанию Value. Поэтому если мы ставим такой объект слева от знака присваивания, то мы фактически присваиваем что-то его свойству Value. Точно так же можно поступить, например, с объектом Control.

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

P.S. Цена вопроса чисто "спортивный интерес", не более того. :))
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474778
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и главный вопрос: есть ли ещё такие "универсальные" функции помимо Mid, Date и Time?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474791
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
studierenВы не знаете почему такой эффект возможен только с теми пользовательскими функциями, которые возвращают объектный переменный? Вот если функция возвращает число, дату, текст или ещё что-то, то её уже невозможно использовать с левой стороны.
Мне казалось, что я именно на этот вопрос сейчас отвечал, но попробую еще раз. Когда мы пишем оператор присваивания, в котором слева стоит объектная переменная, но в нем нет слова Set, то присваивание идет не самому объекту , а его умолчательному свойству. Если это свойство не read-only, то это работает. Даже если сам объект получен как результат обращения к функции.

studierenНу и главный вопрос: есть ли ещё такие "универсальные" функции помимо Mid, Date и Time?
Увы, не знаю. Сам пользуюсь таким образом только функцией Mid.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474800
Фотография Sator Arepo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,
MSDNVisual Basic имеет функцию Mid и оператор Mid. Оба этих элемента влияют на указанное число знаков в строке, но функция Mid возвращает знаки, в то время как оператор Mid заменяет символы. Дополнительные сведения см. в разделе Оператор Mid.

http://msdn.microsoft.com/ru-ru/library/05e63829(v=vs.90).aspx
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474829
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
Sator Arepostudieren,
MSDNVisual Basic имеет функцию Mid и оператор Mid. Оба этих элемента влияют на указанное число знаков в строке, но функция Mid возвращает знаки, в то время как оператор Mid заменяет символы. Дополнительные сведения см. в разделе Оператор Mid.

http://msdn.microsoft.com/ru-ru/library/05e63829(v=vs.90).aspx
+1
тоже самое и касательно Time / Date

Time
The Time keyword is used in these contexts:

Time Function

Time Statement

---------------
Time Function


Returns a Variant (Date) indicating the current system time.

Syntax

Time

Remarks

To set the system time, use the Time statement.

---------------------------------
Time Statement


Sets the system time.

Syntax

Time = time

The required time argument is any numeric expression, string expression, or any combination, that can represent a time.

Remarks

If time is a string, Time attempts to convert it to a time using the time separators you specified for your system. If it can't be converted to a valid time, an error occurs.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37474875
just another tutor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren...
Может быть кто-то подскажет, есть ли ещё такие функции?
...
[/src]
в VBA еще Calendar

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

Mid с левой стороны присвоения - это "настоящий" statement.
Настоящие statement-ы являются частью языка, описаны в справке и в библиотеке типов VBA не представлены.
(
Как не представлен, например, statement
Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]
)

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


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