Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите понять зачем у меня тут цикл.
 
 автор: osmor   (22.12.2010 в 10:27)   личное сообщение
 
 

полез кое что поправить в программе. Наткнулся на такой код (обработчики ошибок убрал для простоты)

'---------------------------------------------------------------------------------------
' Procedure : MaskCaseValTok
' Author    : osmor
' Date      : 28.08.2009
' Purpose   : Определение маски больших и маленьких букв для ValTok
'---------------------------------------------------------------------------------------
'
Public Function MaskCaseValTok() As Variant

  
   Dim rst As New adodb.Recordset
   Dim i As Integer

         rst.Open "select valTok , CaseMaskVal from ostmp_tblAlias", CurrentProject.Connection, adOpenKeyset, adLockPessimistic
With rst 
  For i = 1 To 10  ' зачем здечсь этот цикл
        
        Do While Not .EOF
            .Update "CaseMaskVal", CaseToBin(![ValTok])
            .MoveNext
        Loop
        
       .MoveFirst
  Next
 

End With
   rst.Close
    Set rst = Nothing
    
End Function


вот CaseToBin к ней вопросов нет


'---------------------------------------------------------------------------------------
' Procedure : CaseToBin
' Author    : osmor
' Date      : 28.08.2009
' Purpose   : Состаляет маску больших и малельких букв для переданной строки
' для strParam = "AAaaA"  CaseToBin = "11001"
' если все буквы маленькие возвращает "0"
'---------------------------------------------------------------------------------------
'
Public Function CaseToBin(strParam As String) As String
Dim N() As Byte
Dim L() As Byte
Dim i As Integer
Dim intStep As Integer
Const ZERO As String = "0"
Const ONE As String = "1"
If StrComp(LCase(strParam), strParam, vbBinaryCompare) = 0 Then CaseToBin = ZERO: Exit Function
L() = LCase(strParam)
N() = strParam
CaseToBin = String(Len(strParam), ZERO)

intStep = LenB("A")
For i = 0 To UBound(L) Step intStep
    If L(i) > N(i) Then Mid$(CaseToBin, i / intStep + 1, 1) = ONE
Next

End Function



Суть этой операции простая, в таблице есть 2 текстовых поля
Одно с данными второе пустое
Нужно второе заполнить "Маской" где для каждого символа из поля1 будет стоять "1" для ЗАГЛАВНЫХ букв и "0" для маленьких
например:
для поле1 = "AAaaAA"
поле2 будет = "11001"
А вот теперь собственно вопрос
НА КОЙ Х... я поставил в MaskCaseValTok цикл
For i = 1 to 10
никак не пойму его назначение. Функционально он совершенно не нужен... но я его почему-то поставил... может я чего-то не вижу и он НУЖЕН?
Может я просто пытался проверить скорость на больших объемах и потом забыл убрать (заказчик уже год с этим живет.... )

В общем плиз посмотрите, нужен ли этот цикл...
Совсем отупел на своей административной работе

  Ответить  
 
 автор: Balu   (22.12.2010 в 11:05)   личное сообщение
 
 

Я так понимаю, цикл идет по записям открытого Recordset.
Непонятно, зачем он идет 10 раз - в данном контексте цикл не нужен, может быть из цикла For пропал кусок кода?

  Ответить  
 
 автор: kot_k_k   (22.12.2010 в 11:48)   личное сообщение
 
 

убей его - видно что-то проверял вот хвост и остался

  Ответить  
 
 автор: osmor   (22.12.2010 в 11:49)   личное сообщение
 
 

На пропадание куска не похоже...
Но нас уже двое считающих что цикл не нужен.

  Ответить  
 
 автор: Дядя Федор   (22.12.2010 в 11:55)   личное сообщение
 
 

Это не шутка?
Тогда либо он не нужен, либо для задержки исполнения функции

  Ответить  
 
 автор: osmor   (22.12.2010 в 12:08)   личное сообщение
 
 

вопрос не шутка. Реально ломаю голову.
Пока решил что для проверки скорости на больших объемах.
Но может чего не заметил.

  Ответить  
 
 автор: Explorer   (22.12.2010 в 12:21)   личное сообщение
 
 

это чтобы фукция отработала наверняка - десять раз отмерь один раз отрежь!

какая длина стринга под проверку UCase LCase изначально предполагалась?

просто наверное сначала хотел цикл снаружи повесить а потом еще и вовнутрь засунул

  Ответить  
 
 автор: osmor   (22.12.2010 в 12:25)   личное сообщение
 
 

"десять раз отмерь один раз отрежь!"
ага
10 раз поле обновить одним и тем же значением. Что бы наверняка!

"Покончил жизнь самоубийством, тремя выстрелами в висок"
Длина 255

  Ответить  
 
 автор: Explorer   (22.12.2010 в 14:00)   личное сообщение
 
 


