簡體   English   中英

每個表單記錄的VBA / Access RecordSet問題

[英]VBA/Access RecordSet per form record problem

我是VBA和Access的新手,在嘗試使用我提出的另一個問題( 在Access中的DLookup直到在Form上單擊textBox之前不運行 )中嘗試使用提議的替代實現時遇到了此問題

下面的代碼運行,問題在於Me.Key對於表單中顯示的每個記錄都是不同的,並且在表單打開事件中運行它意味着它僅從第一條記錄中獲取分配給Me.Key的第一個值。 我該如何運行,以使Me.Key對於正在顯示的每個記錄/行都是不同的?

Dim rs As DAO.Recordset
Dim db As Database
Dim qdf As QueryDef
Dim prm As Parameter

Set db = CurrentDb
Set qdf = db.QueryDefs("[MF INCOME - STREAM MONTHLY]")
For Each prm In qdf.Parameters
    prm.Value = Eval(prm.Name)
Next prm

Set rs = qdf.OpenRecordset(dbOpenDynaset)
rs.FindFirst "[MyMonth]=10 AND [Org_Type]='" & Me.Key & "'"
Me.Oct = rs!SumVal
'...other month assignments

您可以按照前面的建議嘗試表單的當前事件:)

我猜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

不幸的是,瀏覽所有行時,您都會看到屏幕閃爍。 當然,您可以在網上找到一些VBA的“ screenFreezer”實用程序(據我所知,有一個名為LockWindowUpdate的實用程序)。

另一個解決方案是瀏覽基礎記錄集的克隆(瀏覽記錄集將引起與以前相同的屏幕行為)。 假設Me.Key控件綁定到記錄集的“ 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值。 這意味着您可以專門瀏覽用戶選擇的記錄,和/或瀏覽所有記錄后,返回到原始記錄選擇。

編輯:

在@Ben評論之后,我要補充一點,如果您的“ 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

根本不清楚在該查詢中需要什么參數。 我建議您僅構建一個不包含任何需要的所有列的任何參數的查詢。

然后根據此查詢構建小型表單。 然后,您可以將此小型表單放到現有表單中,並根據鍵值設置顯示幾個數據字段。 (只需確保為子表單設置了鏈接主設置和子設置)。 表單如下所示:

替代文字
(來源: shaw.ca

因此,在上面的帳單中根據客戶ID顯示客戶信息,並且是與發票相關的表。

換句話說,根據另一個表中的鍵值顯示多個數據字段,您無需編寫任何代碼。 因此,您的整個過程和目標都可以通過鼠標拖放來完成。 我經常有發票或采購單之類的東西,而且只有客戶ID。 通過使用子窗體,我可以顯示整個地址和多個數據字段,而無需編寫任何代碼。 當您從一個記錄移動到另一個記錄時,這整個字段集將更新並始終顯示正確的相關數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM