powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Заполнение ОбластиДанных формы access программным способом.
8 сообщений из 8, страница 1 из 1
Заполнение ОбластиДанных формы access программным способом.
    #39181485
nik.an
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Есть форма в 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
_________________________________________
...
Рейтинг: 0 / 0
Заполнение ОбластиДанных формы access программным способом.
    #39181669
Вы после заполнения полей не сохраняете запись и не переходите на новую.
И вообще, добавлять запись программно лучше непосредственно в Recordset (или RecordsetClone) формы.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
' присваиваем значения запроса в поля формы:
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

Предполагается, что имена элементов на форме те же, что имена полей в источнике.
...
Рейтинг: 0 / 0
Заполнение ОбластиДанных формы access программным способом.
    #39182048
nik.an
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ), спасибо за ответ!

Попробовал Ваш вариант. Выдаёт ошибку "Run-time error '3426': Действие прервано связанным объектом.". Остановился на строке '.AddNew'. Где мне искать ошибку?
...
Рейтинг: 0 / 0
Заполнение ОбластиДанных формы access программным способом.
    #39182211
nik.anВыдаёт ошибку "Run-time error '3426': Действие прервано связанным объектом.". Остановился на строке '.AddNew'. Похоже, источник формы не поддерживает добавление записей. В вашей форме действительно можно перейти на новую запись, заполнить поля и сохранить? Что является источником данных формы?

"из sql-сервера тянутся данные" - у вас БД с прилинкованными таблицами sql-сервера или ADP проект?
...
Рейтинг: 0 / 0
Заполнение ОбластиДанных формы access программным способом.
    #39182222
Фотография Slavinag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял, с какой целью такая хитрость применяется?

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

Код: vbnet
1.
Me.RecordSource = SQLText



Форма только на просмотр ведь нужна?
...
Рейтинг: 0 / 0
Заполнение ОбластиДанных формы access программным способом.
    #39182262
nik.an
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),

Проект - 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

Переход по записям возможен как и редактирование.
...
Рейтинг: 0 / 0
Заполнение ОбластиДанных формы access программным способом.
    #39182269
nik.an
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Slavinag,

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

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

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

В будущем необходима будет форма для редактирования, для этого нужно будет искать другой путь?!
...
Рейтинг: 0 / 0
Заполнение ОбластиДанных формы access программным способом.
    #39185976
nik.an
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогли найти решение.
Как оказалось, нужно строку присвоения значения полю прописывать следующим образом:

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



Всем спасибо за помощь!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Заполнение ОбластиДанных формы access программным способом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]