Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
есть в VB6 аналог как VBA Nz(траля ля, 0) или Nz(траля ля, "") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 15:32 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
А чем занимается Nz в VBA? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 15:48 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
если значение 0,то преобразует как скажешь к "" или к др ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 15:52 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Я так понимаю тебе нужно Null преобразовать проверяй переменную if xVar is Null Then ............. End if а вообще лучше сразу преобразовать все это дело в SQL запросе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 16:09 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Nz это не VBA это Access (Member of Access.Application) можно так: If IsNull(mVariant) Then mString = "Text" Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 16:25 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
То-то я смотрю, что Nz в ВБА не припомню :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 16:29 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
с помощью if реализовала, но хотела перейти к др варианту, так это лишние проверки, кот занимают ресурсы и память а VBA есть такая штука Nz. Может я неправильно понимаю ее назначение, но она стоит в моем коде и при попадании на нее курсора ошибки не выдается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 16:43 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
почему не VBA? В Access есть VBA, на кот мы и пишим. А что значит это не VBA, а Access ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 16:46 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
iif(isnull(a), 0, a) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 17:03 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
irinka почему не VBA? Внимательно читаем предыдущие посты, если не верим - смотрим Object Browser Nz это не VBA это Access (Member of Access.Application) paparomeiif(isnull(a), 0, a) красиво ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 17:11 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
VBA не VBA, Nz это тот же paparome-ский вариант конвертнутый во встроенную функцию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 17:46 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Это не мой вариант, это почти "классика" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 17:48 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 paparome: о том и речь, но подкинул ты его вовремя, что сказать, МОЛОДЕЦ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 17:49 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Íèêîãäà íå ãîâîðè êîãäà ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2004, 20:41 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Ну я решил для себя этот вопрос так. Public Function nzn(mynull As Variant) As Variant If IsNull(mynull) Then nzn = 0 Else nzn = mynull End If End Function Public Function nzt(mynull As Variant) As Variant If IsNull(mynull) Then nzt = "" Else nzt = mynull End If End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 11:29 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 Yuriy Goodz: А какое отношение эти функции имеют к функции Nz()? Логика функции Nz() состоит в возможности подстановки собственных значений если результирующее значение функции равно False. А в приведенных тобой вариантах возможность подстановки значений отсутсвует. Во вторых, если функция возвращает строго текстовое или числовое значение то зачем хранить эти значения в формате Variant? В третих, если ты переменную MyNull определяешь как Variant, то зачем писать две разные функции, одну для числовый значений а другую для текстовых? Как вариант, напиши одну функцию которая будет проверять сначала формат данный а затем уже значение этих данных. А вообще, eсли следовать твоей логике, то правильный вариант функции будет выглядеть так: Public Function myNz(myValue, myResult As Variant) As Variant If IsNull(myValue) Then myNz = myResult Else myNz= myValue End If End Function Ну это собственно по примерам, а так, конечно лучший вариант это использование функции IIf. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 12:41 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
если NULL надо преобразовать в пустую строку, то я использую следующую конструкцию Код: plaintext 1. -------------------------------------------------- Никогда не говори никогда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 14:04 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
то я использую следующую конструкцию sString = rs.fields("samefield") & "" Привыкнешь, перейдешь на MSSQL, и это тебе ой как откликнется :) А так - да, красиво :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 14:06 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
авторто я использую следующую конструкцию sString = rs.fields("samefield") & "" Привыкнешь, перейдешь на MSSQL, и это тебе ой как откликнется :) Причем тут привязка к базе данных. Это не зависит от базы. Работаю с Access и с MS SQL и все работает. -------------------------------------------------- Никогда не говори никогда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 15:15 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Я имел ввиду, что в T-SQL Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 15:31 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
paparomeЯ имел ввиду, что в T-SQL Тогда ясно, я говорил про VB6 -------------------------------------------------- Никогда не говори никогда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 16:07 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Я понял о чем речь :) Суть в том, что привычка - страшная штука и иногда пытаешься проделывать "несовместимые" финты :( (т.е. переносишь "не сознательно" логику программирования с одного языка на другой, не задумываясь о последствиях) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 16:10 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Ребят не совсем правильно поняли суть вопроса и значение функции Nz Ваш IsNull() кроме самого значение Null ничего больше не отловит В то время как сила(удобство) функции Nz() (из VBE; VBE-среда visual basic в Access) отлавливает все возможные варианты нулевости (что очень бывает нужно в запросах): 1. s="" (Dim s as String) 2. i=0 (Dim i as Long/Integer/Double) 3. v=Null (Dim v as Variant) 4. o=Nothing (Dim o as Object) Соответственно чтобы сотворить свой аналог Nz(), надо в выше приведенных примерaх функций заменить IsNull() на например такой IsNullMy() Код: 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. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 18:25 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2SergeySV где это ты нашёл, что Nz может работать с объектами и отлавливать Nothing? Шайтан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 19:04 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Увлекся привык уже к своей MyNz(), которая со всеми работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 10:18 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 EDUDK01 Да, так будет точнее. Запамятовал.Зациклился на IsNull. Твой вариант лучше. А использовать iif не лучше, так как конструкция получается длиннее :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 12:51 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 SergeySV Фэнкс за функшн. Пигодится :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 12:52 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Интересно, кто-нибудь сможет меня убедить, что эта функция работает не так, как NZ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 13:11 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 Goodzvb: IIf(myValue <> IsNothing, myValue, "Nothing")И все, где же длиннее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 13:51 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Хоть они и не все точно иммитируют Access\'овской Nz Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 14:56 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 marvan -)) для полноты картины не хватает варианта запуска с отсутствующим вторым параметром сравнения в режме компиляции native и pCode в данном случае, картинку, скорее всего, не изменят. ЗЫ ИМХО, для начала, корректней было бы росто "проверить функционал" - соответствие поведения имитируемому объекту - Access.NZ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 15:24 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 marvan кстати, поделитесь секретом - как Вам удалось заставить работать вот это Код: plaintext 1. 2. 3. 4. 5. да еще и время намерить... ))) (это шутка - без обид) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 15:31 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 Marvan: функция F3 здесь как оказалась? Она же работать не будет. Ну присвоит она всем "нулевым" значениям Nothing и что? А с остальными то значениями она что делать будет? 2 All: Кстати если IsNull заменить на Len(myValue), то должно работать еще быстрее, потому как в начале каждой строки идет инфо о ее длине, соответственно не надо анализировать содержание самой строки. И потом кто нибудь замерял как быстро Nz работает в аксесе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 15:35 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 marvan я понял "секрет" - option explicit "не стояло". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 15:37 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Знаете, за что я недолюбливаю Access? Если в проекте добавить Reference на C:\Program Files\Microsoft Office 2003\OFFICE11\msacc.olb - Microsoft Access 11.0 Object (возможны другие варианты) то в своём коде можно пользовать родную Nz Ex: mStr = Nz(myValue, "Nothing") Так вот время которое она показала в вышеуказанном тесте: 1,419136 ' после Dim myValue As Variant 0,889835 ' после myValue = Null 0,633024 ' после myValue = "Value" 2 Victosha Код: plaintext 1. Immediate: Nothing Nothing Value Всё работает. время по QueryPerformanceFrequency и QueryPerformanceCounter ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 15:52 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 Marvan круто, в самом аксесе лучше свои аналоги NZ создавать, причем выходит любой вариант кроме F3 будет лучше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 16:04 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 EDUDK01: А ещё лучше если им (Access'ом) не пользоваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 16:10 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 marvan поставь в заголовке модуля Option Explicit PS в VB это завсегда так - "все работает". А что там работает? Да разве это важно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 16:10 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Результаты забега: c Option Explicit и Dim IsNothing As Variant для iif варианта Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 17:17 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
надо создать "Test Poll" где будут храниться варианты решений с анализом производительности :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 17:31 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 marvan версия windows - какая - прям раззадорил своими замерами. если нт-айк, может ввечеру попробую "пооптимизировать". Полной оптимизации не обещаю. ЗЫ сравнивать с вызовом из Access - ИМХО - некорректно. c Access нужно сравнивать "функционал" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 17:51 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 Victosha: A в чем функционал первых 3 функций уступает аксесовскому Nz? Если же всетаки уступает, то хотелось бы знать в чем и насколько это важно, потому что все таки производительность у них конкретно разная. Мне например это интересно потому что я не ожидал именно такой разницы в производительности. А еще мне вот что интересно, несмотря на идентичность конструкции в двух случаях быстрее работает F2 а в одном F4. Причем конструкция F4 позволяет быстрее анализировать данные формата Variant, а F2 быстрее анализирует "явные" форматы типа String и Numeric. Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 18:04 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
f2 и f4 сравнивать бестолку. На глаз, разница во времени в пределах погрешности. Тестирование велось под WinXP VB6 SP5 в откомпиллированном exe. Результаты с вызовом Nz из Access не удивительны, если учесть, что идёт вызов метода объекта. Вероятнее всего, в самом Access работать будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 18:33 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 EDUDK01 авторA в чем функционал первых 3 функций уступает аксесовскому Nz? 1) Код: plaintext смысл ЭТОГО изобретения- с Вашего позволения -без комментариев. прим. про скорость: IIF() ВСЕГДА (и в VB и в VBA и во всех 32-разрядных версиях) медленнее, чем IF THEN ELSE ENDIF 2) Код: plaintext 1. 2. 3. 4. 5. возвращает принудительно строковое значение - годится инлайн только для строкового приемника, требует обхождения с mStr = "Nothing" по месту. 3) Код: plaintext 1. 2. 3. 4. 5. 6. много лучше вышеперечисленного - очень близко. Несоответствует интерфейсу NZ - у него второй параметр не обязательный. автор в двух случаях быстрее работает F2 а в одном F4 NZVB пыталась писаться (мною) в расчете на то, что в большинстве случаев входящее значение НЕ НУЛЛ. На таких входных данных она должна быть в среднем быстрее. автор myNZ предполагает обратное. - это "минорные" различия. Это просто "глубокий тип для мухоловов" - в ветку выполненного условия VB входит чуть-чуть быстрее, чем в ветку ELSE. PS правда, я так и не дождался доказательств несоответствия NZVB работе Access.NZ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 18:44 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 marvan про WinXP - понял можно попробовать "ускорить" - пока не знаю - будет ли толк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 18:50 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
вопрос про ускорение снимаю. надежно измеримого результата получить не удается. Похоже, исходный вариант - практически оптимальный. (разве что явно ByRef прописать... - ...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 02:57 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Народ, перестаньте стебаться, в наше время гигагерцев спорить о скорости работы отдельной функции - это издевательство над самим собой Все, кому нужно скорость и маленький код пишут на Сях и прочих масянях (или хотбасиках с мощнобасиками ) Г.Ы. хотя конечно прикольно. Дружно "порадовались" за САКСЕСС всем отделом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 09:52 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
авторНарод, перестаньте стебаться честно говоря, я отношусь к этому по другому автор...(тут почикано)...в наше время гигагерцев спорить о скорости работы отдельной функции - это издевательство над самим собой оптимизация под некую цель - это не издевательство - это программистская ТЕХНИКА. Просто часть ремесла. Где и как она сгодится - вопрос отдельный. И однажды влезши в "модельную" задачку - почему бы и не посмотреть, где границы разумного. авторВсе, кому нужно скорость и маленький код пишут на Сях и прочих масянях (или хотбасиках с мощнобасиками само по себе все вышеперечисленное среднестатистически не обгонит native компилированный VB-проект более чем на 15-25%. Лично я к цифре около 20 склоняюсь. Если ты знаешь ПОЧЕМУ мощнобасик (или си++) окажется быстрее, то знаешь КАК ускорять VB, чтобы элиминировать эти 20%. На задачах связанных с перемещениями/копированиями больших объемов информации в памяти - может не спасти НИКАКОЙ мощнобасик, поскольку в таких задачах организация данных + алгоритм, а не язык реализации определяют результат. Который в лучшем случае будет отличатся на порядки (межу плохо/хорошо), а в худшем - будет нелинейно зависить от объема данных. ЗЫ а то, что за результат порадовались - это хорошо. ЗЫ2 - это я не со зла - просто утро еще не прошло - никак не проснусь толком... )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 11:03 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 Victosha: По поводу вчерашнего топика 13:11. Разница все таки есть. Функция NZVB обнуляет несуществующие значения, а аксесовская NZ их "игнорирует". Для устранения разницы нужно заменить константу vbEmpty (имеет значение 0) на выражение "". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 12:07 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
2 EDUDK01 спасибо за замечание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 12:12 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Выходит что этот вариант самый оптимальный: Public Function NZVB(tValue As Variant, Optional substValue) As Variant If Not IsNull(tValue) Then NZVB = tValue Else If Not IsMissing(substValue) Then NZVB = substValue Else NZVB = "" End If End If End Function Ветки проверяющие значение substValue поменял местами, так как в большинстве случаев эти значения не будут равны IsMissing. И еще попутный вопрос, если эту строку Not IsNull(tValue) заменить на Not Len(myValue) = 0 то вроде должно будет работать быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 12:33 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 13:33 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
1) Len(myValue) = 0 так писать нельзя В ПРИНЦИПЕ. при myValue = Null управление будет уходить "не туда". 2) "" - мне не нравится - проверять щас некогда, но "на глаз" это хуже vbEmpty. для начала вместо VBNZ=vbEmpty или чего другого я бы просто Exit Function поставил (до опыта ожидал бы, что это то же самое, что vbEmpty присвоить)... Короче, замечание про vbEmpty принято к сведению, думать буду "потом", потому как прямо щас - в поту. Извините. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:06 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
да, забыл tValue <> Null - хороший и, на первый взгляд - "чистый" вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:07 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
новый вариант с учетом поправок :) Public Function myNz(myValue, Optional myResult As Variant) As Variant If myValue <> Null Then myNz = myValue Else If Not IsMissing(myResult) Then myNz = myResult End If End If End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:39 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
замена "" на vbNullString - ухудшает результат, а на vbEmpty - не заметно изменений Странно всё это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:39 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
авторзамена "" на vbNullString - ухудшает результат на днях встретил такой "тип" - vbNewLine работает БЫСТРЕЕ, чем vbCrLf ))) проверил - правда. кстати, marvan с <> Null - поздравляю. Отличный пример ЧЕСТНОЙ оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:47 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Результаты забегов. Скоро начну принимать ставки :-) Dim myValue As Variant 0,040235 - f1 (IIf) 0,037075 - f2 (NZVB) 0,036335 - f4 (myNz) 9,287639 - f5 (Nz) 0,035006 - f6 (NZVB - new) 0,028769 - f7 (nzm) 0,028142 - f8 (myNz1 - new) myValue = Null 0,024619 - f1 0,027512 - f2 0,025877 - f4 6,828931 - f5 0,027280 - f6 0,023903 - f7 0,027324 - f8 myValue = "Value" 0,040099 - f1 0,028652 - f2 0,025586 - f4 6,609823 - f5 0,025359 - f6 0,024330 - f7 0,027525 - f8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 14:58 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
обработанные результаты, в порядке убывания: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 15:34 |
|
||
|
есть в VB6 аналог Nz как в VBA
|
|||
|---|---|---|---|
|
#18+
Позволю себе несколько заключительных замечаний. 1) vbEmpty. Пока ехал домой, до меня дошло, в чем дело. Это ж надо ТАК проколоться… Уши, наверно, еще долго гореть будут. Ну, уж – топором не вырубишь. Эхь – и почему мне привиделось, что это константа для неинициализированного варианта, когда это простой Integer из набора vbVarType, СООТВЕТСТВУЮЩИЙ VarType-у неинициализированного Variant. Голову пеплом посыпаю, а оправдываться/объясняться - бесполезно. В общем, - выпендрился. 2) Не нравится “”. Общее между “” присваиваемого в качестве возвращаемого значения функции и неинициализированным Variant-ом то, что в поле значения у обоих ноль. Разница в заключается в следующем. В первом случае - функция возвращает Variant подтипа «Строка», что может приводить к неверному опознаванию «подлежащего» типа в циклических операция и, потенциально, – ошибке времени исполнения - «несоответствие типов». Второй вариант универсально приводится к типам, пригодным для приема значений, возвращаемых NZ. То есть, при получении на вход Null функция NZ обязана возвращать неинициализированный вариант. Что я по уродски пытался изобрАзить возвратом vbEmpty. Спасибо EDUCK обратил внимание, а то бы я, наверно, еще долго не догадывался, ЧТО нашкрябал. 3) <> Null. В этом месте обнаружилась особенность. <> Null приводит к поведению, не соответствующему NZ при передаче на вход функции МАССИВА. NZ безропотно возвращает этот массив «назад», а <> Null вызывает ошибку времени исполнения. Если бороться за ТОЧНОСТЬ воспроизведения поведения NZ, придется остановиться на IsNull. Эквивалентно Not IsNull должно вести себя выражение VBA.VarType(testVal) <> vbNull. По скорости оно не выигрывает, а по лаконичности – проигрывает. Таким образом, функция (по моим текущим представлениям ) точно воспроизводящая NZ должна выглядеть так Код: plaintext 1. 2. 3. 4. 5. 6. ЗЫ Напоследок. Почему я назвал tVar<> Null “Правильной оптимизацией”. Основным напрвлением «ускорения» VB – кода в режиме native – компиляции я считаю инлайн замену «библиотечных» функций. Например, мною проверено, что инлайн замена InStr на перебор массива интов ускоряет native – код в среднем почти вдвое. На всякий случай – абсолютно вредное действие при работе во всех вариантах p-кодного исполнения, включая MS Office. В этом смысле - tVar<> Null – «ПРАВИЛЬНОЕ РЕШЕНИЕ» для native-компилированного проекта. Больше в этой функции содержательно «оптимизировать» нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 01:38 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2169436]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
79ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 387ms |

| 0 / 0 |
