Заполнение ОбластиДанных формы access программным способом.

nik.an
Дата: 29.02.2016 14:59:38
Добрый день! Есть форма в access 2010, в которую из sql-сервера тянутся данные по проведённым инструктажам сотрудника. Заполнение полей области данных формы предполагается в коде. Но при выполнении кода, цикл записывает дважды одну и ту же последнюю строку (у сотрудника было два разных инструктажа). Как исправить код, чтобы в область данных записывались обе строки (все, что есть по сотруднику)? Заранее спасибо!
______________________________________

Private Sub Form_Load()

' подключаемся к базе
ConnectToBase

' выбираем нужные записи:
SQLText = "SELECT users_status.status, order_type.type, users_timesheet.order_num, users_timesheet.order_date, users_timesheet.begin_date, users_timesheet.end_date" _
& " FROM order_type INNER JOIN (users_status INNER JOIN users_timesheet ON users_status.id = users_timesheet.status_id) ON order_type.id = users_timesheet.order_id" _
& " WHERE (((users_timesheet.user_id)=14));"

rstZS.Open SQLText, cn, adOpenKeyset, adLockOptimistic

' присваиваем значения запроса в поля формы:
If Not rstZS.EOF Then
rstZS.MoveFirst
Dim i As Integer
For i = 1 To rstZS.RecordCount
Me.ПолеСтатусСотрудника = rstZS.Fields(0)
Me.ПолеТипПриказа = rstZS.Fields(1)
Me.ПолеНомерПриказа = rstZS.Fields(2)
Me.ПолеДатаПриказа = rstZS.Fields(3)
Me.ПолеДатаНачала = rstZS.Fields(4)
Me.ПолеДатаОкончания = rstZS.Fields(5)
rstZS.MoveNext
Next i

End If

End Sub
_________________________________________
Анатолий ( Киев )
Дата: 29.02.2016 16:45:13
Вы после заполнения полей не сохраняете запись и не переходите на новую.
И вообще, добавлять запись программно лучше непосредственно в Recordset (или RecordsetClone) формы.
' присваиваем значения запроса в поля формы:
Do Until rstZS.EOF 
 With Me.Recordset
    .AddNew
    !ПолеСтатусСотрудника = rstZS.Fields(0)
    !ПолеТипПриказа = rstZS.Fields(1)
    !ПолеНомерПриказа = rstZS.Fields(2)
    !ПолеДатаПриказа = rstZS.Fields(3)
    !ПолеДатаНачала = rstZS.Fields(4)
    !ПолеДатаОкончания = rstZS.Fields(5)
    .Update

    rstZS.MoveNext
 End With
Loop
Предполагается, что имена элементов на форме те же, что имена полей в источнике.
nik.an
Дата: 01.03.2016 06:24:03
Анатолий ( Киев ), спасибо за ответ!

Попробовал Ваш вариант. Выдаёт ошибку "Run-time error '3426': Действие прервано связанным объектом.". Остановился на строке '.AddNew'. Где мне искать ошибку?
Анатолий ( Киев )
Дата: 01.03.2016 11:02:44
nik.an
Выдаёт ошибку "Run-time error '3426': Действие прервано связанным объектом.". Остановился на строке '.AddNew'.
Похоже, источник формы не поддерживает добавление записей. В вашей форме действительно можно перейти на новую запись, заполнить поля и сохранить? Что является источником данных формы?

"из sql-сервера тянутся данные" - у вас БД с прилинкованными таблицами sql-сервера или ADP проект?
Slavinag
Дата: 01.03.2016 11:12:20
Не понял, с какой целью такая хитрость применяется?

Почему бы просто источник данных формы не сделать из того самого запроса, тянущего с SQL нужную информацию? Переопределив предварительно в форме соответственно названия полей? Типа такого - в той же процедуре загрузки формы:

Me.RecordSource = SQLText


Форма только на просмотр ведь нужна?
nik.an
Дата: 01.03.2016 11:33:16
Анатолий ( Киев ),

Проект - ADP. Обращаемся напрямую к SQL серверу
Источник данных формы определяем в Form_Load() :

SQLText = "SELECT users_status.status, order_type.type, users_timesheet.order_num, users_timesheet.order_date, users_timesheet.begin_date, users_timesheet.end_date" _
& " FROM order_type INNER JOIN (users_status INNER JOIN users_timesheet ON users_status.id = users_timesheet.status_id) ON order_type.id = users_timesheet.order_id" _
& " WHERE (((users_timesheet.user_id)=14));"

rst.Open SQLText, cn, adOpenKeySet, adLockOptimistic
Forms![КартаСотр_табель].Recordset = rst

Переход по записям возможен как и редактирование.
nik.an
Дата: 01.03.2016 11:35:43
Slavinag,

Спасибо за помощь!

Что подразумевает переопределение название полей? Дать им имена как у полей в запросе? Н.р. status, type и т.д.?

Форма нужна для просмотра.

В будущем необходима будет форма для редактирования, для этого нужно будет искать другой путь?!
nik.an
Дата: 04.03.2016 14:55:26
Помогли найти решение.
Как оказалось, нужно строку присвоения значения полю прописывать следующим образом:

Me.ПолеСтатусСотрудника.ControlSource = rstZS.Fields (0).name
...
...


Всем спасибо за помощь!