Длина 255



тогда вообще нет идей...

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

---------
чутьнезабыл! а еще мне вот это очень панравилось

Const ZERO As String = "0" 
Const ONE As String = "1"


вынос мозга вручную - надо будет куда нибудь присунуть

  Ответить  
 
 автор: osmor   (22.12.2010 в 14:08)   личное сообщение
 
 

а это тоже результат борьбы за быстродействие.

  Ответить  
 
 автор: Explorer   (22.12.2010 в 14:09)   личное сообщение
 
 

но сама формулировочка-то!

а? каково? взрыв мозга

  Ответить  
 
 автор: Lukas   (22.12.2010 в 18:44)   личное сообщение
 
 

"Корова легла поперек борозды,
ей все до ... , и нам до ..."

Компилятору глубоко по барабану (почти), как мы константу обзовем,
он все-равно при компиляции заменит ее своим внутренним идентификатором.

Вот привереда. :)

  Ответить  
 
 автор: Дядя Федор   (22.12.2010 в 15:19)   личное сообщение
 
 


чутьнезабыл! а еще мне вот это очень панравилось

Const ZERO As String = "0"
Const ONE As String = "1"


вынос мозга вручную - надо будет куда нибудь присунуть



Ну ваще-то теория гласит, что стринговые константы полезны. особенно, если вызываются не раз
Типа Public const s_vnim as string = "КУДА ТЫЧЕШЬ?"
msgbox s_vnim как бы быстрее сработает, чем msgbox "КУДА ТЫЧЕШЬ?"

  Ответить  
 
 автор: Explorer   (22.12.2010 в 15:59)   личное сообщение
 
 

федор - ты просто прочти

const zero as string = "0"

разве не смешно? нет?

пошол убиваца оп стену

  Ответить  
 
 автор: osmor   (22.12.2010 в 16:19)   личное сообщение
 
 

да смешно, смешно
не надо "ап стену"

  Ответить  
 
 автор: kot_k_k   (22.12.2010 в 12:23)   личное сообщение
 
 

бок в этом случае мог вывалить если бы при вызове функции происходили изменения какой либо ГЛОБАЛЬНОЙ переменной, но никаких таки переменных нет, в функцию передается каждый раз новое значение и возвращаемое значение основано только на нем - так что цикл просто 10 раз делает одно и тоже и колиечство повторений не меняет картины.

  Ответить  
 
 автор: Силblч   (22.12.2010 в 12:36)   личное сообщение
 
 

вероятно это первая ошибка Копипаста?

  Ответить  
 
 автор: час   (22.12.2010 в 14:03)   личное сообщение
 
 

Я ничё в этом не смыслю.
У самого так бывает. Када писал - была мысль умная - написал код предвосхищая возможное недоразумение.
На трезвую голову через месяц глянешь - нафига это нуно?????????
Удалишь и отправишь заказчику, а он тебе немного погожя:
Ваще-то всё работает, но бывает - вот када тада то никада ни тада.
ЁПРСТ думаешь - точно - это же вот для чего было........
========================================================================
Оставь код - как есть, а то потом (к сожалению) узнаешь, что был не прав - удалив цикл.

  Ответить  
 
 автор: Explorer   (22.12.2010 в 14:07)   личное сообщение
 
 


ЁПРСТ думаешь - точно - это же вот для чего было........



закусывать... тьху - записывать надо!

  Ответить  
 
 автор: час   (22.12.2010 в 14:10)   личное сообщение
 
 

Но есть и второй вариант
При апробации в момент первоначального написания программы
пробовалось
For i = 1 To 10

Затем было заменено на цикл до Eof? что ба наверняка отработать только нужное количество, а For - забыл удалить - к тому же при работе - он нисколько не мешает....
Так и завалялся.
Заремлить его и все дела!!!!!!

  Ответить  
 
 автор: osmor   (22.12.2010 в 14:06)   личное сообщение
 
 

пока убрал цикл. (на 99% это проверка работы на больших объемах)
Прогнал на всех тестовых данных, вроде работает
Отправлю заказчику со словами "внимательно посмотреть результаты обработок"

  Ответить  
 
 автор: Explorer   (22.12.2010 в 14:07)   личное сообщение
 
 


Отправлю заказчику со словами "внимательно посмотреть результаты обработок"



это непрофессионально
оставь как есть и ничего не трогай

  Ответить  
 
 автор: osmor   (22.12.2010 в 14:08)   личное сообщение
 
 

а как надо?

  Ответить  
 
 автор: Explorer   (22.12.2010 в 14:09)   личное сообщение
 
 

НИЧЕГО НЕ ТРОГАЙ!

  Ответить  
 
 автор: час   (22.12.2010 в 14:13)   личное сообщение
 
 

