我必须在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)
感谢帮助。
答案 0 :(得分:0)
答案 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