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

Форум: MS ACCESS

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

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

 
 

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

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

тема: П.С. СРОЧНО!!!
 
 автор: ddi   (06.06.2011 в 16:18)   личное сообщение
 
 

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 причом на некотырых компютерых выдаёт а на некотырых нормально работает

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

1.У тебя все переменные типа вариант. Это так задумано?
2.С и D - на всех компах ФИЗИЧЕСКИЕ диски?
Проверь отладчиком чему равны переменные d,c

Long -2,147,483,648 to 2,147,483,647

Если -2144172890 ? 1585870 =-21441728901585870 да еще умножить...

  Ответить  
 
 автор: ddi   (06.06.2011 в 16:37)   личное сообщение
 
 

d = 0 c= 0

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

Объяви, все же типы явно

z = c & d - какого типа будет Z число или строка?

d = 0 c= 0

Какой смысл их конкатенировать и потом умножать?

  Ответить  
 
 автор: ddi   (06.06.2011 в 16:57)   личное сообщение
 
 

Дядя Федор проблема в том низнаю как но DriveSerial("d") или DriveSerial("c") обём получаеться минусовым ну и
z = c & d z = 33651336656-5863313 а это уже не чесло
k1 = z * 8

  Ответить  
 
 автор: ddi   (06.06.2011 в 17:00)   личное сообщение
 
 

Я типы не объявлю это мой стиль а проблему решил добавив в код
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
*******************

  Ответить  
 
 автор: Дядя Федор   (06.06.2011 в 17:04)   личное сообщение
 
 


Я типы не объявлю это мой стиль


Тогда все типы вариант. и теряется ВРЕМЯ на первое преобразование ибо переменная получает тип по первому присвоению.
Думаю, что это не очень хороший стиль.
Рекомендуют даже писать
dim i as long
i=1&. чтобы компилятор сразу понял, что 1 это число (Long)

или
Dim i%
i=1% (integer)

  Ответить  
 
 автор: Дядя Федор   (06.06.2011 в 17:01)   личное сообщение
 
 

Дык. Вот тебе и миссмач. Нельзя умножать строку на число. Бери тогда абсолютную величину. Но при умножении может получиться переполнение!!!!
Придумай алгорритм другой что ли. например маску XOR.

  Ответить  
 
 автор: Дядя Федор   (06.06.2011 в 17:09)   личное сообщение
 
 

z=336513366565863313
Да?

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

ну да а это уже читаеться как число))

  Ответить  
 
 автор: ddi   (06.06.2011 в 17:14)   личное сообщение
 
 

Дядя Федор спасибо но задершка во времини не привышает 1нс зачем мне это ?
но если в коде очень много переменых то тагда я пишу типы

  Ответить  
 
 автор: snipe   (06.06.2011 в 17:33)   личное сообщение
 
 

погоди ddi тебе эта фича с объявлением переменных багом вылезет

  Ответить  
 
 автор: Explorer   (06.06.2011 в 19:58)   личное сообщение
 
 

+1

причем даже сам не поймешь где именно.
накатаешь какой-нибудь сервис-пак с "изюминокой" и хана твоему коду

да и корявенько как-то такой "стиль" выглядит, если уж честно.

  Ответить  
 
 автор: ddi   (07.06.2011 в 08:10)   личное сообщение
 
 

Access 2010 пока проблем нету

  Ответить  
 
 автор: snipe   (07.06.2011 в 09:47)   личное сообщение
 
 

да хоть 2025 - сильно ведь ни чего не меняется, добавляются новые элементы, библиотеки, принцип остается тот же

тогда зачем вообще в вашем случае пользоваться объявлением переменных
сразу пишете переменную и действия с ней - без объявления
поверьте VBA это схавает

вот только у меня например есть некоторые приколы когда нужно указывать явно тип переменных

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

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

в конце концов есть правила хорошего тона

вам конечно решать как поступать....

  Ответить  
 
 автор: ddi   (07.06.2011 в 10:15)   личное сообщение
 
 


вот только у меня например есть некоторые приколы когда нужно указывать явно тип переменных


ну когда надо я и указываю

  Ответить  
 
 автор: ddi   (07.06.2011 в 10:29)   личное сообщение
 
 

Ну ладно переубидили шас исправлу ато испугался потом через 2 года хана будит

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


Option Compare Database
Option Explicit

  Ответить  
 
 автор: ddi   (07.06.2011 в 10:59)   личное сообщение
 
 

Знаю)

  Ответить  
 
 автор: Explorer   (07.06.2011 в 11:04)   личное сообщение
 
 

http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/Style/9.mspx

  Ответить  
 
 автор: snipe   (07.06.2011 в 11:18)   личное сообщение
 
 


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

  Ответить  
 
 автор: ddi   (07.06.2011 в 11:29)   личное сообщение
 
 

А чему равен Z ?

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

вот этот кусок по определению не правильный


z = c & d
k1 = z * 8
k2 = z * 20
k3 = z * 39



в данном случае z (так как Variant) после команды & (объединить строки) становится text
текст умножить на 8 нельзя отсюда ошибка - несоответствие данных

так что я не знаю чему равно z

если вы расскажете что вы хотите в конечном итоге получить может быть найдутся и решения вашей проблемы (отличные от ваших) - мне допустим не понятно зачем выдергивать DriveSerial потом их объединять да еще умножать на какие-то числа, к чему такие сложности

  Ответить  
 
 автор: Explorer   (07.06.2011 в 11:45)   личное сообщение
 
 

>> если вы расскажете что вы хотите в конечном итоге получить

да "защиту" он наверное пишет - к диску привязывается...
все нубы с этого начинают :)

  Ответить  
 
 автор: snipe   (07.06.2011 в 11:58)   личное сообщение
 
 

представляю какое его ждет разочарование

  Ответить  
 
 автор: ddi   (07.06.2011 в 12:02)   личное сообщение
 
 


ник: snipe
представляю какое его ждет разочарование


и почиму

  Ответить  
 
 автор: snipe   (07.06.2011 в 12:11)   личное сообщение
 
 

факторов много

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

тут уже не мало копий сломано по этому поводу - просто не хочется повторяться (и технические и юридические тонкости)
более того сделать что-то такое чем бы пользовались все у меня например мозгов не хватает, а то что я делаю имеет настолько узкое и специфическое применение что распространения я не боюсь

  Ответить  
 
 автор: ddi   (07.06.2011 в 12:19)   личное сообщение
 
 

а хочеш я тебе пришлю базу а ти посматри сможеш или нет?

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

а зачем?

  Ответить  
 
 автор: ddi   (07.06.2011 в 12:22)   личное сообщение
 
 

ну посмотрим если сможеш то тогда и поговарим

  Ответить  
 
 автор: час   (07.06.2011 в 12:37)   личное сообщение
 
 

Надо быть застимулированным хорошо, чтобы ковырять базы.
По мне проще своё написать, чем в чужом коде возиться.

  Ответить  
 
 автор: ddi   (07.06.2011 в 13:20)   личное сообщение
 
 

Час ну это ты а есть такие ...

  Ответить  
 
 автор: час   (07.06.2011 в 15:58)   личное сообщение
 
 

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