|
|
|
| В общем сабж. Система Win2k access такой же, компьютеры в сети (в домене), причем как только я переписываю клиента заново, все работает. Возможна ли такая ситуевина, из-за наложенных на пользователя ограничений? | |
|
| |
|
|
|
| клиент на компьютере пользователя?
вряд-ли это из-за ограницений, тогда бы всегда не открывались.
а что значит "не открывается" , можно подробнее | |
|
| |
|
|
|
| Вот код.
Option Compare Database
Public Function AddNomZ()
Dim rst As Recordset
str_SQL = "SELECT * FROM тНомТемп WHERE 1"
Set rst = CurrentDb.OpenRecordset(str_SQL) '("тНомТемп")
SearchCriteria = "кодНом=" & P("кодНом") '& "'"
If rst.EOF Then ' нет записей
rst.AddNew
rst!Обозначение = P("Обозначение")
rst!Наименование = P("Номенкл")
rst!заявка = P("Заявка")
rst!Цех = P("Цех")
rst!кодНом = P("кодНом")
If P("ППп") = "Истина" Then rst!Прим = P("ДСЕ")
rst.Update
Else
rst.FindFirst SearchCriteria
If rst.NoMatch Then ' ничего не нашли надо добавлять
rst.AddNew
rst!Обозначение = P("Обозначение")
rst!Наименование = P("Номенкл")
rst!заявка = P("Заявка")
rst!Цех = P("Цех")
rst!кодНом = P("кодНом")
If P("ППп") = "Истина" Then rst!Прим = P("ДСЕ")
rst.Update
End If
End If
On Error GoTo 1
DoCmd.OpenForm "фНомТемп"
Forms!фНомТемп.Requery
Exit Function
1:
'If Err.Number = 22 Then
MsgBox Err.Number & vbNewLine & Err.Description
Err.Clear
End Function
Сообщения об ошибке не вылетает, и самое главное то, что после переписывания клиента все работает. Конечно ничего страшного, но напрягает. | |
|
| |
|
|
|
| Открытый рекордсет.
Допишите
rst.Close
Set rst = Nothing
DoCmd.OpenForm "фНомТемп"
Forms!фНомТемп.Requery
Exit Function
Ведь явно ссылки на объекты не закрыты и форма может не открываться, если рекорсорз явно не закрыт.
А процедурка не закончена ...
и ссылка на обхект висит... | |
|
| |
|
|
|
| Попробую. Хотя тут явно мистика у меня все работает. Да и у них тоже. Какое-то время. А переписываю клиента заново (БЕЗ ИЗМЕНЕНИЙ) и снова все работает. | |
|
| |
|
|
|
| млин, ну код-то не удобоваримый совсем
нуна пользоваться [cоde][/cоdе]
а то:
тратататататата
тратататататататратататататата
тратататататата
тратататататататратататататататрата татататата
тратататататата
тратататататататратататататататрата татататататратататататата
...
end
и... пожалуйста посмотрите и подскажите в чем тут дело... | |
|
| |
|
|
|
| Да в принципе отступы-то он соблюдает, но вопрос-то не в этом. Почему она то работает, то нет. Причем при переписывании клиента все нормаль. Больше ничего не меняется. У меня все время работает. Никаких разумных объяснений этому я не нашел. Думал может такая же хрень у кого-то уже случалась и ее победили. | |
|
| |
|
|
|
| > меня все время работает.
Уже лучче :)
>Никаких разумных объяснений этому я не нашел.
Разумные объяснения?
Версии Аксесса? Сервиспаки? - бывает.
Но чаще некорректно написанный код.
А искать неохота (типо, некогда) и кивая на версии и сервиспаки плодим уродов...
Были же случаи, когда код не работал, обращаясь к чекеру (check) во вложенной форме, будучи, хм, написаным не явно (А97):
И требовалось писать явно :
...приходилось не один раз корректировать код, и только после этого искать ошибки
...как легко было потом переехать с 97 на 2000-й Ассесс, когда, например, библиотеки и переменные явно определены...
Не жалейте на это времени.... Потом его понадобицца больше | |
|
| |
|
|
|
| не поленился...
попробуйте этот вариант кода:
Public Function AddNomZ()
On Error GoTo Err_AddNomZ
Dim rst As DAO.Recordset
Dim SearchCriteria As String
Set rst = CurrentDb.OpenRecordset("SELECT * FROM тНомТемп WHERE 1") '("тНомТемп")
SearchCriteria = "кодНом=" & P("кодНом") '& "'"
If rst.EOF Then ' нет записей
rst.AddNew
rst!Обозначение = P("Обозначение")
rst!Наименование = P("Номенкл")
rst!заявка = P("Заявка")
rst!Цех = P("Цех")
rst!кодНом = P("кодНом")
If P("ППп") = "Истина" Then rst!Прим = P("ДСЕ")
rst.Update
Else
rst.FindFirst SearchCriteria
If rst.NoMatch Then ' ничего не нашли надо добавлять
rst.AddNew
rst!Обозначение = P("Обозначение")
rst!Наименование = P("Номенкл")
rst!заявка = P("Заявка")
rst!Цех = P("Цех")
rst!кодНом = P("кодНом")
If P("ППп") = "Истина" Then rst!Прим = P("ДСЕ")
rst.Update
End If
End If
rst.Close 'Закрываем рекордсет
Set rst = Nothing 'освобождаем память от объекта rst
DoCmd.OpenForm "фНомТемп"
Exit Function
Err_AddNomZ:
MsgBox Err.Number & vbNewLine & Err.Description
End Function
|
ЗЫ. А что за P("ххх")? | |
|
| |
|
|
|
| Спасибо, так тоже работает. Подождем. Будет сбоить или нет.
P("xxx") - Функция для хранения и вызова параметров. При вызове P("xxx") возвращает значение параметра ххх, если вызвать P("xxx",true,"zzz"), то запишет в ххх - zzz. | |
|
| |
|
|
|
| Ох бл%, нашлась обшибка. Недостаточен размер поля чтобы принять данные. Надо было сразу-же поставить обработчик в начало функции.
Но почему-же оно у них работало после перезаписи.
PS^ Всем спасибо. | |
|
| |
|
|
|
| именно по этому я обработчик в начало функции и поставил, т.к. не все было ясно с этим самым Р("ххх") | |
|
| |
|
|
|
| Видно ни у кого такие траблы не возникали. Обидно.
Надо будет подумать еще разок. | |
|
| |
|
|
|
| а вот там on error goto 1
значит error происходит, а вот какой ...
Может от Requery или ещё что , а по шаговый режим отладки что в этот момент показыват??? | |
|
| |
|
|
|
| Сообщение об ошибке не вылетает.
Не доходил до этого все просят срочно работать, поэтому сразу-же переписывал клиента. В следующий раз точно в пошаговый залезу. Да только подозрение, что все и будет работать. | |
|
| |
|
|
|
| А может залезишь в пошаговый кода не будет открываться.
или на пиши
on error goto b
exit sub
b:
MsgBox " Сообщение разработчику ---> " & Err.Description | |
|
| |