首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

將存儲過程數據輸出至 HTML 報表模板:ASP/ADO 經典實現方案

     編輯:Delphi

前言

在傳統 ASP/ADO 架構下,將資料庫存儲過程返回的記錄集動態填充至 HTML 表格模板,是產生可列印、可匯出報表的常用手法。本文提供一個極簡範例:預定義 HTML 模板字串,以佔位符標記動態區域,執行存儲過程後逐行替換生成最終報表。

一、HTML 報表模板設計

<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<TITLE>報表模板</TITLE>
<BODY>
<TABLE BORDER="1" cellpadding="0" cellspacing="0">
<TR>
  <TH>公司名稱</TH> <TH>聯系人</TH> <TH>產品名稱</TH> <TH>單價</TH>
</TR>
<!-- DATA_ROWS_START -->
<TR>
  <TD>Exotic Liquids</TD> <TD>Charlotte Cooper</TD> <TD>Chai</TD> <TD>18.0000</TD>
</TR>
<TR>
  <TD>Exotic Liquids</TD> <TD>Charlotte Cooper</TD> <TD>Chang</TD> <TD>19.0000</TD>
</TR>
<!-- DATA_ROWS_END -->
</TABLE>
</BODY>
</HTML>

二、ASP 核心代碼邏輯

<%
' 1. 建立連線與命令物件
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=SQLOLEDB;Data Source=.;Initial Catalog=Northwind;Integrated Security=SSPI;"

Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = "sp_GetProductReport" ' 存儲過程名
cmd.CommandType = adCmdStoredProc

' 2. 執行獲取記錄集
Set rs = cmd.Execute()

' 3. 讀取模板檔案
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(Server.MapPath("report_template.html"), 1)
strTemplate = ts.ReadAll
ts.Close

' 4. 定位動態區域標記
nStart = InStr(strTemplate, "<!-- DATA_ROWS_START -->")
nEnd   = InStr(strTemplate, "<!-- DATA_ROWS_END -->")
strHeader = Left(strTemplate, nStart + Len("<!-- DATA_ROWS_START -->") - 1)
strFooter = Mid(strTemplate, nEnd)

' 5. 迴圈生成資料列
strRows = ""
Do Until rs.EOF
    strRows = strRows & "<TR>" & _
        "<TD>" & rs("CompanyName") & "</TD>" & _
        "<TD>" & rs("ContactName") & "</TD>" & _
        "<TD>" & rs("ProductName") & "</TD>" & _
        "<TD>" & FormatNumber(rs("UnitPrice"), 4) & "</TD>" & _
        "</TR>" & vbCrLf
    rs.MoveNext
Loop

' 6. 組合輸出
Response.Write strHeader & strRows & strFooter

' 7. 清理
rs.Close: Set rs = Nothing
cmd.Close: Set cmd = Nothing
conn.Close: Set conn = Nothing
%>

三、存儲過程範例

CREATE PROCEDURE sp_GetProductReport
AS
BEGIN
    SELECT s.CompanyName, s.ContactName, p.ProductName, p.UnitPrice
    FROM Suppliers s
    JOIN Products p ON s.SupplierID = p.SupplierID
    ORDER BY s.CompanyName, p.ProductName
END

四、進階擴展建議

  • 樣式分離: 將 CSS 寫入模板 <style> 區塊,支援列交替色、hover 高亮。
  • 分頁列印: 使用 CSS @media print { .page-break { page-break-after: always; } } 控制分頁。
  • 參數化查詢: 存儲過程接受 @StartDate, @EndDate, @CategoryID 等參數,ASP 傳遞 cmd.Parameters.Append。
  • 匯出 Excel: 在輸出前加 Response.ContentType = "application/vnd.ms-excel"、Response.AddHeader "Content-Disposition", "attachment;filename=report.xls"。
  • 模板引擎升級: 引入 NVelocity、RazorEngine 等成熟模板引擎支援條件判斷、迴圈、部分視圖等高級語法。

五、瀏覽器渲染效果

生成的 HTML 直接在瀏覽器顯示為帶邊框的資料表格,公司名稱、聯系人、產品名稱、單價欄位整齊對齊,支援列印與另存為 Excel。

結語

「模板字串 + 記錄集迴圈拼接」是零依賴、部署簡單的經典報表生成模式。雖然現代架構傾向於前端渲染或專業報表工具,但在維護舊系統、快速原型開發場景下,此法依然高效實用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved