Intereting Posts
Общий SQL-конструктор .NET. MySQL: Как я могу присоединиться к одной таблице несколько раз? Возвращение нескольких строк на одной записи MySQL для заполнения отсутствующих дат при использовании GROUP BY DATE (table.timestamp) без присоединения к временной таблице UNION vs DISTINCT в исполнении Oracle Выберите Макс. Дату в нескольких записях В SQL, как я могу подсчитать количество значений в столбце, а затем повернуть его, чтобы столбец стал строкой? SQL отображает два результата бок о бок Mysql Вставить несколько строк с значениями, разделенными запятыми, только с помощью оператора sql Индекс не применяется к индексированному представлению Тип базы данных базы данных для конкретного класса Java Сортировка записей из Oracle с несколькими десятичными точками (.) if-elseif-else 'condition' в oracle SQL Ошибка SQL: «имя уже используется существующим ограничением» Ошибка вставки Oracle: недействительный месяц

Задача записи VBA / Access RecordSet для каждой записи формы

Я новичок в VBA и Access в целом и столкнулся с этой проблемой, пытаясь использовать предлагаемую альтернативную реализацию из другого вопроса, который я задал ( DLookup в Access не работает до тех пор, пока текстовое поле не будет нажато в форме )

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

 Dim rs Как DAO.Recordset
 Dim db As Database
 Dim qdf Как QueryDef
 Dim prm В качестве параметра

 Установить db = CurrentDb
 Установите qdf = db.QueryDefs ("[ДОХОД ДОХОДА МФ - ЕЖЕМЕСЯЧНЫЙ СТОРОН]")
 Для каждого prm В qdf.Parameters
     prm.Value = Eval (prm.Name)
 Следующий prm

 Установите rs = qdf.OpenRecordset (dbOpenDynaset)
 rs.FindFirst "[MyMonth] = 10 И [Org_Type] = '" & Me.Key & "'"
 Me.Oct = rs! SumVal
 «... другие задания месяца

Я думаю, что Me.Key ссылается на элемент управления, расположенный в разделе сведений вашей формы. В этом случае, и для того, чтобы перечислить все значения, полученные элементом управления, вам нужно будет просмотреть все записи. Одним из способов сделать это может быть:

Dim m_position as Long for m_position = 1 to Me.recordset.recordcount me.seltop = m_position debug.print me.key next m_position 

К сожалению, вы увидите ваш экран blincker во время просмотра всех строк. Вы можете с легкостью найти некоторые утилиты «ScreenFreezer» для VBA в сети (есть один вызванный LockWindowUpdate, если я помню).

Другим решением является просмотр клона базового набора записей (просмотр набора записей вызовет такое же поведение на экране, как и раньше). Предположим, что элемент управления Me.Key привязан к столбцу «Ключ» набора записей, код может быть:

 Dim rsClone as DAO.recordset set rsClone = Me.recordsetclone if rsClone.EOF and rsClone.BOF then Else rsClone.moveFirst Do while not rsClone.EOF debug.print rsCLone.fields("Key") rsClone.moveNext Loop Endif set rsClone = nothing 

Мой любимый – первый, добавлена ​​опция «замораживания». Ваш код может управлять значениями seltop и selheight формы. Это означает, что вы можете просматривать специальные записи, выбранные пользователями, и / или после просмотра всех записей вернуться к первоначальному выбору записи.

РЕДАКТИРОВАТЬ:

Следуя комментарию Бена, я добавлю, что если ваш элемент управления «myControl» находится в разделе сведений и не связан, вы не сможете управлять одним значением для каждой строки. Элемент управления будет иметь одинаковое значение для всех строк, когда форма отображается как «непрерывная».

Если ваш элемент управления «myControl» связан с полем «myField» набора записей, любой из следующих кодов будет увеличивать значение поля «myControl» и значение поля «myField» в одно и то же время. Вы будете иметь возможность иметь другое значение для каждой строки:

Решение 1:

 Dim m_position as Long for m_position = 1 to Me.recordset.recordcount me.seltop = m_position me.controls("myControl") = m_position next m_position 

Решение 2:

 Dim rsClone as DAO.recordset, _ i as long set rsClone = Me.recordsetclone if rsClone.EOF and rsClone.BOF then Else rsClone.moveFirst i = 1 Do while not rsClone.EOF rsClone.fields("myField") = i rsClone.update rsClone.moveNext i = i+1 Loop Endif set rsClone = nothing 

Вы можете попробовать текущее событие формы, как было предложено ранее 🙂

Не совсем ясно, какие параметры вам нужны в этом запросе. Я бы предположил, что вы просто создаете запрос без ЛЮБЫХ параметров, который включает в себя все нужные столбцы.

Затем создайте небольшую форму на основе этого запроса. Затем вы можете отбросить эту небольшую форму в существующую форму и отобразить несколько полей данных на основе значения значения ключа. (просто убедитесь, что вы установили мастер-ссылку и дочерние настройки для подформы). Вот как выглядит форма:

alt text http://sofru.miximages.com/sql/invoice2.gif

Таким образом, в приведенном выше законопроекте отображается информация о клиенте на основе идентификатора клиента и является связанной таблицей в счете-фактуре.

Другими словами, чтобы отобразить несколько полей данных на основе значения ключа из другой таблицы, вам не нужно писать одну строку кода. Таким образом, весь этот процесс и ваша цель могут быть сделаны путем перетаскивания мышью. У меня часто есть что-то вроде счета-фактуры или заказа на поставку, и у меня только есть идентификатор клиента. С помощью подформы я могу отобразить весь адрес и несколько полей данных без написания кода. Когда вы переходите от записи к записи, весь этот набор полей будет обновляться и всегда отображать правильные связанные данные.