需要MS Access中的前3条记录

时间:2016-12-08 06:28:54

标签: vba ms-access textbox

我必须在MS Access中创建一个文本框,用户可以在其中查看特定结果集的前3个记录。因此,即使查询产生5条记录,我也只希望它将前三条记录显示为三个文本框(有时结果也可能是1,2或0条记录)。

我采用了简单的方法,创建了一个新的子表单,它使用master / child字段连接到父表单。文本框放在子窗体的详细信息部分中,并作为subfrom的记录源使用以下查询:

Select top 3 tbl1.column1, tbl1.column2 
from tbl1

column1是文本框的控制源,column2是我用于主/子链接的列。

现在的问题是,当我使用top 3时查询工作正常。但是当我使用top 3时,文本框突然消失,子表单完全空白。

我无法确定错误原因。我的猜测是它与子表单的类型有关。不确定。

有没有其他方法可以让一个文本框的编号可以根据结果而变化?(但是将结果集限制为3)

感谢帮助。

2 个答案:

答案 0 :(得分:0)

  1. 文本框不包含超过1个值。
  2. 您正尝试将2列的三个结果分配到一个文本框(不可以)。
  3. 使用列表框填充您正在进行的操作,将您刚才写入的查询分配到列表的行源中(不需要子表单)。这样用户将看到三条记录。
  4. Example

答案 1 :(得分:0)

您可以使用文本框来完成您要执行的操作。但是需要一些VBA编码才能实现这一目标。

Public function CombineValuesForTextBox() as string
Dim rst as dao.recordset
Dim strSQL as string

strSQL = "SELECT TOP 3 tbl1.Column1 as field1, tbl1.Column2 as field2 " & _
         "FROM tbl1;"
set rst = currentdb.openrecordset(strsql)
if rst.recordcount = 0 then 'Checks if the recordset has records or not
    CombineValuesForTextBox = "No records found"
    goto EndCode 'Or replace with what actions to take if no records are found
else
    rst.movelast 'Forces the recordset to fully load
    rst.movefirst
    do while not rst.eof
        if CombineValuesForTextBox = "" or CombineValuesForTextBox = empty then
            CombineValuesForTextBox = rst![field1] & " - " & rst![Field2]
        else
            CombineValuesForTextBox = CombineValuesForTextBox & vbcrlf & _
                                      rst![field1] & " - " & rst![Field2]
        end if
    Loop
end if
rst.close
set rst = nothing

EndCode:
if not rst is nothing then
    rst.close
    set rst = nothing
end if
end function

然后在您的表单上放入代码(确保文本框未绑定...)

me.textbox = CombineValuesForTextBox