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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Вызов одной формы из другой
 
 автор: Аленка   (18.11.2008 в 17:20)   личное сообщение
 
 

Как вызывать одну форму из другой? Но не просто, а для того, чтобы вызываемая форма открылась на новой записи и при этом, чтобы в эту запись была внесена информация о создании записи (дата, время и пользователь).
Открыть форму с новой записи - не проблема. Но вот в этой новой записи никак не хочет записывваться информация о ее создании.

Вызываю я Форму2 из Формы1 кнопкой с кодом:
DoCmd.OpenForm "fsys_BDStructure_TABLES"
DoCmd.GoToRecord , , acNewRec
With CodeContextObject
.ДОбавлено= Now()
.[Кем добавлено] = Members
End With

Даже если код кнопки я делаю Public, все равно не помогает.
Как сделать, чтобы заработало?
Спасибо

  Ответить  
 
 автор: Кабан   (18.11.2008 в 17:39)   личное сообщение
 
 

я бы запросом insert into добавлял сразу в таблицу... зачем эти танцы с бубнами лишние? :)

  Ответить  
 
 автор: FORMAT   (18.11.2008 в 17:40)   личное сообщение
 
 

Ну так и записывайте создателя и время на событие Форма2_Open.
ЗЫ: ИМХО эти данные не нужно выводить в форму, а заносить в таблицу при сохранении записи на форме2

  Ответить  
 
 автор: Аленка   (19.11.2008 в 12:23)   личное сообщение
 
 

Что касается запроса INSERT и записывать пользователя при ОТКРЫТИИ формы, то это не катит по нескольким причинам.
1. Ленточная форма не предназначена для изменений и удалений, соответственно я не совсем поняла, откуда пойдет запрос INSERt и куда. Скорее, это не для моей ситуации.
2. Форма редактирования из разных мест открывается по-разному. Где-то на определенной записи, а иногда и на новой. Если я повешу на событие Открытия формы код внесения записи о времени добавления записи, то он будет менять время добавления уже имеющихся записей,а это недопустимо.
3. может просто я не совсем вникла в Ваши советы, но я объяснила свою точку зрения.
В любом случае, за советы огромное спасибо. Всегда хорошо видеть разные варианты решения проблемы.

  Ответить  
 
 автор: osmor   (18.11.2008 в 17:42)   личное сообщение
 
 

docmd.OpenForm "fsys_BDStructure_TABLES",acNormal,,,acFormAdd
with forms("fsys_BDStructure_TABLES")
.ДОбавлено= Now()
.[Кем добавлено] = Members
End With

для "Добавлено" можно стразу в таблице сделать значение по умолчанию now()

  Ответить  
 
 автор: osmor   (18.11.2008 в 17:44)   личное сообщение
 
 

а если вы это делаете на SQL сервере, то и вообще имеет смысл все вычисляемые поля делать сразу в таблице

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

+пицот

  Ответить  
 
 автор: Аленка   (19.11.2008 в 12:25)   личное сообщение
 
 

Я слышала, что так можно. Просто я пока плаваю в этих триггерах и т.п. Сижу, много читаю, но нужно время, чтобы я разобралась и поняла. Поэтому пока делаю как могу.

  Ответить  
 
 автор: Аленка   (19.11.2008 в 12:27)   личное сообщение
 
 

ЧестнО, первым делом сделала значением по умолчанию. Но почему-то потом это оказалось неудобным. Точно не помню, почему. Вспомню, напишу

  Ответить  
 
 автор: Анатолий (Киев)   (18.11.2008 в 18:03)   личное сообщение
 
 

Const strForm = "fsys_BDStructure_TABLES"
DoCmd.OpenForm strForm
DoCmd.GoToRecord acDataForm, strForm, acNewRec
With Forms(strForm)
...
End With

Кроме того открыть форму можно сразу на новой записи:
DoCmd.OpenForm strForm, , , , acFormAdd

А еще вносить текущее время и юзера лучше по событию Form_BeforeUpdate "fsys_BDStructure_TABLES", при сохранении новой записи если Me.NewRecord=True или поля пусты).

ЗЫ. Я знаю, как должно работать, но никогда не использую CodeContextObject, а у вас всё наоборот.

  Ответить  
 
 автор: Аленка   (19.11.2008 в 12:16)   личное сообщение
 
 

Спасибо всем огромное за советы. Все отлично работает!
А что касается CodeContextObject, то при преобразовании макросов акцес использует всегда этот объект, а я, чтобы не напортить чего-то, его пока не меняю. Как стану поопытней, тогда его заменю.
Всем хорошего дня!!!!!!!!!!

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