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

Форум: MS ACCESS

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

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

 
 

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

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

тема: подскажите где ошибка
 
 автор: dimonicss   (19.08.2007 в 11:45)   личное сообщение
 
 

В Форме ПриемЗаказов есть текстовое поле НомерТелЗак при вводе в которое номера телефона должна идти проверка не находится ли номер в Таблице ЧерныйСписок, если да, то выскакивает сообщение об этом. В Таблице ЧерныйСписок есть поля НомерТел и Примеч. На ввод номера повесил событие

Private Sub НомерТелЗак_AfterUpdate()
Dim db As Database
Dim rs As Recordset
Dim str As String
Set db = CurrentDb
Set rs = db.OpenRecordset("ЧерныйСписок", dbOpenDynaset)
str = ""
If rs.RecordCount <> 0 Then
rs.FindFirst "[НомерТел] = 'Me!НомерТелЗак.Value'"
str = str & "Телефон " & rs![НомерТел] & " находится в черном списке по причине" & rs![Примеч]
Debug.Print str
Else
str = "Таблица ""ЧерныйСписок"" не содержит записей."
Debug.Print str
End If
rs.Close
db.Close
End Sub

Только не работает пока что. Где-0то что-то неправильно написал. Подскажите плиз где ошибка.

  Ответить  
 
 автор: Силыч   (19.08.2007 в 13:41)   личное сообщение
 
 

. я бы на BeforeUpdate вешал
. я бы использовал в данном случае ф-ю DLookUp, имхо, в данном случае она очень даже оправдана

а ошибка в этой строке
rs.FindFirst "[НомерТел] = 'Me!НомерТелЗак.Value'"
нужно
rs.FindFirst "[НомерТел] = '" & Me!НомерТелЗак.Value & "'"

  Ответить  
 
 автор: dimonicss   (19.08.2007 в 15:27)   личное сообщение
 
 

Спасибо за ответ, только что-то не помогло. Ничего не происходит если пытаюсь ввести номер телефона, занесенный в Таблицу ЧерныйСписок.
Кстати когда попробовал повесить событие на BeforeUpdate стала вылетать ошибка. Похоже это связано с тем, что в поле НомерТелЗак запрещено пустое значение (обязательное поле).
С синтаксисом понял для текстового значения.
Если пользоваться DLookUp такой код должен быть?

Private Sub НомерТелЗак_AfterUpdate()
Dim db As Database
Dim rs As Recordset
Dim str As String
Set db = CurrentDb
Set rs = db.OpenRecordset("ЧерныйСписок", dbOpenDynaset)
str = ""

' В следующей строке тогда выдает ошибку Type Mismatch
If DLookup("[НомерТел]", rs, "[НомерТел] = '" & Me!НомерТелЗак.Value & "'") Is Null Then
' Конец ошибки

Exit Sub
Else
str = str & "Телефон " & rs![НомерТел] & " находится в черном списке по причине" & rs![Примеч]
Debug.Print str
End If
rs.Close
db.Close
End Sub

Мне бы сейчас хоть в каком-нибудь виде чтобы проверка номера заработала, а то с утра каких только вариантов не перепробовал - все не идет. Опыта своего не хватает. А примеров готовых с подобным кодом посмотреть не нашел.

  Ответить  
 
 автор: Силыч   (19.08.2007 в 15:43)   личное сообщение
 
 

1. ваша переменная str - ЭТО ЗАРЕЗЕРВИРОВАННОЕ СЛОВО !

2.
Private Sub НомерТелЗак_BeforeUpdate(Cancel As Integer)
Dim sMsg As String,sRem As String
sMsg = nz(DLookup("[НомерТел]", "ЧерныйСписок", "[НомерТел] = '" & Me!НомерТелЗак.Value & "'"),"")
If len(sMsg)<>0 Then
sRem = nz(DLookup("[Примечание]", "ЧерныйСписок", "[НомерТел] = '" & Me!НомерТелЗак.Value & "'"),"")
msgbox "Телефон " & sMsg & " находится в черном списке по причине " & sRem
Cancel=True
End If
End Sub

3. прежде чем писать программы, плз, изучите инструмент, которым вы работаете

  Ответить  
 
 автор: dimonicss   (19.08.2007 в 15:59)   личное сообщение
 
 

Вот как ты сейчас написал работает. Большое спасибо за подсказку.
Только ругаться по этому поводу не обязательно. Лучший способ изучить что-то это на деле использовать. Ну недостаточно знаю - так это не повод не браться за что либо. Какие функции не знаю - не использую временно. Постепенно и их начинаю использовать.

  Ответить  
 
 автор: Силыч   (19.08.2007 в 16:05)   личное сообщение
 
 

я не ругаюсь. я огорчён
"Лучший способ изучить что-то это на деле использовать." - верно. сам такого же мнения придерживаюсь. но как ты будешь использовать на деле что-то, если ты даже инструкции не прочёл.
понимаешь о чем я?
невозможно научиться правильно писать программы, не зная и не изучив язык.
получается, что ты телегу впереди кобылы пытаешься запрячь.
не обижайся :) я где нормальный, но где и беспощадный

  Ответить  
 
 автор: dimonicss   (19.08.2007 в 16:24)   личное сообщение
 
 

