在 VB6.0 中使用 Microsoft Internet Controls (WebBrowser) 動態生成 HTML 表格展示 ADO Recordset 數據,關鍵在於正確構建 HTML 字符串並賦值給 Document.body.innerHTML。
Private Sub Command1_Click()
Dim strHtml As String
strHtml = "<html>" & vbCrLf
strHtml = strHtml & "<head><meta charset=""utf-8""></head>" & vbCrLf
strHtml = strHtml & "<body>" & vbCrLf
strHtml = strHtml & "<h1 align='center'>報告單</h1>" & vbCrLf
strHtml = strHtml & RecordsetToHtmlTable(Adodc1.Recordset) ' 調用函數生成表格
strHtml = strHtml & "<br><input type='button' value=' 列印此頁 ' onclick='window.print()'>" & vbCrLf
strHtml = strHtml & "</body></html>"
' 關鍵:確保 Document 就緒後再賦值
On Error Resume Next
WebBrowser1.Document.body.innerHTML = strHtml
If Err.Number <> 0 Then
MsgBox "WebBrowser 文檔未就緒,請先導航到 about:blank"
End If
End Sub
Private Sub Form_Load()
WebBrowser1.Navigate2 "about:blank" ' 初始化空白頁
End Sub
Function RecordsetToHtmlTable(rs As ADODB.Recordset) As String
Dim html As String, f As ADODB.Field
html = "<table border='1' cellpadding='3' cellspacing='0' class='data'>"
html = html & "<tr>"
For Each f In rs.Fields
html = html & "<th>" & f.Name & "</th>"
Next
html = html & "</tr>"
rs.MoveFirst
Do While Not rs.EOF
html = html & "<tr>"
For Each f In rs.Fields
html = html & "<td>" & IIf(IsNull(f.Value), " ", f.Value) & "</td>"
Next
html = html & "</tr>"
rs.MoveNext
Loop
html = html & "</table>"
RecordsetToHtmlTable = html
End Function
Form_Load 中 Navigate2 "about:blank" 確保 Document 物件存在。RecordsetToHtmlTable 返回完整 <table> HTML,避免在函數中直接操作 response.Write(ASP 風格,VB 中無效)。& vbCrLf 保持 HTML 可讀性,便於調試。innerHTML 前用 On Error Resume Next 防止文檔未就緒報錯。onclick='window.print()' 直接調用瀏覽器列印對話框。此法將數據展示邏輯與界面分離,易於維護樣式(可在 HTML 中嵌入 CSS),是 VB6.0 開發報表的經典技巧。