+1
к тому же перед новым годом..........
спешка нужна - весной в кустах
================================================
"внимательно посмотреть результаты обработок"
это может бочком-боком вывалить....

хотя ИХМА говорит - что цикл - мусорный.......

  Ответить  
 
 автор: lukas   (22.12.2010 в 16:11)   личное сообщение
 
 

Это "задел"оптимизации алгоритма. :)

  Ответить  
 
 автор: osmor   (22.12.2010 в 16:18)   личное сообщение
 
 

отличная кстати идея
Понатыкал таких циклов и отдал в эксплуатацию.
Как данных накопилось и стало тормозить можно убрать кое-где со словами
"я тут оптимизировал код, пришлось почти все переписать, 2 недели работал "
ведь ускорение и правда будет заметно...

  Ответить  
 
 автор: Explorer   (22.12.2010 в 16:46)   личное сообщение
 
 

а вот это уже настоящее мастерство :)

  Ответить  
 
 автор: Дядя Федор   (22.12.2010 в 16:50)   личное сообщение
 
 

циники.
Может соберем методы разводы заказчиков.
1. от Osmorа уже есть.
2. Например, повесить в autoexec закрытие по дате.

  Ответить  
 
 автор: osmor   (22.12.2010 в 17:01)   личное сообщение
 
 

Например, повесить в autoexec закрытие по дате


ну тогда уж
del *.*

вообще смех смехом, а мне как-то не по себе, что у заказчика такая заглушка целый год работала.
Правда это только маленький кусочек обработки которая длится 2-3 часа, и задержка там при таких объемах максимум минут 10, но все равно .... Стыдно мне

  Ответить  
 
 автор: Силblч   (23.12.2010 в 11:05)   личное сообщение
 
 


Стыдно мне


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

  Ответить  
 
 автор: osmor   (23.12.2010 в 11:38)   личное сообщение
 
 

Встал в угол.
В это время зашел коммерческий. Открыл рот хотел что-то спросить. Увидел меня стоящим в углу. Закрыл рот, ничего не сказал и ушел.
Походу ты меня от какой-то работы спас.

  Ответить  
 
 автор: Силblч   (23.12.2010 в 11:39)   личное сообщение
 
 

  Ответить  
 
 автор: shanemac51   (22.12.2010 в 19:06)   личное сообщение
 
 

ваши же слова


For i = 1 to 10
никак не пойму его назначение. Функционально он совершенно не нужен...
 но я его почему-то поставил... может я чего-то не вижу и он НУЖЕН?
Может я просто пытался проверить скорость на больших объемах 
                                                                                              -------------------------------
и потом забыл убрать (заказчик уже год с этим живет...

  Ответить  
 
 автор: Гоблин   (22.12.2010 в 22:29)   личное сообщение
 
 

Странно. Кода я не понял. Но для меня ситуация "зачем я это сюда всадил?" очень даже штатная. Зареми, подожди с неделю. Всплывет, если нужна.

  Ответить  
 
 автор: osmor   (23.12.2010 в 08:23)   личное сообщение
 
 

Дело в том что эта функция маленький шаг большой обработки ( 1 из примерно 40), огромного массива данных. В случае если он отработает неверно это может выявиться очень не скоро да и то случайно.
Ну представьте что у вас в базе 300 000 строк, нужно добавить еще 20 000 из текстового файла, но предварительно проверить соответствие определенным правилам, как в самом загружаемом файле так и соответствие уже существующим 300 тыс (взаимосвязи, дублирование, состав из определенного набора и т.п.).
Так вот если в процессе обработки из за неверной работы в базу НЕ будут добавлены (или БУДУТ добавлены которые не должны добавляться) 1 тыс записей, этого может никто не заметить.
У меня есть несколько небольших наборов данных которые используются для проверки, каждый набор должен выдавать определенный набор ошибок или обрабатываться без таковых.
Убрал цикл прогнал на всех, все работает как и должно.
Но цикл я зачем-то ставил
Я предположил что для проверки на больших объемах.
Цель вопроса была выяснить, может кто увидит другую причину наличия этого цикла, ту которую я пропустил.
Всем огромное спасибо за коментарии.

  Ответить  
 
 автор: Силblч   (23.12.2010 в 11:17)   личное сообщение
 
 

Результат анализа текста:

Анализируемый текст:

Суть этой операции простая, в таблице есть 2 текстовых поляОдно с данными второе пустоеНужно второе заполнить Маской где для каждого символа из поля1 будет стоять 1 для ЗАГЛАВНЫХ букв и 0 для маленькихнапример:для поле1 AAaaAAполе2 будет 11001А вот теперь собственно вопросНА КОЙ Х... я поставил в MaskCaseValTok циклFor i 1 to 10никак не пойму его назначение. Функционально он совершенно не нужен... но я его почему-то поставил... может я чего-то не вижу и он НУЖЕН?Может я просто пытался проверить скорость на больших объемах и потом забыл убрать (заказчик уже год с этим живет.... )В общем плиз посмотрите, нужен ли этот цикл...Совсем отупел на своей административной работе

Длина текста: 616 букв.

Настроение автора письма(текста):

a) Шероховатый, противопоставляющий +
b) Тусклый, безжизненный, невыразительный, бесцветный, серый +
c) Тёмный, сомнительный, подозрительный +
d) Низменный, подлый, бесчестный +
e) Злой, недоброжелательный, неотзывчивый +
f) Грустный, безрадостный, нерадостный, невесёлый +
g) Мужественный, стойкий +

