|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Да, спасибо, получилось. Правда пришлось Код: plaintext 1.
Код: plaintext
Ну да бог с ним, тут я смотрю нужно что-то почитать, и за один подход фик осилить. Чищу код в первом приближении, и хочу вот эту повторяющуюся сущность: Код: plaintext 1. 2.
описать один раз в модуле класса. Так и сделал: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Все было нормально, пока я не добрался до рекурсивной функции/процедуры. Дело в том, что если функция вызывает сама себя, то переменная (а рекордсет это тоже переменная) должна быть автоматической и определенной/инициализированной на уровне функции. Короче говоря, у меня не получилось заставить рекурсивную функцию работать с внешним рекордсетом. --- Есть ли какие-то общие правила по оформлению кода в VB? ПО размещению функций, переменных, объектов. Стили коментирования и т.д. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2010, 22:39 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Если у меня в программе испоьзуется сторонний грид, который я инсталлировал у себя на машине с помощью фирменного инсталятора, то как мне распространять свою программу? Нужно найти программу которая будет создавать инсталяху, и учится интегрировать в нее активХ компоненты, файлы и прочее? Правильно я все понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2010, 22:42 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
tutti-fruttiНе знаю почему, но если он (объект) был объявлен на уровне модяля формы, то в определенный момент он разрушался и было невозможно сквозь него работать с коллекциями ListItems исходного ListView Странно, не должно быть до момента выгрузки формы. tutti-fruttiВсе было нормально, пока я не добрался до рекурсивной функции/процедуры. Дело в том, что если функция вызывает сама себя, то переменная (а рекордсет это тоже переменная) должна быть автоматической и определенной/инициализированной на уровне функции. Короче говоря, у меня не получилось заставить рекурсивную функцию работать с внешним рекордсетом. Без бутылкикода не разберемся tutti-fruttiЕсть ли какие-то общие правила по оформлению кода в VB? ПО размещению функций, переменных, объектов. Стили коментирования и т.д. Ну это каждый свое нарабатывает. Я, например, завожу модули под группы публичных функций и глобальные переменные. Ну и естественно, инкапсуляция и еще раз инкапсуляция. Под работы над определенными объектами по максимуму делаю классы. Делаю классы-надстройки над стандартными объектами - в частности формами, а все контролы формы пихаю в юзерконтролы (фактически из стандартных контролов использую только кнопки и метки). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2010, 22:57 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
tutti-fruttiЕсли у меня в программе испоьзуется сторонний грид, который я инсталлировал у себя на машине с помощью фирменного инсталятора, то как мне распространять свою программу? Нужно найти программу которая будет создавать инсталяху, и учится интегрировать в нее активХ компоненты, файлы и прочее? Правильно я все понимаю? Тут я плохой советчик, потому что пользуюсь штатным P&D Wizard - просто у меня к инсталлятору минимальные требования, он меня удовлетворяет, причем все штатные библиотеки, плюс референсы на некоторые внешние библиотеки подтянул автоматом на основе анализа файла проекта. Но тут этот инсталлятор - моветон. Народ рекомендует InnoSetup, я его не видал. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2010, 23:01 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
tutti-fruttiВсе было нормально, пока я не добрался до рекурсивной функции/процедуры. Дело в том, что если функция вызывает сама себя, то переменная (а рекордсет это тоже переменная) должна быть автоматической и определенной/инициализированной на уровне функции. Короче говоря, у меня не получилось заставить рекурсивную функцию работать с внешним рекордсетом. А может и догадался, о чем ты. У рекордсета есть метод Clone Попробуй его. Типа Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2010, 23:07 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Нужно перебрать всю ветку в TreeView и удалить из нее ноды, кроме первого Делаю так: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2010, 18:43 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Ну соответственно нод, с которого нужно начинать удаление выделен. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2010, 18:43 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Вместо Child у меня Parent. Спасибо, разрулил. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2010, 18:56 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
tutti-fruttiСпасибо, разрулил. Не за что! Мы мысленно с тобой. Мы помним про Тещу. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2010, 23:29 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Shocker.Protutti-fruttiСпасибо, разрулил. Не за что! Мы мысленно с тобой. Мы помним про Тещу. Видали бы вы, как она рыбу чистит... ладно не буду о грустном. Итак сегодня появилась свободная минутка и вот хочу спросить, как правильно обрабатывать ошибки в небольшой программке по типу виндового проводничка? Как, в сл. ошибки метнутся в обработчик, распознать по номеру ошибку и среагировать ВНУТРИ функции понятно, но как это все увязать вместе, ведь ошибка может произойти "асинхронно" со всякого рода разумными домыслами относительно ее природы и прочего. Что же я получу в работающей программе: аварийные сообщения с текстом и номерами траблов? Как правильно делать? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:01 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Есть у меня рекурсивная функци, которая строит дерево. Нельзя сказать, что она хорошо написана, но вопрос у меня не о чистоте и разумности кода а о логике работы с RecordSet. Скажите, когда и где именно правильно закрывать (.Close) RecordSetЫ? Вот код: Код: 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.
Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:05 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Как правильно проверять на наличие записей в рекодсете? Еще я задвигаю указатель на первую структуру данных. У меня сейчас везде так: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:09 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
tutti-fruttiВидали бы вы, как она рыбу чистит... Неужели с хвоста? tutti-fruttiведь ошибка может произойти "асинхронно" со всякого рода разумными домыслами относительно ее природы и прочего. Вообще-то это требует пояснений. Ибо, при работе с внешними источниками (БД, файлами и т.п.) ошибки очевидно должны заворачиваться в On Error-ы. В то же время a=a+1 в общем-то заворачивать не надо. Ты можешь возразить, что мол в этом случае может возникнуть переполнение. И я отвечу - да может, если ты сам <censored>. И далее что? Вот возникла ошибка, что ты будешь делать? Покажешь пользователю текст и предложишь работать дальше? А если нельзя? Если в результате этой ошибки ты дальше поломаешь структуру данных в БД? Лично я те места, где ошибки НЕ ДОЛЖНЫ ВОЗНИКНУТЬ согласно алгоритму программы, не заворачиваю. Пусть лучше пользователь ее обнаружит и мне по голове настучит, чем проигнорирует, а потом мне удивляться результатам. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:10 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Код: 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. 32. 33. 34.
В общем, при правильном форматировании кода - на том же уровне вложенности, где он был открыт ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:15 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
tutti-fruttiКак правильно проверять на наличие записей в рекодсете? Еще я задвигаю указатель на первую структуру данных. У меня сейчас везде так: Код: plaintext 1. 2. 3.
Не совсем уверен за DAO, но в ADO просто проверяешь на EOF (без всякого MoveFirst) RecordCount в определенных случаях может быть -1, так что стараюсь им не пользоваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:18 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Shocker.Pro, У меня вся програмка построена на вызовах функций и "ввыливание" в функции при определенных событиях. Заворачивать в обработчики я могу соответственно только части функций. Но функция это кусочек целого! Ну например речь идет о механизме добавления новой записи в базу данных, через грид на форме, которую вызвала главная форма. Вот пользователь ввел значения и переходит на новую запись/нажимает кнопу сохранить. В моем случае происходит куча всяких телодвижений: записывается инфа в базу, потом она оттуда вынимается для того чтобы получить ключи сгенерированые СУБД, потом заполняется сам грид и по мелочи еще проц инфу дергает туда сюда. В результате нагромождается целый вагон с прицепчиком источников ошибок, да и результат этих сбоев в логике может быть самый разный. Если я все правильно понял, то я беру этот логически оформленный кусочек кодов (добавление записи через грид на форме вызванной из другой формы), анализирую его на предмет вероятных мест ошибок, потом каждое из найденных мест обрамляю обработчиком, и в тексте сообщения уведомляю пользователя о каком именно месте идет речь. В случае чего останавливаю выполнение программы. Пральна? Сори за такие вопросы, просто совсем, что-то сиреневый туман.. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:23 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
tutti-fruttiПральна? Ну тут надо смотреть конкретно. Можно (и это более правильно, но сложнее) каждой подозрительной функции делать обработчик ошибок, который во-первых сообщит (или не сообщит) юзеру о проблеме при выполнении какой-то операции. И возвращает "наверх" код состояния (типа выполнилась/не выполнилась). Вышестоящая функция тоже принимает решение (уже без всякого обработчика, просто ориентируясь на вернутый код состояния), сообщать (или не сообщать) пользователю об ошибке и что делать дальше. Наверно ты видел такие примеры, когда у тебя выдается на одну ошибку два-три сообщения: сначала "кончилось место на диске" (вложенная функция), потом "не удалось скопировать файл" (вышестоящая функция). А можно просто обернуть в On Error самый верхний вызов, он и обработает все ошибки, возникшие ниже. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:31 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3.
У меня в программе, для того ,чтобы не создавать в каждой функции новый рекордсет, используется Public рекордсет. В нужных местах я его открываю, работаю с ним, а потом закрываю. Определяется и инициализируется ен у меня от так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Я так понял ,что кильнуть его можно и нужно один раз при закрытии главного окна прграммы. Пральна? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:34 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
А по поводу рекордсетов для рекурсивных функций понял, сейчас поправлю код. Я для именно рекурсивных функций инициализирую два автоматических (внутренних) рекордсета, они типа особенные и не паблик. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:39 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
tutti-fruttiУ меня в программе, для того ,чтобы не создавать в каждой функции новый рекордсет, используется Public рекордсет. В нужных местах я его открываю, работаю с ним, а потом закрываю. Нифига не так. Код: plaintext
Держать неуничтоженный экземпляр закрытого рекордсета нет никакого смысла, это ничего не меняет, зато иногда приводит к глюкам. В общем, после Close делай =Nothing. И еще. Такой подход чреват логическим глюком. Вот работаешь ты с глобальным рекордсетов в какой-то функции. Потом вызываешь вложенную функцию, которая тоже его использует. Ну и понимаешь, к чему это приведет. Если глобальный коннекшн держать смысл есть (и то только при условии, что он постоянно открыт), то рекордсет, к тому же еще и закрытый - нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:42 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
tutti-fruttiА по поводу рекордсетов для рекурсивных функций понял, сейчас поправлю код. Я для именно рекурсивных функций инициализирую два автоматических (внутренних) рекордсета, они типа особенные и не паблик. Ну как я уже сказал выше - паблик рекорсет и не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:42 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Shocker.Pro , спасибо! Сейчас заварю кофе и буду размалывать глыбы мыслей и догадок которыми меня в очередной раз засыпало с Вашей легкой руки:) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 21:47 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
tutti-frutti, Я прошу прощения, что влажу в вашу высокоинтеллектуальную беседу, но скажите, милейшие, а нет ли в возможности в акцессе сделать что-то наподобии хранимой процедуры? И если это можно сделать, то может проще сделать такую процедуру, что-бы она пробегалась по дереву и строила упорядоченный рекордсет для построения. Тогда вся задача сведётся к запросу рекордсета из процедуры и цикла по всем записям с построением дерева. И не будет нужды в отслеживании рекордсетов. :) Я так строю дерево данными из SQLServer'а Кстати, вот здесь: Код: plaintext
Да и вообще я использую такую запись: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 00:56 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Игорь Горбонос, В принципе, безо всякой хранимки можено сделать запрос на базе UNION ALL и ORDER BY, который вернет пригодную для загрузки в дерево субстанцию. Но я пока не рискую предлагать это ТС - всему свое время.... Вот типовая загрузка моих деревьев: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 01:07 |
|
Вопросы по структуре, организации и принципам кода в VB6->
|
|||
---|---|---|---|
#18+
Shocker.Pro, А как юнионами? Нет! до завтра подумаю :) А вот я строю дерево :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 01:20 |
|
|
start [/forum/topic.php?fid=60&msg=36665200&tid=2158708]: |
0ms |
get settings: |
16ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 324ms |
total: | 466ms |
0 / 0 |