2012-04-09 6 views
0

Может ли кто-нибудь указать мне пример формы доступа, которая может создавать несколько записей (в одной таблице) на основе одной формы?MS-Access 2003: создание нескольких записей из одной формы

Чтобы развернуть: мы записываем информацию о времени, затраченном на проект в заданную дату. У нас был запрос на одну форму, которая позволила бы пользователю вводить данные за 5 (или 7) дней данной недели в одной форме. Он/она выбирает неделю из календаря, проекта из списка, затем вводит до 7 номеров за часы, проведенные на этой неделе.

Я проверял вопросы 5294128, что не представляется возможным, и вопрос 8070706, который, по-видимому, подразумевает, что это можно сделать только в VBA (не используя графический интерфейс). Любые альтернативы?

Спасибо.

+0

В крайней простоте , используйте форму данных или сплошную форму. Вы можете использовать для этого конфигурацию мастера/детали. – HK1

+0

@ HK1, спасибо. Я не вижу, как будет работать непрерывная форма, но (очевидно) я новичок в этом. Access (2003) не содержит записей для «формы данных». – CarlF

+0

его можно назвать представлением таблицы данных – HK1

ответ

1

Что-то на этих линиях должно соответствовать. Это несвязанная форма с подчиненной формой.

Form

Вы можете получить тип формы с помощью мастера форм

enter image description here

Для правильной работы, вам потребуется немного кода, скажем:

Private Sub cmdGo_Click() 
Dim rs As DAO.Recordset 
Dim sSQL As String 
Dim sSDate As String 
Dim sEDate As String 

    sSDate = "#" & Format(Me.txtStartDate, "yyyy/mm/dd") & "#" 
    sEDate = "#" & Format(Me.txtStartDate + Me.txtNoDays, "yyyy/mm/dd") & "#" 

    sSQL = "SELECT * FROM MyTable WHERE DataDate Between " & sSDate _ 
     & " AND " & sEDate 

    Set rs = CurrentDb.OpenRecordset(sSQL) 

    If rs.RecordCount < Me.txtNoDays Then 
     AddRecords sSDate, sEDate 
    End If 

    Me.DataSubform.Form.RecordSource = sSQL 
End Sub 



Sub AddRecords(sSDate, sEDate) 
''Uses counter table with integers from 0 to 
''highest required number 
''Another useful table is a calendat table, which would 
''save some work here. 

    sSQL = "INSERT INTO MyTable (DataDate) " _ 
     & "SELECT AddDate FROM " _ 
     & "(SELECT " & sSDate _ 
     & " + [counter.ID] AS AddDate " _ 
     & "FROM [Counter] " _ 
     & "WHERE " & sSDate _ 
     & "+ [counter.ID] Between " & sSDate _ 
     & " And " & sEDate & ") a " _ 
     & "WHERE AddDate NOT In (SELECT DataDate FROM MyTable)" 

    CurrentDb.Execute sSQL, dbFailOnError 
End Sub 
+0

Как я интерпретирую основную программу, подпрограмма AddRecords фактически сохраняет содержимое формы в БД (запрос INSERT INTO). Я озадачен тем, что любое из того, что пользователь вводит, соединяется с полями в форме. Я вижу «Me.DataSubform.Form.RecordSource = sSQL» в основной программе, но ничто в AddRecords не возвращает обратно в SubForm, чтобы узнать, какие данные сохранить в таблице, смутив меня. Итак, где добавляет AddRecords данные, которые он вставляет? И спасибо за помощь. – CarlF

+0

AddRecords создает записи в MyTable для дат, выбранных пользователем, путем ввода даты начала и периода дней. Если записи недоступны, AddRecords создает отсутствующие записи, тогда выбранные записи отображаются в подформе. – Fionnuala

+0

Ooooh. Он отображает их в подформе, и пользователь может их редактировать? Это не соответствует моей модели данных, но это потому, что я не объяснил это хорошо. Опять же, спасибо. – CarlF

Смежные вопросы