Страница: 1 | 2 |
Вопрос: Программа глючит на ровном месте.
Добавлено: 23.05.07 16:41
Автор вопроса: WFS
У меня была программа из пяти форм.
Я добавил еще 2 формы и пошли глюки.
например не хочет удалять строки из Flexgrida.
или если я описываю три переменные подряд:
Global s1, s2, sdmin As Double
то во время работы выдает ошибку. Если по раздельности их описывать, то нет ошибки.
Ответы
Всего ответов: 21
Номер ответа: 1
Автор ответа:
Silver Ferrum
ICQ: 422640045
Вопросов: 12
Ответов: 144
Профиль | | #1
Добавлено: 23.05.07 16:44
хах
чтоб ты знал так переменные в ВБ не оглашаются
Переменные можно объявлять и в одной строчке, разделяя объявления запятыми:
Здесь очень важно заметить следующую особенность. Логично было бы объявить 3 переменные типа Long следующим образом:
Такая привычка могла перейти, например, из языка C. Там все переменные действительно имели бы тот тип, который указан после последней переменной. Но не в Visual Basic! В результате такого объявления VB объявит 3 переменные, первая и вторая будут иметь тип Variant, и только третья -Long!
Номер ответа: 2
Автор ответа:
WFS
Вопросов: 12
Ответов: 19
Профиль | | #2
Добавлено: 23.05.07 16:54
Офигеть.
Но все равно, если переменная не Дабл, а вариант, то это просто экономит память. почему из-за этого возникало переполнение overflow?
И почему он упрямо не хочет удалять строки из флексгрида? 4 удалил, а пятую ни в какую?
Номер ответа: 3
Автор ответа:
Silver Ferrum
ICQ: 422640045
Вопросов: 12
Ответов: 144
Профиль | | #3
Добавлено: 23.05.07 16:58
с флексгридом не знаю, а почему у тебя оверфловы знаю.
когда ты первый раз используешь тип вариант и вносишь туда значение (пускай 5), то он становится тип Байт.. и когда поом ты туда кидаешь значение выше 255, то у тебя получаютСо оверфловы
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 23.05.07 18:50
Номер ответа: 5
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #5
Добавлено: 23.05.07 22:30
Double - 8 байт
Variant - 16 байт + 1 для каждого символа.
Чё это за Глобал? Ты там на VB3 пишешь что ли? Или это Net? Если Net, тогда молчу , а если нет, то чем тебе Public то не нравится?
На счет переменных х.з.
Скорее всего не в объявлении дело, а в процедурах.
Номер ответа: 6
Автор ответа:
Silver Ferrum
ICQ: 422640045
Вопросов: 12
Ответов: 144
Профиль | | #6
Добавлено: 23.05.07 22:38
..не знаю.. Вот что я читал:
Номер ответа: 7
Автор ответа:
WFS
Вопросов: 12
Ответов: 19
Профиль | | #7
Добавлено: 23.05.07 22:49
Глобал - это означает, что область действия переменной распространяется на все модули в данной программе. Я просто дорабатываю готовую прогу, которая писалась в конце 90х. Наверно это из вб3, хотя 6й тоже понимает.
Так все таки, может ли влиять на работу программы то, что она очень большая?
PS Для меня было открытием узнать, что переменные описываются по отдельности
Номер ответа: 8
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #8
Добавлено: 23.05.07 22:55
Переменная типа Variant может содержать данные любого типа. Visual Basic автоматически производит необходимые преобразования данных, поэтому не стоит беспокоится об этом. Использование такого типа данных замедляет работу программы, т.е. требуется время и ресурсы для преобразования типов. Поэтому рекомендую всегда воздерживаться от применения этого типа данных, за исключением специфических случаев, например, возвращение функцией массива возможно только при использовании типа Variant.
И где тут про то, что если ты вбил в вариант число 255, то 256 туда уже не влезет?
Номер ответа: 9
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #9
Добавлено: 23.05.07 23:03
ИМХО нет. Но это может здорово повлиять на время компиляции
А сколько это "очень большая"?
Вот у меня в одной было 290 кб кода и она до сих пор нормально работает
Номер ответа: 10
Автор ответа:
Silver Ferrum
ICQ: 422640045
Вопросов: 12
Ответов: 144
Профиль | | #10
Добавлено: 23.05.07 23:17
Глобал от Паблик отличается тем, что при вызове паблик переменной надо указывать полный путь типа
Номер ответа: 11
Автор ответа:
Silver Ferrum
ICQ: 422640045
Вопросов: 12
Ответов: 144
Профиль | | #11
Добавлено: 23.05.07 23:19
..и ещё может быть такое:
Dim b As Byte
Dim c As Long
a = 200
b = 200
c = a + b
Казалось бы, что если запустить такой код на выполнение, то в переменной c будет находиться значение 400 (200 + 200). Но не тут-то было . Visual Basic на строке c = a + b сгенерирует ошибку Overflow (Переполнение). Дело в том, что в выражении справа от знака равно складываются 2 переменные типа Byte, и Visual Basic решает, что после вычисления этого выражения, должен остаться тот же тип - Byte. Но если вспомнить то, что тип Byte может хранить значения в диапазоне 0-255, можно понять почему VB генерирует Overflow (Переполнение). 400 далеко выходит за диапазон Byte... Здесь может возникнуть вопрос: "А как же быть? Объявлять переменные a и b типом Long?". Можно поступить и так. А можно воспользоваться функций преобразования типа CLng.
Номер ответа: 12
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #12
Добавлено: 23.05.07 23:34
Это кто тебе такое сказал?
Номер ответа: 13
Автор ответа:
Silver Ferrum
ICQ: 422640045
Вопросов: 12
Ответов: 144
Профиль | | #13
Добавлено: 23.05.07 23:49
..сам проверил.. и ты проверь
Номер ответа: 14
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #14
Добавлено: 24.05.07 00:21
Если мы про модуль формы, то действительно при вызове public переменных, описанных в модуле формы из других модулей нужно указывать "полный путь" , но объявлять переменные как global там запрещено, так что видимо мы говорим о глобальных модулях. А если мы говорим о глобальных модулях, то никакого полного пути не нужно.
Моя твоя убедил?
Номер ответа: 15
Автор ответа:
WFS
Вопросов: 12
Ответов: 19
Профиль | | #15
Добавлено: 24.05.07 01:11
В глобальных модулях можно писать и паблик, и глобал - результат будет один и тот же: переменную можно просто вызывать по имени.
А вот если описать переменную паблик в модуле формы, то она не будет доступна из других модулей. Нужно писать путь,наверно.