|
|
|
| В Форме ПриемЗаказов есть текстовое поле НомерТелЗак при вводе в которое номера телефона должна идти проверка не находится ли номер в Таблице ЧерныйСписок, если да, то выскакивает сообщение об этом. В Таблице ЧерныйСписок есть поля НомерТел и Примеч. На ввод номера повесил событие
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то что-то неправильно написал. Подскажите плиз где ошибка. | |
|
| |
|
|
|
| . я бы на BeforeUpdate вешал
. я бы использовал в данном случае ф-ю DLookUp, имхо, в данном случае она очень даже оправдана
а ошибка в этой строке
rs.FindFirst "[НомерТел] = 'Me!НомерТелЗак.Value'"
нужно
rs.FindFirst "[НомерТел] = '" & Me!НомерТелЗак.Value & "'" | |
|
| |
|
|
|
| Спасибо за ответ, только что-то не помогло. Ничего не происходит если пытаюсь ввести номер телефона, занесенный в Таблицу ЧерныйСписок.
Кстати когда попробовал повесить событие на 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
Мне бы сейчас хоть в каком-нибудь виде чтобы проверка номера заработала, а то с утра каких только вариантов не перепробовал - все не идет. Опыта своего не хватает. А примеров готовых с подобным кодом посмотреть не нашел. | |
|
| |
|
|
|
| 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. прежде чем писать программы, плз, изучите инструмент, которым вы работаете | |
|
| |
|
|
|
| Вот как ты сейчас написал работает. Большое спасибо за подсказку.
Только ругаться по этому поводу не обязательно. Лучший способ изучить что-то это на деле использовать. Ну недостаточно знаю - так это не повод не браться за что либо. Какие функции не знаю - не использую временно. Постепенно и их начинаю использовать. | |
|
| |
|
|
|
| я не ругаюсь. я огорчён
"Лучший способ изучить что-то это на деле использовать." - верно. сам такого же мнения придерживаюсь. но как ты будешь использовать на деле что-то, если ты даже инструкции не прочёл.
понимаешь о чем я?
невозможно научиться правильно писать программы, не зная и не изучив язык.
получается, что ты телегу впереди кобылы пытаешься запрячь.
не обижайся :) я где нормальный, но где и беспощадный | |
|
| |
|
|
|
| Ну в общем правильно пишешь. Читаю конечно инструкции. А иногда инструкции путано написаны и пытаюсь пробовать как получится. Вот хелп этот гребаный то работает, а по некоторым функциям вообще ничего не дает. В 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
Интерес к нему остался, потому как кое-что из того что там было собираюсь использовать в другом месте программы. И понять хотелось бы где что неправильно. | |
|
| |
|
|
|
| повтоярюсь
1. STR - объявлена как переменная, но это зарезервированное слово VBA - STR - функция
2. после
rs.FindFirst "[НомерТел] = '" & Me!НомерТелЗак.Value & "'"
хорошо бы проверить - найдено чтолибо или нет
тебе поможет rs.NoMatch
3. еще хорошо бы знать точнее - код ошибки или описание. | |
|
| |
|
|
|
| Короче разобрался вроде
Работает в таком виде
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 использовать, хотя почему еще не понял, надо почитать. | |
|
| |
|
|
|
|
| Кстати проверил с использованием str тоже работает. Так что причина не в str была. Хотя конечно зарезервированные имена конечно лучше не использовать не по назначению. | |
|
| |
|
|
|
| прямая причина не в этом, конечно же
но называть переменные зарезервированными словами - это ламерство.
или прекратите сейчас же юродствовать или бросайте программирование | |
|
| |
|
|
|
| Не работало только из-за использования Debug.Print | |
|
| |
|
|
|
| Этот самый Debug.Print не в окно сообщений, а в какое-то другое место сообщения писал. Я их сейчас даже в компе нашел. Эту функцию скорее всего только для отладки лучше использовать, а не для выведения сообщений для пользователей.
Силыч спасибо еще раз за подсказки. Если бы я сразу подробнее разобрался как Debug.Print работает, то не было бы заморочки такой - быстрее бы все пошло. | |
|
| |
|
|
|
| 1е апреля еще не скоро. хотяя... готовь сани с лета... вот повеселил!
з.ы. насчет DEBUG (отладка) PRINT(напечатать) ты, бесспорно, прав | |
|
| |
|
|
|
| Может ли как-то влиять что в Форме ПриемЗаказов формат поля НомерТелЗак (@@@)@@@-@@-@@. Хотя вроде не должно - это ведь только вариант отображения на экране.
В таблице Заказы (с которой счвязана Форма ПриемЗаказов) формат поля НомерТелЗак текстовый с длиной 10 символов
В таблице ЧерныйСписок формат поля НомерТел текстовый с длиной 10 символов. | |
|
| |
|
|
|
| И так и не пойму почему не работало в первом варианте без DLookUp. Может прояснишь? | |
|
| |
|
|
|
| что значит - "не работает" - не выводит сообщение в 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
|
УЧИ МАТЧАСТЬ | |
|
| |