В результатах online-сервиса отображаются качества с сильной (++), однозначной (выделены красным или синим цветом) и слабой (+), неоднозначной (выделены зелёным цветом) выраженностью качеств настроения автора сообщения. Качества приводятся по степени убывания их выраженности!

Интерпретация результата анализа:

a) Выраженная индивидуальность.
b) Избегает повышенного внимания к себе.
c) Что же автор делает по ночам? Он явно недосыпает.
d) Ничто человеческое не чуждо автору.
e) Автор отстаивает свои позиции и интересы.
f) То ли автор грустит, то ли ностальгирует, то ли вспоминает прошлые романы - кто же поймёт этих лириков.
g) Состояние готовности. Свойственна самоотдача и способность больше отдавать миру, чем получать.

Диаграмма выраженных качеств.
Чем больше синих позиций - тем легче контактировать с этим человеком, а чем больше красного цвета - тем труднее.

http://analizpisem.ru/

  Ответить  
 
 автор: Дядя Федор   (23.12.2010 в 12:58)   личное сообщение
 
 

Анализ ф-и MaskCaseValTok

Настроение автора письма(текста):

a) Шероховатый, противопоставляющий + +
b) Угловатый, неловкий, неуклюжий + +
c) Короткий, сконцентрированный + +
d) Тихий, спокойный, смирный, безмятежный +
e) Тёмный, сомнительный, подозрительный +
f) Страшный, пугающий +
g) Печальный, скорбно-озабоченный, огорчённый +
h) Грубый, некультурный, неучтивый, дерзкий +

В результатах online-сервиса отображаются качества с сильной (++), однозначной (выделены красным или синим цветом) и слабой (+), неоднозначной (выделены зелёным цветом) выраженностью качеств настроения автора сообщения. Качества приводятся по степени убывания их выраженности!

Интерпретация результата анализа:

a) Переубедить сейчас этого человека в чём-либо чрезвычайно сложно. Даже если он с Вами согласится - всё равно он останется при своём мнении.
b) С этим человеком ведите себя как можно тактичнее.
c) Склонен к излишней систематизации, перфекционизму.
d) Можете ему ответить: *Тише едешь - дальше будешь*, - но рискуешь проехать свою остановку.
e) Что же автор делает по ночам? Он явно недосыпает.
f) Вы ошибаетесь, если думаете, что автор этих строк доверяет Вам.
g) Настроение снижено.
h) Чувствительность снижена, возможна защитная реакция.


Анализ ф-и CaseToBin

Настроение автора письма(текста):

a) Грубый, некультурный, неучтивый, дерзкий + +
b) Короткий, сконцентрированный + +
c) Шероховатый, противопоставляющий +
d) Холодный, бесстрастный, равнодушный, крайне сдержанный в проявлении чувств +
e) Угловатый, неловкий, неуклюжий +
f) Тёмный, сомнительный, подозрительный +
g) Страшный, пугающий +
h) Печальный, скорбно-озабоченный, огорчённый +
i) Храбрый, отважный, бесстрашный +
j) Мужественный, стойкий +
k) Большой, выдающийся, замечательный, +

В результатах online-сервиса отображаются качества с сильной (++), однозначной (выделены красным или синим цветом) и слабой (+), неоднозначной (выделены зелёным цветом) выраженностью качеств настроения автора сообщения. Качества приводятся по степени убывания их выраженности!

Интерпретация результата анализа:

a) Похоже на пуленепробиваемый жилет. Во всяком случае чувствительность у автора заметно снижена.
b) Склонен к излишней систематизации, перфекционизму.
c) Выраженная индивидуальность.
d) Автор замкнут и не склонен к экспрессии.
e) С этим человеком ведите себя как можно тактичнее.
f) Что же автор делает по ночам? Он явно недосыпает.
g) Вы ошибаетесь, если думаете, что автор этих строк доверяет Вам.
h) Настроение снижено.
i) В этих строках чувствуется *внутренний стержень*, который не так уж и просто согнуть.
j) Состояние готовности. Свойственна самоотдача и способность больше отдавать миру, чем получать.
k) Любит простор.


Вторая процедурка явно привлекательнее

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList