填充文本框的动态记录集

问题描述:

从日期列表中,我需要选择不同的日期,添加365天,然后填充每个可能日期的文本框。填充文本框的动态记录集

我想我需要通过一个记录集循环,我已经得到了这么多,但我不知道下一步是什么。

Private Sub Form_Load() 

Dim db As Database 
Dim rs As Recordset 
Dim i As Long 

Set db = CurrentDb 
Set rs = db.OpenRecordset("qryListBox") 

If rs.EOF And rs.BOF Then 
Else 
    Do While Not rs.EOF 
     For i = 0 To rs.Fields.Count - 1 

      ' get list of dates 
      ' if there is more than one date, populate subsequent boxes 
      me.txtAnnv1.Value = DateAdd('d',365,[sdrdate]) 

     Next i 
     rs.MoveNext 
    Loop 
End If 

rs.Close 
Set rs = Nothing 
Set db = Nothing 

End Sub 

如果我有:

+------+-----------+ 
| NAME | SDRDATE | 
+------+-----------+ 
| Jane | 02/02/12 | 
| Jane | 03/03/12 | 
| Jane | 04/04/14 | 
| Jane | 04/04/14 | 
+------+-----------+ 

我希望看到:

txtAnnv1 = 02/03/13 
txtAnnv2 = 03/04/13 
txtAnnv3 = 04/05/15 
+0

你为什么要循环查询结果中的字段('For i = 0 To rs.Fields.Count - 1')?是不是只有一个字段包含日期? – JNevill 2014-10-01 20:00:30

+0

是的,日期只有一个字段。这是我从头开始编写(或试图)的第一个记录集循环。那么,那部分是不需要的呢? – turkaffe 2014-10-01 20:06:27

+0

是的,这是不需要的。你简单的需要遍历记录集,你现在正在做这件事。文本框是否已经存在于你的表单上,你的想法是动态添加它们吗? – JNevill 2014-10-01 20:15:54

我相信下面将让你非常接近。这假设你的文本框已经存在。它将首先隐藏所有以名称“txtAnnv”开头的文本框并清除它们的值。然后,它会将记录集中的值分配给每个文本框,并随着时间的推移取消隐藏。

Private Sub Form_Load() 

Dim db As Database 
Dim rs As Recordset 
Dim i As Long 
Dim ctrl as Control 


'Assuming that text boxes are already created and are named txtAnnv1, txtAnnv2, etc.. 
'Empty and hide all of the txtAnnv* text boxes 
For each ctrl in me.Controls 
    if left(ctrl.name,7) = "txtAnnv" then 
     ctrl.visible = false 
     ctrl.value = "" 
    end if 
Next ctrl 

Set db = CurrentDb 
Set rs = db.OpenRecordset("qryListBox") 

If rs.EOF And rs.BOF Then 
Else 
    i = 1 
    Do While Not rs.EOF 
     'Set the value of each textbox to 1 year from the date in the recordset   
     me.controls("txtAnnv" & i).value = DateAdd('d', 365, rs.Fields(1).value) 

     'unhide textbox 
     me.controls("txtAnnv" & i).visible = true 

     'iterate the counter that steps up to the next textbox 
     i = i + 1 
     rs.MoveNext 
    Loop 
End If 


rs.Close 
Set rs = Nothing 
Set db = Nothing 

End Sub 
+0

它的工作原理,谢谢! – turkaffe 2014-10-02 12:28:25