|
|
|
| Доброе время суток! Подскажите что это за ошибка? Если нужно больше информации то я расскажу более подробнее. | |
|
| |
|
|
|
|
| Есть два файла. Интерфейс и база. При старте первая форма пролинковывает таблицы, закрывается и открывает форму приветствия. В форме приветствия проверяется контрольное значение (номер и ключ) и если они не совпадают то после 20 запуска автоматом открывается форма регистрации где указан рег. номер и нужно указать регистрационный ключ. Дело в том что у большинства ошибки 6 не выдает (у меня в том числе), но некоторые жалуются что сразу же при первом запуске просится регистрация и выдает эту ошибку. Если нужно то могу выслать коды к этим трем формам. | |
|
| |
|
|
|
| а какого нибуть описания к этой ошибке нет? кроме ее номера?
Высылайте... | |
|
| |
|
|
|
| ?Error(6)
Overflow
Переполнение. Это может быть, например, кода числовой переменной присваивается значение больше, чем она может проглотить. Иногда это происходит неявно, например:
lng = int1 * int2 может вызвать такую ошибку, т.к. под промежуточный результат вычислений VBA выделяет Integer, если в выражении не принимают участие переменные покруче.
Лечение:
lng = CLng(int1) * int2
или
lng = int1 * int2 * 1.0
Покажите кусок кода, где это происходит. | |
|
| |
|
|
|
| Dim rst As ADODB.Recordset
Dim sId As String
Dim iCounter As Integer
Set rst = New ADODB.Recordset
rst.Open "tblStart", CurrentProject.Connection, adOpenStatic, adLockOptimistic
sId = rst.Fields("Keyz")
iCounter = rst.Fields("Raz")
Me.txttimecounter = iCounter + 1
If iCounter > 19 Then
If sId <> Otzyv(Parol) Then
MsgBox sRegisterProgRazEnd, vbCritical, UCase(sRegister)
DoCmd.Close acForm, "CopyRight"
DoCmd.OpenForm "Register"
End If
Else
DoCmd.Close acForm, "CopyRight"
End If
rst.Close
Set rst = Nothing
или
On Error GoTo FUNCTION_Err
Dim rst As ADODB.Recordset
Dim sId As String
Dim iCounter As String
Set rst = New ADODB.Recordset
rst.Open "tblStart", CurrentProject.Connection, adOpenStatic, adLockOptimistic
sId = rst.Fields("Keyz")
iCounter = rst.Fields("Raz")
iCounter = 20 - iCounter
If iCounter < 0 Then iCounter = 0
If sId <> Otzyv(Parol) Then
Me.Caption = sUnRegisterProg + " " + LCase(sRemains) + " " + iCounter + " " + sRegisterProgRaz
Else
Me.Caption = sRegisterProg
End If
rst.Close
Set rst = Nothing
Me.lblProgramm.Caption = sName & " " & sVersion
FUNCTION_Exit:
Exit Sub
FUNCTION_Err:
MsgBox Err.Number & sErrorNumber, vbInformation, UCase(sInfoTitle)
Resume FUNCTION_Exit
Числа в принципе используются только тут. Подробностей кроме кода ошибки не знаю, так как эту ошибку у многих пользователей не выдает. А у кого она выскакивает то пользователи получают сообщение с кодом ошибки и просьбой соообщить об этом автору. | |
|
| |
|
|
|
| при работе с рекордсетами корректнее делать присваивание с проверкой. Для аксеса примерно так
sId = IIF(Nz(rst("Keyz"))="", "-",rst("Keyz"))
iCounter = IIF(Nz(rst("Raz"))="",0,rst("Raz")) | |
|
| |
|
|
|
| Во 2-й процедуре:
Dim iCounter As String
...
iCounter = rst.Fields("Raz")
iCounter = 20 - iCounter
If iCounter < 0 Then iCounter = 0
Если у вас так, как в примере, то iCounter - строка, а участвует в вычислениях и сравнении с числом.
Если не это, и вы не можете лично проверить ситуацию у клиента, то добавьте в код сообщения на каждый шаг и договоритесь с кем-то из них чтоб проверили и сообщили, после какого шага ошибка. Тогда будем копать дальше. | |
|
| |
|
|
|
| Спасибо за помощь. Буду пробовать. | |
|
| |