【问题标题】:appending text into textBox not adding all fields from recordset将文本附加到文本框而不是从记录集中添加所有字段
【发布时间】:2016-08-02 19:08:03
【问题描述】:

我有一个带有文本框 myText 的表单 myForm

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。 现在我的代码似乎在一开始就可以工作。当我逐步调试时,文本框按预期填充,但是当代码退出 do while 循环时,文本框中只显示第一行的第一个字段。

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

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

怎么了?

【问题讨论】:

  • 在表单的设计视图中,文本框是否允许滚动条和多行?

标签: forms ms-access vba


【解决方案1】:

使用属性 .Value(这是文本框的默认属性),而不是 .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

【讨论】:

  • 感谢vbTab 提示。
  • 我使用了你的代码,起初它似乎可以工作。当我调试文本框按预期填充时,但是当我单步执行end sub 时,文本框中的所有行都消失了,除了记录集第一行的第一个字段。如果我在到达end sub 之前停止运行代码,则这些行将保留在文本框中。
  • 注释行设置焦点,并使用 Me.myText ,添加 debug.Print 显示什么 comming ,可能有从记录集中检索的控制字符
  • @M.哈桑,我查过了。什么都没有。文本全部保留到结束 Sub.
  • 它应该在调试(立即窗口)中看到的内容与文本框中的内容相同。你能确认调试显示有效数据吗
猜你喜欢
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2017-03-25
  • 2014-11-05
相关资源
最近更新 更多