Ну в общем правильно пишешь. Читаю конечно инструкции. А иногда инструкции путано написаны и пытаюсь пробовать как получится. Вот хелп этот гребаный то работает, а по некоторым функциям вообще ничего не дает. В Excel вроде прикольный хелп - там и описание инструкции к команде и примеры даны. А по Accees нормальной справочной системы не имею, точнее недостаточно ее.
Ну и когда долго что-то не получается - бывает и перемыкает. Уже голова отказывается соображать - пробовать начинаю, иногда не осмыслив того что пробую.
Вот сейчас так и не пойму почему не заработал код

Private Sub НомерТелЗак_AfterUpdate()
Dim db As Database
Dim rs As Recordset
Dim str As String
Set db = CurrentDb
Set rs = db.OpenRecordset("ЧерныйСписок", dbOpenDynaset)
str = ""
If rs.RecordCount <> 0 Then
rs.FindFirst "[НомерТел] = '" & Me!НомерТелЗак.Value & "'"
str = str & "Телефон " & rs![НомерТел] & " находится в черном списке по причине" & rs![Примеч]
Debug.Print str
Else
str = "Таблица ""ЧерныйСписок"" не содержит записей."
Debug.Print str
End If
rs.Close
db.Close
End Sub

Интерес к нему остался, потому как кое-что из того что там было собираюсь использовать в другом месте программы. И понять хотелось бы где что неправильно.

  Ответить  
 
 автор: Силыч   (19.08.2007 в 16:48)   личное сообщение
 
 

повтоярюсь
1. STR - объявлена как переменная, но это зарезервированное слово VBA - STR - функция
2. после
rs.FindFirst "[НомерТел] = '" & Me!НомерТелЗак.Value & "'"
хорошо бы проверить - найдено чтолибо или нет
тебе поможет rs.NoMatch

3. еще хорошо бы знать точнее - код ошибки или описание.

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

Короче разобрался вроде
Работает в таком виде

Private Sub НомерТелЗак_AfterUpdate()
Dim db As Database
Dim rs As Recordset
Dim sMsg As String
Set db = CurrentDb
Set rs = db.OpenRecordset("ЧерныйСписок", dbOpenDynaset)
sMsg = ""
If rs.RecordCount <> 0 Then
rs.FindFirst "[НомерТел] = '" & Me!НомерТелЗак.Value & "'"
sMsg = sMsg& "Телефон " & rs![НомерТел] & " находится в черном списке по причине" & rs![Примеч]
MsgBox sMsg
Else
sMsg = "Таблица ""ЧерныйСписок"" не содержит записей."
MsgBox sMsg
End If
rs.Close
db.Close
End Sub

Не следовало Debug.Print использовать, хотя почему еще не понял, надо почитать.

  Ответить  
 
 автор: Силыч   (19.08.2007 в 20:07)   личное сообщение
 
 

глупости

  Ответить  
 
 автор: dimonicss   (19.08.2007 в 17:37)   личное сообщение
 
 

Кстати проверил с использованием str тоже работает. Так что причина не в str была. Хотя конечно зарезервированные имена конечно лучше не использовать не по назначению.

  Ответить  
 
 автор: Силыч   (19.08.2007 в 20:09)   личное сообщение
 
 

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

  Ответить  
 
 автор: dimonicss   (19.08.2007 в 17:38)   личное сообщение
 
 

Не работало только из-за использования Debug.Print

  Ответить  
 
 автор: dimonicss   (19.08.2007 в 17:46)   личное сообщение
 
 

Этот самый Debug.Print не в окно сообщений, а в какое-то другое место сообщения писал. Я их сейчас даже в компе нашел. Эту функцию скорее всего только для отладки лучше использовать, а не для выведения сообщений для пользователей.
Силыч спасибо еще раз за подсказки. Если бы я сразу подробнее разобрался как Debug.Print работает, то не было бы заморочки такой - быстрее бы все пошло.

  Ответить  
 
 автор: Силыч   (19.08.2007 в 20:09)   личное сообщение
 
 

1е апреля еще не скоро. хотяя... готовь сани с лета... вот повеселил!

з.ы. насчет DEBUG (отладка) PRINT(напечатать) ты, бесспорно, прав

  Ответить  
 
 автор: dimonicss   (19.08.2007 в 15:35)   личное сообщение
 
 

Может ли как-то влиять что в Форме ПриемЗаказов формат поля НомерТелЗак (@@@)@@@-@@-@@. Хотя вроде не должно - это ведь только вариант отображения на экране.
В таблице Заказы (с которой счвязана Форма ПриемЗаказов) формат поля НомерТелЗак текстовый с длиной 10 символов
В таблице ЧерныйСписок формат поля НомерТел текстовый с длиной 10 символов.

  Ответить  
 
 автор: dimonicss   (19.08.2007 в 16:02)   личное сообщение
 
 

И так и не пойму почему не работало в первом варианте без DLookUp. Может прояснишь?

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

что значит - "не работает" - не выводит сообщение в Debug.Print?


Private Sub PhoneNum_BeforeUpdate(Cancel As Integer)
Select Case (DCount("[BlockedNumber]", "tblBlackList", "[BlockedNumber] = '" & Me!PhoneNum.Value & "'"))
Case 0
MsgBox "номер в черном списке отсутствует"
' do smthng case number not exists
Case Else
MsgBox "номер в черном списке присутствует"
' do smthng case number exists
End Select
End Sub


УЧИ МАТЧАСТЬ

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