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

Форум: MS ACCESS

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

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

 
 

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

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

тема: И снова про массивы access 2003
 
 автор: angel_026   (08.09.2009 в 13:05)   личное сообщение
 
 

Доброго времяни суток!
Вот одну траблу решил, и сразу появилась другая:
Народ, подскажите, плиз, как сделать чтобы при первом нажатии на кнопку из формы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

  Ответить  
 
 автор: snipe   (08.09.2009 в 13:41)   личное сообщение
14 Кб.
 
 

А причем тута (или тама) массив?

вот так не подойдет?

  Ответить  
 
 автор: angel_026   (08.09.2009 в 14:42)   личное сообщение
 
 

СПС, за участие, тока массив здесь для того, чтобы уже имеющиеся записи добавлять в открывщуюся форму2, форма1 имеет 5000 записей и она ленточная, на каждой записи есть кнопка при нажатии текущаяя запись заноситься в массив, а после открытия формы2 добавляется в поля, ведь какую из 5000 записей кликнет юзер вопрос , вот решил использовать массив, тока как замуть переход к следующей записи при открытой форме, не знаю, вот уже 2 суток ТУПЛЮ, плиз, помогите избавиться от туПАКа

  Ответить  
 
 автор: Анатолий (Киев)   (08.09.2009 в 13:48)   личное сообщение
 
 

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

  Ответить  
 
 автор: angel_026   (08.09.2009 в 14:35)   личное сообщение
 
 

СпС Вам за помощь, тока при выполнении перехода пропадает первая запись, по идее, при повторных нажатиях на кнопку (их может быть 20), предидущая запись должна оставаться а следующая добавляться , а у меня почему-то предидущая пропадает, мож я делаю че не так?
Комрады, подскажите

  Ответить  
 
 автор: Анатолий (Киев)   (08.09.2009 в 16:08)   личное сообщение
 
 

Странно, что теряется. И не ругается? Может вы не все требуемые поля заполняете?
Добавьте строчку в код:

With Forms("Форма2") 
.Поле1 = Me.Поле1 
.Поле2 = Me.Поле2 
.Refresh 'или .Dirty = False  - сохранение записи.
End With

Я только не понял, вы редактируете существующие записи? Или, может, Форма2 не имеет источника?

  Ответить  
 
 автор: angel_026   (08.09.2009 в 16:21)   личное сообщение
 
 

Спс, за ответ, --->
форма1 имеет 5000 записей, а форма2 изначально 0, так вот когда из ф1 идет нажатие на кнопку, запись добавляется в ф2, ну и соответственно в таблицу, ф2 имеет 20 возможностей для добавления, вот здесь и собака порылась , как при каждом последующем нажатии на кнопку в ф1, конкретная запись добавлялась в нужные поля ф2
Пол дела я решил (не без помощи комрада Lukas), то есть, при нажатии на кнопку инфа четко добавляется туда куда надо,
Ну,а чтоб 1-ая запись не пропадала и при остальных возможных 19 кликах на кнопку в ф1, инфа добавлялась в следующие записи МОЗГ взрывается
думаю мож применить SELECT CASE И ПОВЕСИТЬ НА КАЖДЫЙ КЛИК vbКнопка_click какой-нить обработчик, мож так получиться?

  Ответить  
 
 автор: Анатолий (Киев)   (08.09.2009 в 17:49)   личное сообщение
 
 

Не понимаю, почему у вас пропадает 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 имена полей формы те же, что и имена связанных с ними полей таблицы/запроса.

  Ответить  
 
 автор: angel_026   (08.09.2009 в 18:04)   личное сообщение
 
 

Прошу прощения мож не так выразил свою траблу, мне переход нужен не по записям, а по полям, вот гляньте че надо добавить:
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 - Технологии программирования
Rambler's Top100 TopList