|
|
|
| Чего-то не срабатывает код
DoCmd.OpenForm "Телефоны", acNormal
DoCmd.GoToRecord , , acNewRec
Me!НомерТел = x
где x - текстовое зачение присваиваемое до этого в отдельной форме для ввода
НомерТел - строковое значение в Таблице Телефоны и связанной с ней Формы Телефоны.
Я так понимаю что не годится Me! для записи которая еще не создана, а только будет создаваться. Подскажите как правильнее команду задать. | |
|
| |
|
|
|
| необходимо
1-открыть форму. команда "DoCmd.OpenForm "Телефоны", acNormal" верная.
но можно просто "DoCmd.OpenForm "Телефоны"
2-перейти на новую запись. команда "DoCmd.GoToRecord , , acNewRec" верная
3-задать значение в поле. имя поля необходимо знать. как называется графа в таблице- значения не имеет. правильно так: Me!НомерТел = "фыв"
но это при том, что у вас есть полле с именем "НомерТел"
если все так- то необходимо поставить кавычки.
если знакчение задается из другой формы или из памяти (переменная и т.д.)- то необходимо писать так:
Me!НомерТел = Переменная1
или
Me!НомерТел =Форма1!Поле1!Value
не важно какая запись создается. если есть форма, и в ней есть поле- то этому полю можно задать значение. необходимо также помнить, что запись в таблицу добавится после того, как обновится форма с новыми данными. обновление формы можно достичь в том числе обычным переходом на новую запись, но это при условии что форма работает в режиме добавления записей.
Удачи! | |
|
| |
|
|
|
| >Подскажите как
>правильнее команду задать.
IMHO правильнее всего будет устанавливать DefaultValue для нужного поля (еще до того как перейти к нужной записи) | |
|
| |
|
|
|
| Explorer
> устанавливать DefaultValue для нужного поля
ну не совсем так. потому что если будем добавлять несколько записей- то дефаульт сработает тока для первой, и то, если эта переменная определена и имеет значение до открытия формы.
а если Вы настаиваете на фразе
еще до того как перейти к нужной записи
|
тогда может получиться так, что мы будем дорабатывать форму по возникновении ошибки (не важно какой), и когда все будет гутт- мы нажмем САВЕ. И все, дефаульт наш последний, тоже сохранится вместе с измененными обьектами и кодом. И всегда уже будет иметь какое-то начальное значение DefaultValue, пока его не определят, т.е. до первой ошибки.
А это уже НЕ гутт | |
|
| |
|
|
|
| У DoCmd.OpenForm есть аргумент OpenArgs, через который можно передать ваше значение, а по событию Form_BeforeInsert прочитать его из Me.OpenArgs и присвоить полю. | |
|
| |
|
|
|
| Все-таки не пойму почему у меня не работает.
Полный код функции такой
Function ТелефАдрес(x)
Dim MyCriteria As String
Dim MyRst As Recordset
MyCriteria = "[НомерТел] = '" & x & "'"
Set MyRst = CurrentDb.OpenRecordset("Телефоны", dbOpenDynaset)
With MyRst
.FindFirst MyCriteria
If Not MyRst.NoMatch Then
k = MyRst![Код]
DoCmd.OpenForm "Телефоны", acNormal
DoCmd.GoToRecord , , acGoTo, k
Else
DoCmd.OpenForm "Телефоны", acNormal
DoCmd.GoToRecord , , acNewRec
Me!НомерТел = x
End If
End With
MyRst.Close
End Function
Если вместо
Me!НомерТел = x
например пишу
MsgBox x
то при обработке функции сообщение с введенным текстом выскакивает.
а с Me пишет
Compile error:
Invalid use of Me keyword
Открытие существующей записи для редактирования прокатывает, а вот ввод новой что-то не идет. Прежде чем менять код хотелось бы понять в чем ошибка в существующем коде. | |
|
| |
|
|
|
| Телефоны - простая форма? или табличная/ленточная?
где эта функция прописана?
ME можно использовать только в модуле формы для обращения к этой самой форме | |
|
| |
|
|
|
| Телефоны простая форма. Функция Function ТелефАдрес(x) прописана в Modules / Module1, то есть не в модуле формы, а в общих модулях. А вызов функции идет следующим образом: сначала нажатием на кнопку на одной из форм открывается обычная форма ВводТелефона, в которой одно поле для ввода номера телефона и копка Продолжить. После ввода номера телефона и нажатия на кнопку Продолжить одет следующая команда:
Private Sub Продолжить_Click()
x = Me![НомерТел]
DoCmd.Close
Call ТелефАдрес(x)
End Sub
Так и идет вызов функции. При обработке функции уже задумано, чтобы открывалась форма Телефоны. И если искомый номер телефона есть открывалась существующая запись с этим номером телефона, а если номера нет, то создавалась новая запись с этим номером телефона (при этом дополнительно в форме заполняется ряд полей для адресных данных по этому номеру телефона). В общем, открытие существующей записи у меня идет, а создание новой тоже идет, вот только номер телефона в соответствующее поле не подставляется. Пишет ошибку про Me. | |
|
| |
|
|
|
|
Function ТелефАдрес(x)
Dim MyCriteria As String
Dim MyRst As Recordset
MyCriteria = "[НомерТел] = '" & x & "'"
Set MyRst = CurrentDb.OpenRecordset("Телефоны", dbOpenDynaset)
With MyRst
.FindFirst MyCriteria
If Not MyRst.NoMatch Then
k = MyRst![Код]
DoCmd.OpenForm "Телефоны",, ,"[Код] = " & k, acFormEdit
Else
DoCmd.OpenForm "Телефоны",,,,acFormAdd,,x
End If
End With
MyRst.Close
End Function
|
В форме телефоны на событие загрузка пишем:
Private Sub Form_Load()
If Me.DataEntry And Nz(OpenArgs, "") <> "" Then Me!НомерТел= OpenArgs
End Sub
|
Общие рекомендации вместо
MyCriteria = "[НомерТел] = '" & x & "'"
Set MyRst = CurrentDb.OpenRecordset("Телефоны", dbOpenDynaset)
With MyRst
.FindFirst MyCriteria
....
|
я бы использовал dlookup
Dim MyRst As Recordset - желательно указывать тип рекордсета во избежании скрытых ошибок
в вашем случае
Dim MyRst As dao.Recordset | |
|
| |