2013-08-06 2 views
0

В настоящее время база данных содержит расположение устройств и форму, используемую для обновления местоположения устройств и сохранения копии их предыдущего местоположения. Идеально хотите иметь возможность вводить список значений «BoxNo» (поле ID) и запускать форму несколько раз с тем же обновлением для каждой записи. Возможно ли это с помощью VBA/SQL? Очень низкий уровень знаний о программировании, любая помощь была бы высоко оценена.Выполнение кода на основе формы несколько раз с использованием vba

EDIT: В соответствии с просьбой Горда Томпсона, пояснения по процедуре формы. В форме есть текстовое поле boxnumber, которое заблокировано и изменено только с помощью строки поиска в нижней части страницы, то есть в части панели навигации, а не самой формы, а также нескольких текстовых и комбинированных меток, соответствующих полям в поле boxnumber. Пользователь изменяет соответствующие поля и затем нажимает кнопку «Обновить», которая запускает следующий код (Часть, относящаяся к вопросу, после инструкции else).

Private Sub Update_Click() 

'checks whether date updated 
If DateUpdated = False Then 
    MsgBox "Please enter a date", vbOKOnly, "Enter Date" 


    'saves copy to "changes" table 
Else 
    DoCmd.SetWarnings False 
     DoCmd.RunSQL "INSERT INTO Change_In_Location_tbl (Sm_ID,Given_To,On_Date, Comments)   VALUES (" & Sm_ID.OldValue & ",'" & Currently_Held_by.OldValue & "','" &  Date_Given.OldValue & "','" & Comments.OldValue & "');" 
    DoCmd.SetWarnings True 
    MsgBox "Update Complete", vbOKOnly 

End If

End Sub

+0

Вы можете поделиться тем, что уже делали? – lfrandom

+0

Возможно, существует некоторая форма кода, которая выполняет некоторые «вещи» для вас, возможно, в процедуре 'Form_AfterUpdate()'? Если это так, тогда вы можете получить лучший ответ, если вы [править] (http://stackoverflow.com/posts/18085447/edit) свой вопрос, чтобы показать этот код. –

ответ

0

Похоже, вы хотите использовать Do While Loop. Предполагая, что у вас есть список значений в таблице, откройте набор записей и пропустите каждое значение.

Dim db as Database 
Dim rec as Recordset 

set db = CurrentDB 
set rec = db.OpenRecordSet ("Select * from MyTableWithBoxNoValues") 

Do while rec.EOF = False 

    ... process the BoxNo and save it 
    (i.e., whatever your form is currently doing...) 

    rec.MoveNext 
Loop 
+0

Это то, что я думал изначально, но потому, что большая часть процедуры выполняется вне кода, я не думал, что это сработает. Можно ли каким-либо образом «кодифицировать» то, что в настоящее время существует, чтобы я мог запустить этот цикл? –

+0

OK, вам нужно будет использовать DLookup для получения соответствующей информации из таблицы с исходной информацией. Или вы могли бы поместить еще один цикл в мой цикл Do While, который открывает исходную таблицу, находит запись с BoxNo, которая соответствует rec (0), а затем запускает инструкцию обновления. У меня есть идеи в голове, но я слишком обернулся в своем собственном проекте на работе, чтобы войти в него. Надеюсь, кто-то еще подходит и берет его за линию ворот для меня. –

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