Доброго времени суток, Посетитель!
|
|
|
|
|
|
|
|
|
вид форума:
|
|
|
|
| Доброго времяни суток!
Вот одну траблу решил, и сразу появилась другая:
Народ, подскажите, плиз, как сделать чтобы при первом нажатии на кнопку из формы1 открывалась форма2 и в 1-ю запись вносились данные из массива, а при втором и т.д. нажатии форма2 уже не открывалась, т.к. она уже открыта, а данные вносились во вторую запись и т.д. docmd.GotoRecord, ,acNext не помогает, так как перед идет по форме1, а не по фомре2
Вот, что с помощь F1 и Lucas у меня получилось:
Dim pst As myrecA
Private Sub Кнопка_Click()
With pst
.Поле1 = Me.Поле1
.Поле2 = Me.Поле2
End With
If CurrentProject.AllForms(Форма2).IsLoaded = False Then
DoCmd.OpenForm "Форма2", acNormal
With Forms("Форма2")
.Поле1 = Me.Поле1
.Поле2 = Me.Поле2
End With
End If
If CurrentProject.AllForms(Форма2).IsLoaded = True Then
With Forms("Форма2")
.Поле3 = Me.Поле1
.Поле4 = Me.Поле2
End With
End If
End Sub | |
|
| |
|
14 Кб. |
|
| А причем тута (или тама) массив?
вот так не подойдет? | |
|
| |
|
|
|
| СПС, за участие, тока массив здесь для того, чтобы уже имеющиеся записи добавлять в открывщуюся форму2, форма1 имеет 5000 записей и она ленточная, на каждой записи есть кнопка при нажатии текущаяя запись заноситься в массив, а после открытия формы2 добавляется в поля, ведь какую из 5000 записей кликнет юзер вопрос , вот решил использовать массив, тока как замуть переход к следующей записи при открытой форме, не знаю, вот уже 2 суток ТУПЛЮ, плиз, помогите избавиться от туПАКа | |
|
| |
|
|
|
| docmd.GotoRecord, ,acNext применяется к текущей форме.
Надо docmd.GotoRecord, "Форма2" ,acNext
Вероятно код должен выглядеть так:
If CurrentProject.AllForms(Форма2).IsLoaded = False Then
DoCmd.OpenForm "Форма2", acNormal
Else
DoCmd.GotoRecord, "Форма2" ,acNext
End If
With Forms("Форма2")
.Поле1 = Me.Поле1
.Поле2 = Me.Поле2
End With
|
| |
|
| |
|
|
|
| СпС Вам за помощь, тока при выполнении перехода пропадает первая запись, по идее, при повторных нажатиях на кнопку (их может быть 20), предидущая запись должна оставаться а следующая добавляться , а у меня почему-то предидущая пропадает, мож я делаю че не так?
Комрады, подскажите | |
|
| |
|
|
|
| Странно, что теряется. И не ругается? Может вы не все требуемые поля заполняете?
Добавьте строчку в код:
With Forms("Форма2")
.Поле1 = Me.Поле1
.Поле2 = Me.Поле2
.Refresh 'или .Dirty = False - сохранение записи.
End With
|
Я только не понял, вы редактируете существующие записи? Или, может, Форма2 не имеет источника? | |
|
| |
|
|
|
| Спс, за ответ, --->
форма1 имеет 5000 записей, а форма2 изначально 0, так вот когда из ф1 идет нажатие на кнопку, запись добавляется в ф2, ну и соответственно в таблицу, ф2 имеет 20 возможностей для добавления, вот здесь и собака порылась , как при каждом последующем нажатии на кнопку в ф1, конкретная запись добавлялась в нужные поля ф2
Пол дела я решил (не без помощи комрада Lukas), то есть, при нажатии на кнопку инфа четко добавляется туда куда надо,
Ну,а чтоб 1-ая запись не пропадала и при остальных возможных 19 кликах на кнопку в ф1, инфа добавлялась в следующие записи МОЗГ взрывается
думаю мож применить SELECT CASE И ПОВЕСИТЬ НА КАЖДЫЙ КЛИК vbКнопка_click какой-нить обработчик, мож так получиться? | |
|
| |
|
|
|
| Не понимаю, почему у вас пропадает 1-я запись.
Команда DoCmd.GotoRecord, "Форма2" ,acNext выполняется? Переход на новую выполняется?
Я, кстати, уже много лет не пользуюсь этой командой. Она выполняет переход с последней на новую запись? Или возникает ошибка, которую вы игнорируете? Может здесь нужна константа acNew, а не acNext?
Вообще, я бы сделал так:
If CurrentProject.AllForms(Форма2).IsLoaded = False Then
DoCmd.OpenForm "Форма2", acNormal
End If
With Forms("Форма2").Recordset
.AddNew
!Поле1 = Me.Поле1
!Поле2 = Me.Поле2
.Update
End With
|
Здесь предполагается, что в Форме2 имена полей формы те же, что и имена связанных с ними полей таблицы/запроса. | |
|
| |
|
|
|
| Прошу прощения мож не так выразил свою траблу, мне переход нужен не по записям, а по полям, вот гляньте че надо добавить:
Dim pst As myrecA
Private Sub Кнопка_Click()
If CurrentProject.AllForms(Форма2).IsLoaded = False Then
With pst
.ПолеА = Me.ПолеА
.ПолеБ = Me.ПолеБ
.ПолеВ = Me.ПолеВ
End With
DoCmd.OpenForm "Форма2", acNormal
With Forms("Форма2")
.Controls("ПолеX") = Me!ПолеА
.Controls("ПолеZ") = Me!ПолеБ
.Controls("ПолеY") = Me!ПолеВ
End With
'Если поставить здесь END то в форму2 занесутся нужные данные в нужные поля нужной записи
'А вот далее, и есть проблемма, как при нажатии Кнопка_Click, добавить следующие данные в нужные поля, а не в новую запись(в форме2 1-ой записи присвоенно порядка 150 полей)
End If
If CurrentProject.AllForms(Форма2).IsLoaded = True Then
doCmd.GoToRecord , "Форм2", acGoTo
With Forms("Форма")
.Controls("ПолеX1") = Me!ПолеА
.Controls("ПолеZ1") = Me!ПолеБ
.Controls("ПолеY1") = Me!ПолеВ
End With
End Sub
'В таком варианте, в открывщейся форме2 в поля добавляется сразу две записи, а при клике на кнопку второе поле меняет данные правильно, а хотел чтобы при открытии формы2 в поля добавлялось только первое значение, а при дальнейших кликах добавлялись в др. поля, но не в записи. ВОТ же задачка | |
|
| |
HiProg.com - Технологии программирования
|