2014-04-17 21 views
0

我見過幾個例子,但都是ASP或PHP。我工作的公司有很多安全性,我不允許在我的計算機上安裝這兩者中的任何一個用於開發,因此,我需要在HTML中執行此操作。vbscript在html表中顯示數據庫查詢

我創建了一個窗體,收集用戶的信息並通過VBScript將其提交到2010 Access數據庫。我需要弄清楚的是如何在HTML表格中顯示它。

下面是查詢數據庫的一切在表中的VBScript子:

Sub SelectFromDatabase() 

    Dim strSQL, strConnect 

    Dim conn, rs 

    Set conn = CreateObject("ADODB.Connection") 

    strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\My Stuff\MyData.accdb;Persist Security Info=False;" 

    conn.Open strConnect 

    strSQL = "SELECT * FROM SurveyData" 

    ' Send the query to the database and save result 
    Set rs = conn.Execute strSQL 

    ' Close the connection to the database 
    conn.Close 
    strSQL = "" 

end sub 

我創建了一個獨立的子調用先前子並存儲在變量中的數據:

sub PrintData 
    call SelectFromDatabase() 
    strFullName = FullName 
    strAddress = Address 
    strCity = City 
    strState = State 
    strZip = Zip 
    strPhone = Phone 
    strEmail = Email 
    strComputer = Computer 
    strOS = OS 
    strShopping = Shopping 
end sub 

這是我用來將數據打印到HTML表格的HTML:

<html> 
    <head> 
     <title>My Web Site - Customer Data</title> 
     <script language="vbscript" type="text/vbscript" src="Process.vbs"> 
     </script> 
    </head> 
    <body onLoad="SelectFromDatabase();"> 
     <h1 align=center>My Web Site</h1> 
     <h2>Customer Data</h2> 
     <p>Below is a list of the customer data that has been submitted.</p> 
     <hr> 
     <script language="vbscript" type="text/vbscript"> 
      document.writeln("<table border=1><tr><th>Name</th><th>Address</th><th>City</th><th>State</th><th>Zip</th><th>Phone</th><th>Email</th><th>Computer</th><th>OS</th><th>Shopping</th></tr>") 
      Do Until rs.EOF 
       document.writeln("<tr><td>" & rs(0) & "</td><td>" & rs(1) & "</td><td>" & rs(2) & "</td><td>" & rs(3) & "</td><td>" & rs(4) & "</td><td>" & rs(5) & "</td><td>" & rs(6) & "</td><td>" & rs(7) & "</td><td>" & rs(8) & "</td><td>" & rs(9) & "</td></tr>") 
       rs.MoveNext 
      Loop 
      document.writeln("</table>") 
     </script> 
    </body> 
</html> 

Th我收到的錯誤是在for each...行。這是說,PrintData是不是一個集合,我同意,但我不知道現在我會打電話sub PrintData,並能夠使用HTML表中的信息。

+0

我只是想確保我正確理解你。你有一個網站(不使用ASP),它包含一個表單,表單數據用於查詢*客戶端*上的數據庫? – Bond

+0

不需要。如果你看看上面的HTML例子,我試圖將數據打印到表格中。表單是數據如何輸入數據庫。我需要從數據庫中提取數據並將其放入HTML表格中。我無法使用PHP或ASP,因爲我無法安裝其中任何一項,這是由於公司的安全性。 – Lou

+0

好的,所以當你說「form」時,你的意思是Access中的表單?不是HTML表單?你是否熟悉HTA?我想你會想要走這條路。在網頁中創建客戶端ActiveX控件(即'CreateObject')會導致IE抱怨。您可能必須將IE的安全設置設置爲最低級別,才能讓它在每次都不會提示的情況下運行(我不建議這麼做)。有關HTA的更多信息,請參見[本頁](http://technet.microsoft.com/zh-cn/library/ee692768.aspx)。請注意標題爲「爲什麼我不使用HTML文件?」的部分。 – Bond

回答

1

查看我的評論以上關於切換到HTA。完成之後,您可以創建ActiveX控件(Connection對象,Recordset對象等)來查詢您的數據庫而無需Internet Explorer抱怨。您的SelectFromDatabase函數不保存結果記錄集。你正在做一個查詢,這很好,但你沒有保存結果集。 Connection.Execute()返回一個Recordset對象。

' in SelectFromDatabase()... 
strSQL = "SELECT * FROM SurveyData" 

' Send the query to the database AND save the result! 
Set rs = conn.Execute(strSQL) 

現在rs包含從您的查詢返回的記錄。 rs(0)是第一列的值,rs(1)是第二列的值,以此類推。你可以通過這些記錄,循環,像這樣:

Do Until rs.EOF 
    ' Write to page... 
    document.writeln("<tr><td>" & rs(0) & "</td><td>" & rs(1) & "</td></tr>") 
    rs.MoveNext 
Loop 

作爲替代循環,您也可以使用Recordset類的GetString()功能,所有的記錄以表格形式呈現:

document.write("<table><tr><td>" & rs.GetString(, , "</td><td>","</td></tr><tr><td>") & "</td></tr></table>") 

這裏有一個完整的工作示例:

<html> 
<body> 
<script language="vbscript"> 
    Sub SelectFromDatabase() 

     Dim cn, rs, e 

     Set cn = CreateObject("ADODB.Connection") 
     cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\My Stuff\MyData.accdb;Persist Security Info=False;" 

     Set rs = cn.Execute("SELECT * FROM SurveyData") 

     Set e = document.getElementById("content") 
     e.innerHTML = "<table><tr><td>" & rs.GetString(2, , "</td><td>", "</td></tr><tr><td>") & "</td></tr></table>" 

     rs.Close 
     cn.Close 

    End Sub 
</script> 
<body onload="SelectFromDatabase()"> 
    <div id="content"></div> 
</body> 
</html> 
+0

好的,這就是我要找的。所以,我需要'Set rs = conn.Execute strSQL'創建一個記錄集而不是'conn.Execute strSQL'?你是否推薦'Do Until'作爲你的替代'GetString()'的例子?我正在尋找最好的例子,我認爲你走在正確的軌道上。 :) – Lou

+0

對。就像語句「2 + 2」被評估爲「4」一樣,除非保存結果('x = 2 + 2'),否則它並沒有什麼好處。同樣的事情適用於'Connection.Execute()'。將結果保存到「Recordset」對象中。至於'Do Until'與'GetString()'...我不會在大記錄集中使用'GetString()' - 這是大量的行和/或列。它將所有記錄連接成一個字符串(在內存中)。 – Bond

+0

我試過你的'Do Until ... Loop'。它沒有顯示錶格中的數據。我做了你所說的關於'Set rs = conn.Execute strSQL'。我在該行上得到了「預期的結束語句」,帶有''標記的行,以及'Do Until rs.EOF'行上的「rs object required」。現在我錯過了什麼?在示例中查看我的更新代碼。 – Lou