|
|
|
| Private Sub Form_Load()
Dim i
Dim c
Dim d
Dim k1
Dim k2
Dim k3
Dim z
d = DriveSerial("d")
c = DriveSerial("c")
z = c & d
k1 = z * 8
k2 = z * 20
k3 = z * 39
************************
End Sub
k1 = z * 8 Выдаёт ошибку Type mismauch причом на некотырых компютерых выдаёт а на некотырых нормально работает | |
|
| |
|
|
|
| 1.У тебя все переменные типа вариант. Это так задумано?
2.С и D - на всех компах ФИЗИЧЕСКИЕ диски?
Проверь отладчиком чему равны переменные d,c
Long -2,147,483,648 to 2,147,483,647
Если -2144172890 ? 1585870 =-21441728901585870 да еще умножить... | |
|
| |
|
|
|
|
| Объяви, все же типы явно
z = c & d - какого типа будет Z число или строка?
Какой смысл их конкатенировать и потом умножать? | |
|
| |
|
|
|
| Дядя Федор проблема в том низнаю как но DriveSerial("d") или DriveSerial("c") обём получаеться минусовым ну и
z = c & d z = 33651336656-5863313 а это уже не чесло
k1 = z * 8 | |
|
| |
|
|
|
| Я типы не объявлю это мой стиль а проблему решил добавив в код
Private Sub Form_Load()
Dim i
Dim c
Dim d
Dim k1
Dim k2
Dim k3
Dim z
d = DriveSerial("d")
c = DriveSerial("c")
If d < 0 Then
d = -d
End If
If c < 0 Then
c = -c
End If
******************* | |
|
| |
|
|
|
|
Я типы не объявлю это мой стиль
|
Тогда все типы вариант. и теряется ВРЕМЯ на первое преобразование ибо переменная получает тип по первому присвоению.
Думаю, что это не очень хороший стиль.
Рекомендуют даже писать
dim i as long
i=1&. чтобы компилятор сразу понял, что 1 это число (Long)
или
Dim i%
i=1% (integer) | |
|
| |
|
|
|
| Дык. Вот тебе и миссмач. Нельзя умножать строку на число. Бери тогда абсолютную величину. Но при умножении может получиться переполнение!!!!
Придумай алгорритм другой что ли. например маску XOR. | |
|
| |
|
|
|
|
| ну да а это уже читаеться как число)) | |
|
| |
|
|
|
| Дядя Федор спасибо но задершка во времини не привышает 1нс зачем мне это ?
но если в коде очень много переменых то тагда я пишу типы | |
|
| |
|
|
|
| погоди ddi тебе эта фича с объявлением переменных багом вылезет | |
|
| |
|
|
|
| +1
причем даже сам не поймешь где именно.
накатаешь какой-нибудь сервис-пак с "изюминокой" и хана твоему коду
да и корявенько как-то такой "стиль" выглядит, если уж честно. | |
|
| |
|
|
|
| Access 2010 пока проблем нету | |
|
| |
|
|
|
| да хоть 2025 - сильно ведь ни чего не меняется, добавляются новые элементы, библиотеки, принцип остается тот же
тогда зачем вообще в вашем случае пользоваться объявлением переменных
сразу пишете переменную и действия с ней - без объявления
поверьте VBA это схавает
вот только у меня например есть некоторые приколы когда нужно указывать явно тип переменных
более того если все переменные объявлены то в начале модуля ставится специальная команда отчего модуль начинает быстрее работать, что в большинстве случаев немаловажное подспорье
далее - вы роете сами себе яму - если ваша база будет работать и года через 2 вы полезете в код базы - то многое что вам сейчас кажется элементарным будет казаться такими дебрями (это кстати и к комментариям относится) - представляете что будет если код будет исправлять другой человек
в конце концов есть правила хорошего тона
вам конечно решать как поступать.... | |
|
| |
|
|
|
|
вот только у меня например есть некоторые приколы когда нужно указывать явно тип переменных
|
ну когда надо я и указываю | |
|
| |
|
|
|
| Ну ладно переубидили шас исправлу ато испугался потом через 2 года хана будит | |
|
| |
|
|
|
|
Option Compare Database
Option Explicit
|
| |
|
| |
|
|
|
|
| http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/Style/9.mspx | |
|
| |
|
|
|
|
If d < 0 Then
d = -d
End If
If c < 0 Then
c = -c
End If
|
для общего развития
d=Abs(d)
c=Abs(c)
или так
If d < 0 Then d = -d
If c < 0 Then c = -c | |
|
| |
|
|
|
|
| вот этот кусок по определению не правильный
z = c & d
k1 = z * 8
k2 = z * 20
k3 = z * 39
|
в данном случае z (так как Variant) после команды & (объединить строки) становится text
текст умножить на 8 нельзя отсюда ошибка - несоответствие данных
так что я не знаю чему равно z
если вы расскажете что вы хотите в конечном итоге получить может быть найдутся и решения вашей проблемы (отличные от ваших) - мне допустим не понятно зачем выдергивать DriveSerial потом их объединять да еще умножать на какие-то числа, к чему такие сложности | |
|
| |
|
|
|
| >> если вы расскажете что вы хотите в конечном итоге получить
да "защиту" он наверное пишет - к диску привязывается...
все нубы с этого начинают :) | |
|
| |
|
|
|
| представляю какое его ждет разочарование | |
|
| |
|
|
|
|
ник: snipe
представляю какое его ждет разочарование
|
и почиму | |
|
| |
|
|
|
| факторов много
сломают вашу базу
либо утянут данные (подцепившись из другой базы)
накроется винт
захотят ваши работодатели продать продукт
да мало ли чего
тут уже не мало копий сломано по этому поводу - просто не хочется повторяться (и технические и юридические тонкости)
более того сделать что-то такое чем бы пользовались все у меня например мозгов не хватает, а то что я делаю имеет настолько узкое и специфическое применение что распространения я не боюсь | |
|
| |
|
|
|
| а хочеш я тебе пришлю базу а ти посматри сможеш или нет? | |
|
| |
|
|
|
|
| ну посмотрим если сможеш то тогда и поговарим | |
|
| |
|
|
|
| Надо быть застимулированным хорошо, чтобы ковырять базы.
По мне проще своё написать, чем в чужом коде возиться. | |
|
| |
|
|
|
| Час ну это ты а есть такие ... | |
|
| |
|