将文本附加到textBox中不添加记录集

时间:2016-08-01 14:17:41

标签: forms vba ms-access access-vba

我的表单 myForm ,文本框 myText

onLoad 函数中,我编写的代码应该将记录集中的所有行数据库的锁文件附加到 myText 文本框。

实际发生的是,只有四个字段的第一个字段被附加到文本框中。

Dim cn As New ADODB.Connection
Dim cn2 As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim i, j As Long

cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.Open "Data Source=Z:\myDatabase.mdb"    
cn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
    & "Data Source=Z:\myDatabase.mdb"

Set rs = cn.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}")

    Me.myText.SetFocus
    Me.myText.text = ""
    Do While Not rs.EOF            
        Me.myText.text = Me.myText.text & rs.Fields(0) & vbTab & rs.Fields(1) & vbTab & _
        rs.Fields(2) & vbTab & rs.Fields(3) & vbCrLf
        rs.MoveNext
    Loop

我试过

Debug.Print rs.Fields(0) & vbTab & rs.Fields(1) & vbTab & rs.Fields(2) & vbTab & rs.Fields(3)

并且所有四个字段都显示在即时窗口中。

修改 我取出了vbtab,因为它不受支持且文件本身已经有空格,我在

中更改了Me.myText.text
Me.myText.text = Me.myText.text & rs.Fields(0) & rs.Fields(1) & _
        rs.Fields(2) & rs.Fields(3) & vbCrLf

Me.myText。 现在我的代码似乎在开始工作。当我逐步调试时,文本框会像它应该的那样填充,但是当Code退出do while循环时,只有第一行的第一个字段显示在文本框中。

退出循环之前

debug.print Me.myText显示所有行。退出循环后仍显示所有行。但在表单中,文本框仅显示第一个记录,第一个字段。

表单和文本框都没有除此事件之外的任何事件,这些事件在表单加载中。

有什么问题?

1 个答案:

答案 0 :(得分:1)

使用属性.Value(这是textbox的默认属性),而不是.Text

所以Me.myText.Text ==> Me.myText.Value或Me.myText

文本框支持使用vbCrLf的多行。

不支持使用vbTab的

标签

将myvbTab =“”定义为制表符分隔符而不是vbTab

修改代码的以下片段:

 myvbTab= "    "
dim row_data
 Do While Not rs.EOF    
    row_data = rs.Fields(0) & myvbTab& rs.Fields(1) & _  
    myvbTab & rs.Fields(2) & myvbTab& rs.Fields(3) & vbCrLf        
    Me.myText= Me.myText & row_data
   ' be sure that data is displayed, to know if control characters in row_data
    Debug.Print  row_data
    rs.MoveNext
Loop

修改

要隔离问题,您可以运行该代码:(独立于读取记录集)

 Me.myText.Value = "start  "
 Dim tabChar As String

tabChar = Chr(9) '"   " 
Me.myText = Me.myText & "one" & tabChar & "two" & vbCrLf
Me.myText = Me.myText & "three" & tabChar & "four" & vbCrLf

应该显示

start    one   two
three  four