• 沒有找到結果。

第 19 章 ASP 程式設計

N/A
N/A
Protected

Academic year: 2021

Share "第 19 章 ASP 程式設計"

Copied!
1
0
0

加載中.... (立即查看全文)

全文

(1)

19 章 ASP 程式設計

由於本書並非特別針對網頁設計,有關網頁之製作方式並不準備深入

探討,本章僅介紹有關 ASP 物件操作資料庫之常用方法與程式設計技巧,

讀者必須具備基礎的HTML 知識,方能了解範例程式之意義。讀者若需了解

網頁設計技巧,請參閱其它專書。在閱讀本章時,可搭配本書提供之ASP 應

用系統,將能加深讀者之ASP 程式語法與設計技巧。在 WEB 網際網路環境

下,仍然需要使用ADO 物件來處理資料庫,同時需要透過 MyODBC 驅動

程式與MySQL 連線。

18-1 ASP 程式 18-1-1 ASP 程式架構

ASP 程式必須架構在網頁程式內,基本的 ASP 程式架構如圖 19-1 所示。

圖 19-1ASP 程式架構示意圖 其中

公用程序:它是一個外部獨立檔案,可供一個以上之網頁程式共同使用之副程 式。公用程序之引入方式必須合乎下列語法,

 在<Html>標記之前

 前後以 <!-- #include 及 -->夾住

 以 virtual 或 file 指定程序檔之來源路徑

 程序檔必須是完整檔名及對應路徑

<!-- #include virtual = "公用程序" -->

<%

……….. ‘前置處理 ASP 程序

%>

<HTML>

<HEAD>

………

</HEAD>

<BODY>

….…… ‘網頁主文

<%

……….. ‘展示資料 ASP 程序 %>

</BODY>

</HTML>

<%

……….. ‘資料處理 ASP 副程式

%>

(2)

前置處理程序:用來承接其它網頁傳送之資料、擷取對話變數(SESSION),或是 處理當下網頁程式內含表單之輸入資料。

展示資料程序:用來擷取資料庫資料並予以轉換為網頁文稿。

副程式:支援展示資料ASP 程序之副程式,若展示資料 ASP 程序需重覆出現在

許多段落時,可予以抽出並給與一個獨立的副程式名稱。

<….>:以角括符夾住關鍵字之段落為 HTML 網頁文稿。

前述各段落之ASP 程序可視情況缺設,也可以同時都出現。

18-1-2 ASP 語言

目 前 可 用 來 執 行 主 控 端 動 態 網 頁 的 語 言 有 Java、JavaScript、Jscript、VBScript 等,用來執行主控端動態網頁的語言有 PHP、JSP、ASP 等。ASP 為 Microsoft 的 WEB 伺服器-IIS 所提供的網頁程式 執 行 環 境 , 讓 使 用 者 可 以 運 用<% 與 %> 標 籤 將 Script 撰 寫 之 程 式 碼 嵌 入 HTML 文件。ASP 預設支援的 Script 語言有 VBScript 和 Jscript,本書使用 VBScript 來介紹所有操作資料庫之網頁程式。

18-1-3 ASP 程式開發工具

由於ASP 程式是一個純文字檔,任何文字編輯器,例如 NotePad,均

可 用 來 撰 寫 網 頁 程 式 。 此 外 ,Office2003 家 族 成 員 - Microsoft Script Editor 、FrontPage 等,則為專用的網頁程式編輯器,本書提供的範例程式都

是使用FrontPage 設計而成。FrontPage 的操作非常簡易,初學者很容易自行

學習,建議讀者可以使用FrontPage 來閱讀範例程式。

18-2 ASP 指令語法 18-2-1 標記

編輯ASP 程式碼時,指令無論置於何處,指令碼必須以 “<%”前導,

以及以“%>”結束,基本格式如下:

 單行指令

<% ASP 程式碼 %>

 多行指令

<%

ASP 程式碼 ASP 程式碼……

%>

ASP 程式預設在伺服端執行,若需指定在主控端處理,則標記符號必 須改為下列格式:

(3)

<Script Language=VBscript>

ASP 程式碼

</Script>

18-2-2 變數宣告

ASP 程式變數係採弱型別,可不經宣告就給值。資料型別只有一種 - Variant , 而 Variant 型 別 可 以 儲 存 數 種 不 同 的 資 料 , 包 括 Empty、Null、Boolean、Byte、Integer、Long、Single、Double、Date、String、Obj ect 及 Error。一個運算式之輸出結果,其型別取決於運算當時之狀況,應用

系統會自動轉換至適當型別。變數名稱不得與VBscript 關鍵字同名。

變數宣告方式可採明確宣告,或是採模糊宣告,指令如下:

Dim A ‘明確宣告 A = 10

A = 10 ‘模糊宣告-直接給值 18-2-3 輸出資料

 輸出一般資料

ASP 程式使用 Response 物件之 Write 方法來輸出資料,常用的指令形式 如下:

Response.Write “欲輸出之字串”

Response.Write 變數 Response.Write 運算式

字串可由一般文字及HTML 標記組合而成,而變數或運算式也可以和

HTML 標記組合使用。

 移轉網頁

若需要從工作中之網頁轉移至其它網頁,可使用下列指令:

Response.Redirect “目的網頁”

此道指令必需置於<HTML>標記前。

 中斷網頁輸出

若要強制中斷後續資料之輸出,可使用下列指令:

Response.End

 強制輸出緩充區資料 Response.Flush

輸出網頁資料時,事前可使用Response.Buffer = True 指令將資料寫入緩 充區,此道指令必需置於<HTML>標記前。

 檢查主控端是否正常連線 Response.IsClientConnected

(4)

輸出網頁資料時,可利用此道指令來檢查主控端是否正常連線,回傳結

果為True 時,表示主控端仍正常連線。

18-2-4 資料輸入

ASP 環境下,資料輸入必須透過內含輸入表單之網頁程式,輸入表

單之基本樣式如圖19-2,範例程式請參閱本書所附之範例程式。

19-2 輸入表單基本樣式

輸入表單之主要構成要素及用途簡述如下,讀者若要了解各控制項之詳 細用法與語法,請參閱本書之範例程式。

<Form>…</Form>:宣告輸出網頁內含輸入表單,表單則由 Action、Method 和 Name 所組成。

Action:指定擷取表單資料之處理程式,此程式可以是原網頁程式,也可以是

另外的ASP 程式。

Method:指定傳遞輸入表單資料之方法,可選用“post”或“get”。

Name:指定輸入表單之名稱。

Input:在表單內佈置一個輸入控制項,可使用 Type 來指定輸入控制項之型 式,可依需要指定下列型式:

text:文字方塊

password:密碼型文字方塊 radio:選擇鈕

check:核取方塊

hidden:隱藏型文字方塊

submit:將輸入資料傳送出去(表單必備控制項)

reset:將輸入資料清除

其它控制項:除Input 型式之控制項外,尚有下列兩種控制項:

Textarea:多行文字方塊 Select:下拉式清單方塊

<Body>

<Form Action =擷取表單資料程式 Method=[post|get] Name=表單名稱>

[輸入項提示文字] <Input Type=控制項型式 Name=控制項名稱 Value=預設值>

………..

<其它控制項>

<Input Type=Submit Name=控制項名稱 Value= “送出”>

<Input Type=Reset Name=控制項名稱 Value= “清除”>

</Form>

</Body>

(5)

18-2-5 擷取輸入表單資料 擷取資料之指令如下:

 存入變數

變數 = Request(“輸入表單控制項”)

 置入網頁

<% = Request(“輸入表單控制項”)%>

擷取表單資料之程式若為原網頁程式,則擷取指令須置於前置處理段,若 為其它程式則無限制。

18-2-6 網頁間資料傳遞

在資料處理過程,若需要在不同網頁程式間傳遞資料,可使用下列三種 方式:

 Application、Session 或 Cookie 物件

 以 URL 傳送

 使用隱藏式文字方塊

Application 物件適用所有連線在同一虛擬目錄下之不同程式, Session 和 Cookie 物件則適用同一連線在同一虛擬目錄下之不同程式。Application 和 Session 物件係將變數存在伺服端記憶體,而 Cookie 則儲存在主控端之硬碟。

至於變數之生命週期,Application 物件與 WEB 應用程式同進退,Session

物件預設為二十分鐘,而Cookie 物件則與瀏覽器同進退。應用範例請參閱本

書所附之範例程式。

前述物件之應用指令語法說明如下:

 建立物件或重新給值

Application(“變數名稱”) = 值 Session(“變數名稱”) = 值

Response.Cookies (“變數名稱”) = 值

 取用變數值

變數 = Application(“變數名稱”) 變數 = Session(“變數名稱”)

變數 = Request.Cookies (“變數名稱”)

除了使用上述物件來傳遞資料外,也可直接透過 URL 來傳送資料,指

令語法如下:

<A Href= “目的程式?變數 = 值”>提示文字</A> ‘HTML 格式

<% Response.Redirect “目的程式?變數 = 值” %> ‘ASP 格式 若傳遞變數超過一個或以上時,變數間須以“&”串接,指令如下:

<A Href= “目的程式?變數 1 = 值 1&變數 2 = 值 2”>提示文字</A>

<% Response.Redirect “目的程式?變數 1 = 值 1&變數 2 = 值 2” %>

(6)

在目的程式則以Request(“變數”)來取得傳遞資料。

此外,也可以使用隱藏型文字方塊來傳遞資料,應用範例如下:

<INPUT Type=Hidden Value=<%=Page%> Name="_recNO">

18-2-7 Server 物件

常用的Server 物件指令簡述如下:

 MapPath:傳回虛擬目錄

範例1:Server.MapPath(“/MySQL/ASP/EasyDoMySQL.mde”)

說明:取得虛擬目錄之根目錄,然後與指定之檔案字串串接在一起。

範例2:Server.MapPath(“../”) 說明:取得工作網頁之父目錄。

範例3:Server.MapPath(“./”) 說明:取得工作網頁之目錄。

 ServerVariables:傳回伺服器對應信息

範例:showNewRec = Request.ServerVariables("PATH_INFO") 說明:此指令可取出工作網頁程式名稱及目錄。

18-2-8 檔案操作

 建立檔案物件 指令語法:

Set 檔案系統物件 = Server.CreateObject(“Scripting.FileSystemObject”)

 建立檔案 指令語法:

Set 檔案變數 =檔案系統物件.CreateTextFile(檔案及路徑名稱[,是否覆 寫[,檔案格式]])

說明:

是否覆寫:可傳入True 或 False,預設值為 False。

檔案格式:傳入True 表 Unicode,False 表 ASCII,預設值為 True。

 刪除檔案 指令語法:

檔案系統物件.DeleteFile(檔案及路徑名稱[,移除唯讀檔]) 說明:

移除唯讀檔:指定檔案數屬性為唯讀時,是否仍刪除,傳入True 表要刪

除,False 表不刪除。

 檢查檔案是否存在 指令語法:

(7)

檔案系統物件.Fileexists(檔案及路徑名稱) 說明:

傳回True 表檔案已存在,False 表不存在。

 開啟檔案 指令語法:

Set 檔案變數 =檔案系統物件.OpenTextFile(檔案及路徑名稱[,輸出入模 式[,建立新檔[,開啟格式]]])

說明:

輸出入模式:傳入1 表唯讀(預設值),2 表唯寫(覆寫舊檔),3 表資

料加在檔案末尾。

建 立 新 檔 : 檔 案 存 在 時 , 是 否 覆 寫 , 傳 入 True 表 要 覆 寫 , 預 設 值 為 False。

開啟格式:傳入1 表 ASCII(預設值),傳入-1 表 Unicode,傳入-2 表以 原格式開啟。

 檢查檔案結尾 指令語法:

檔案變數.atEndOfStream 說明:

傳回True 表已至檔案末尾。

讀取指定字元數

指令語法:

檔案變數.Read(N) 說明:

傳入數值N 表要讀取之字元數。

 讀取一行 指令語法:

檔案變數.ReadLine 說明:

從檔案指標處開始,讀取該行之所有字元。

 讀取檔案全部字元 指令語法:

檔案變數.ReadAll 說明:

將整個檔案內容讀出。

 略過 N 個字元不讀取 指令語法:

(8)

檔案變數.Skip(N) 說明:

傳入數值N 表要忽略之字元數。

 略過一行不讀取 指令語法:

檔案變數.SkipLine 說明:

略過檔案指標處之整行字元。

 寫入字串 指令語法:

檔案變數.Write(字串) 說明:

將傳入之字串寫入檔案。

 寫入一行 指令語法:

檔案變數.WriteLine(字串) 說明:

將傳入之字串以獨立行形式寫入檔案。

18-3 資料庫處理程式 18-3-1 資料庫連線 連線指令:

Dim con ‘宣告連線物件

Set con= Server.CreateObject("ADODB.Connection") ‘產生連線物件

 MySQL 連線字串

cn_str = "Driver= {MySQL ODBC 3.51 Driver}; Server= 主 機 ;User= 帳 號 ; Password=密碼;Database=MySQL 資料庫; Option= " & 1 + 2 + 8 + 32 + 16384

Access 連線字串

cn_str = "Provider = Microsoft.Jet.OLEDB.4.0; "

cn_str = cn_str & " Data Source=" & Server.MapPath(Access 資料庫) & ";

Jet OLEDB:Database Password=密碼"

con.ConnectionString = cn_str con.Open

說明1:連線時需使用 Server 物件之 CreateObject 方法來建立連線物件。

(9)

說明2:欲連線之主機、資料庫及登入帳號和密碼,可以使用專用登入表單

來取得,然後將它們存在SESSION 物件內備用。當要連線時,即可

SESSION 物件取出,再將它們組合在連線字串內。

18-3-2 開啟紀錄集 指令語法:

Dim adRs

Set con = openCon(連線資料庫)

Set adRs = Server.CreateObject("ADODB.Recordset") adRs.Open SQL 指令集, con, 3, 2

說明1:連線時需使用 Server 物件之 CreateObject 方法來建立紀錄集物件。

說明2:使用程式請參閱 openDB.sub 檔案之 openRs 副程式。

18-3-3 紀錄操作

 MySQL 資料庫

ASP 環境下,紀錄之操作方式均需使用 ADO 物件及方法,使用方法

除下述幾點不同外,其餘都與Access 應用環境大同小異。

 無法離線作業。

 使用 Update 方法來更新紀錄。

 無法使用 RecordCount 方法來取得紀錄筆數,請改用下例程式計算紀錄 筆數:

Str = “Select count(*) From 資料表 Where 過濾條件”

adRs.Open Str, con, 3, 2 n = adRs(0) ‘n:紀錄總數 adRs.Close

Set adRs = Nothing

Access 資料庫

ASP 環境下,Access 資料庫之紀錄操作方法完全與 Access 應用環境

相同。

18-3-4 輸出資料

將資料表紀錄輸出成網頁,處理方式如下述程序:

 純文字形式-一次送出全部紀錄 1. 前置處理

Dim con '必須宣告 Dim rs1 '必須宣告

If Session("strSQL") = Empty Then

(10)

Response.Write "無 SQL 指令!"

Response.End End If

WKDB = Session("WKDB") ‘取出工作資料庫 strSQL=Session("strSQL") ‘取出來原資料 SQL Set rs1=openRs(WKDB, strSQL,1) ‘開啟紀錄集 rs1.Filter = ""

tbl = getTable(strSQL , "NOJ" ) ‘取出資料表名 tREC = getREcNo(rs1,1) ‘計算紀錄總數

intPage=1

2. 送出製作表格指令

Response.Write "<CENTER><TABLE BORDER=1 cellspacing = 0 cellpadding = 0 >"

3. 填入欄位抬頭

For i=0 to adRs.Fields.Count-1

Response.WRITE "<TD> <FONT Size=2 > " & adRs(i).Name &

"</FONT></TD>"

Next

Response.Write "</TR>"

4. 輸出紀錄 odd = True

Do While Not adfRs.EOF If odd = True Then

Response.Write "<TR bgcolor=White>" ‘相臨紀錄以不同顏色顯示 Else

Response.Write "<TR bgcolor=LightGreen>"

End if

For i=0 To adRs.Fields.Count -1 ‘送出每一筆紀錄

Response.WRITE "<TD align=right> <FONT Size=2 > " & adRs(i) &

"</FONT></TD>"

Next

Response.Write "</TR>"

odd = Not odd ‘變換顏色 adRs.MoveNext ‘移至次筆 Loop

(11)

5. 完成表格製作

Response.Write "</TABLE></CENTER>"

 純文字形式-一次送出一頁 1. 前置處理:與輸出全部紀錄類似 2. 提示要輸出資料之頁次按鈕

<% showNewRec = Request.ServerVariables("PATH_INFO") %>

‘取得當下之網址及工作網頁名稱

<FORM Action=<%=showNewRec%> Method=GET>

‘點取頁次後,以指定之網頁來展示資料

<table><tr>

<td> <Font Color="#0000FF">[<%=tbl%>]紀錄瀏覽 </Font> </td>

<%If Page <> 1 Then ' 如果不是位於第一頁 %>

<td> <A HREF=<%=showNewRec%>?Page=1><FONT Size=3 >首頁

</FONT></A> </td>

<td> <A HREF=<%=showNewRec%>?Page=<%=(Page-1)%>><FONT Size=3 >前頁</FONT></A> </td>

<%End If

If Page <> tPage Then ' 如果不是位於最後一頁

%>

<td> <A HREF=<%=showNewRec%>?Page=<%=(Page+1)%>><FONT Size=3 >次頁</FONT></A> </td>

<td> <A HREF=<%=showNewRec%>?Page=<%=tPage%>><FONT Size=3

>末頁</FONT></A> </td>

<%End If%>

<td> <A HREF=<%=showNewRec%>?Page=0><FONT Size=3 >全部

</FONT></A> </td>

<td> <FONT Size=3 >輸入頁次:</FONT> </td>

<td> <INPUT TYPE=TEXT Name=Page SIZE=3> </td>

<td> <FONT Size=3 >頁次:</FONT> <FONT COLOR ="Red"> <% =Page

%>/<%=tPage%></FONT> </td>

</tr>

</table>

</FORM>

3. 移動紀錄指標至目的頁次的第一筆

pgRec = Session("PageSize") ‘取出每頁筆數預設值

(12)

If intPage > 0 Then ‘目的頁次大於 0 adRs.Move (intPage - 1) * pgRec

Else

If Not adRs.EOF Then adRs.Move 0 ‘目的頁次小於 0 則強制移至首頁 End If

4. 送出製作表格指令

Response.Write "<CENTER><TABLE BORDER=1 cellspacing = 0 cellpadding = 0 >"

5. 填入欄位抬頭

For i=0 to adRs.Fields.Count-1

Response.WRITE "<TD> <FONT Size=2 > " & adRs(i).Name &

"</FONT></TD>"

Next

Response.Write "</TR>"

6. 輸出紀錄

odd = True ‘相臨紀錄以不同顏色顯示 For j = 1 to pgRec

if fRs.EOF then Exit For

end if

If odd = True Then

Response.Write "<TR bgcolor=White>"

Else

Response.Write "<TR bgcolor=LightGreen>"

End if

For i=0 To adRs.Fields.Count -1 ‘送出每一筆紀錄

Response.WRITE "<TD align=right> <FONT Size=2 > " & adRs(i) &

"</FONT></TD>"

Next

Response.Write "</TR>"

odd = Not odd ‘變換顏色 adRs.MoveNext ‘移至次筆 Next

7. 完成表格製作

Response.Write "</TABLE></CENTER>"

(13)

註:範例程式請參閱showPage.asp 及 showData.sub 之 showByPage 副程式。

 輸入表單形式 -一次送出一筆 1. 前置處理:與輸出全部紀錄類似 2. 製作輸入表單及輸出資料

<Table> <TABLE BORDER=1 cellspacing = 0 cellpadding = 0>

‘搭配表格型式製作表單

<td>

<FORM Action = upData.asp Method=Post name=Form2> ‘製作表單

<CENTER>

<font color="#0000FF">[<%=fTbl%>] </font> ‘fTbl:資料表名稱

<INPUT Type=Hidden Value=<%=Page%> Name="_recNO">

‘以隱藏型文字方塊記錄當下之紀錄指標

</td>

<%

If not adRs.eof then adRs.Move Page fld=adRs.Fields.Count-1

vl = ""

For i= 0 To fld ‘逐列提示每個欄位抬頭、製作輸入方塊及提示資料 Response.Write "<TR Height =15>"

Response.Write "<TD bgcolor=LightBlue> <FONT Size=2 >" &

adRs(i).Name & "</FONT></TD>"

If not rs1.eof then vl = rs1(i)

Btn = "<INPUT Type=Text Value='" & vl & "' Name =" & adRs(i).Name

& " Size =" & setColwidth(adrs, i, 2 ) & ">"

Response.Write "<TD> <FONT Size=2 >" & Btn & "</FONT></TD>"

Response.Write "</TR>"

Next

%>

<TR align = center>

<%

Btn = "<INPUT Type=Submit Value=""更新"" Name=Upd>"

Response.Write "<TD bgcolor=Red>" & Btn & "</TD>"

%>

<TD>更新方式 ‘製作下拉型資料處理方式 <select name =_mdType size=1>

<option value ="Mod" selected>修改</option>

<option value ="Del" >刪除</option>

(14)

<option value ="Add" >新增</option>

</select></TD></TR>

</FORM> ‘完成輸入表單 </TABLE></CENTER>

3. 提示要輸出資料之紀錄按鈕

<FORM Action=<%=showNewRec%> Method=GET name=Form1>

<%If Page <> 0 Then ' 如果不是位於第一筆 %>

<A HREF=<%=showNewRec%>?Page=0>首筆</A>

<A HREF=<%=showNewRec%>?Page=<%=(Page-1)%>>前筆</A>

<%End If

If Page <> tREC Then ' 如果不是位於最後一筆

%>

<A HREF=<%=showNewRec%>?Page=<%=(Page+1)%>>次筆</A>

<A HREF=<%=showNewRec%>?Page=<%=(tREC-1)%>>末筆</A>

<%End If%>

輸入紀錄序:<INPUT TYPE=TEXT Name=Page SIZE=3>

紀錄序:<FONT COLOR="Red"><%=(Page)%>/<%=(tREC-1)%></FONT>

</FORM>

18-3-5 查閱資料-依鍵值 設計技巧簡述如下:

1. 前置處理:開啟紀錄集,取出鍵值欄。

2. 製作鍵值輸入表單。

3. 輸入鍵值,點取傳送按鈕,將表單資料傳送給當下網頁。

4. 取出鍵值並過濾資料。

kstr=””

na=Request(KFL1) ‘取出第一個鍵值方塊資料 If Not na = Empty Then

If isValue(rs1(KFL1).Type) Or isBool(rs1(KFL1).Type) Then

‘isValue,isBool 及 isDate 為筆者自行撰寫之函數,請讀者參閱 showData.sub

kstr = KFL1 & " =" & na ‘組合過濾條件 Else

If isDate(rs1(KFL1).Type) Then kstr = KFL1 & " =#" & na & "#"

Else

If KFL2 = Empty Then

(15)

kstr = KFL1 & " Like '" & na & "%'" '允許類似查詢 Else

kstr = KFL1 & " = '" & na & "'"

End If End If End If End If

If Session("KFL2") <> Empty Then ‘若有第二鍵值欄,則取出第二鍵值 na=Request(KFL2)

If Not na = Empty Then

If isValue(rs1(KFL2).Type) Or isBool(rs1(KFL2).Type) Then kstr = kstr & " And " & KFL2 & " =" & na

Else

If isDate(rs1(KFL2).Type) Then

kstr = kstr & " And " & KFL2 & " =#" & na & "#"

Else

kstr = kstr & " And " & KFL2 & " = '" & na & "'"

End If End If End If End If

kstr =Replace(kstr, Chr(34), "'") ‘將雙引號改為單引號 adRs.Filter = "" ‘取消前次過濾條件

If kstr <> "" Then adRs.Filter = kstr ‘過濾資料 5. 輸出合乎鍵值之全部資料。

18-3-5 刪除資料-依鍵值 設計技巧簡述如下:

1. 前置處理:開啟紀錄集,取出鍵值欄。

2. 製作鍵值輸入表單。

3. 輸入鍵值,點取傳送按鈕,將表單資料傳送給當下網頁。

4. 取出鍵值並過濾資料。

5. 將合乎鍵值之全部資料刪除,若有關聯資料表,將先刪除子表資料,然後 刪除主表資料。刪除指令如下:

dstr = "Delete From " & 資料表名 & " Where " & kstr con.Execute dstr

18-3-6 更新資料-依鍵值

(16)

設計技巧簡述如下:

1. 前置處理:開啟紀錄集。

2. 製作鍵值欄及修改欄選擇表單。

範例程式如下:

<Form action =更新資料程式.asp method = post name = "Form1">

<input type = hidden name=wkType value=<%=wktype%>>

<table border=1><tr align=center bgcolor=yellow></font><td>比對欄位

</td><td>更新欄位</td></tr>

<tr>

<%

For fi =0 To 1

Response.Write "<td> <table border=1> <tr bgcolor =lightblue><td>欄名<

/td><td >別名</td><td >選取</td></tr>"

odd= True

For i =0 To adRs.Fields.Count-1 If fi =0 Then

fna = "K_" & adrs(i).Name Else

fna = adRs(i).Name End If

If odd =True Then

Response.Write "<tr bgcolor=lightgreen>"

Else

Response.Write "<tr bgcolor =white>"

End If

Btn = "<td>" & adRs(i).Name & "</td><td>" & fna & "</td><td><Input Type = Checkbox Name =" & fna & "></td></tr>"

‘以核取方塊製作表單 Response.Write Btn odd = Not odd Next

Response.Write "</table></td>"

Next

%>

</tr>

<tr align =center><TD><Input Type =submit Value =確認 name = submit></TD>

<TD><Input Type =Reset Value =重設 name = reset></TD></TR>

(17)

</Table> </form></center>

3. 選取鍵值欄及修改欄(可複選),點取傳送按鈕,將選取資料傳送給更新 資料程式。

upkFld = ""

For i = 0 To adRs.Fields.Count-1 ‘逐欄比對是否被選取為鍵值欄 na= "K_" & adRs(i).Name

If Request(na) <> Empty Then If upkFld = "" Then

upkFld = adRs(i).Name Else

upkFld = upkFld & ", " & adRs(i).Name End If

End If Next upFld = ""

For i = 0 To adRs.Fields.Count-1 ‘逐欄比對是否被選取為修改欄 na= adRs(i).Name

If Request(na) <> Empty Then If upFld = "" Then

upFld = adRs(i).Name Else

upFld = upFld & ", " &adrs(i).Name End If

End If Next

If upFld <> "" Then

Session("UPKFLD") = upkFld ‘將選定欄位記錄在 Session 物件 Session("UPFLD") = upFld

Response.Redirect "updaByKey.asp?wkType=" & wkType

‘將工作網頁轉至輸入表單網頁 End If

4. 製作資料輸入表單。

<FORM Action= 更 新 資 料 程 式 .asp Method=Post name = Form2>

<Center>

<INPUT Type=Hidden Value=<%=wkType%> Name="wkType">

<INPUT Type=Hidden Value=<%=upkFld%> Name="upkfld">

(18)

<INPUT Type=Hidden Value=<%=upFld%> Name="upfld">

‘以隱藏型文字方塊儲存欄位設定資料

<TABLE BORDER=1 cellspacing = 0 cellpadding = 0>

<%

If wkType = "Key" Or wkType = "All" Then fld=adRs.Fields.Count-1

Response.Write "<TR Height =15> <TD bgcolor=LightBlue><FONT Size=2 >鍵值</FONT></TD>"

If upkFld <> Empty Then ‘提示鍵值欄抬頭 For ki =0 To UBound(kfld) ‘kfld 鍵值欄位串列 na = Trim(Lcase(kfld(ki)))

For i= 0 To fld

If Lcase(adRs (i).Name) = na Then

Response.Write "<TD bgcolor=LightBlue> <FONT Size=2 >" & adRs (i).Name & "</FONT></TD>"

End If Next Next End If </TR>"

Response.Write "<TR Height =15 bgcolor=LightBlue> <TD bgcolor=LightBlue><FONT Size=2 >設定</FONT></TD>"

If upkFld <> Empty Then ‘製作輸入方塊 For ki =0 To UBound(kfld)

na = Trim(Lcase(kfld(ki))) For i =0 to fld

If Lcase(adRs(i).Name) = na Then

Response.Write "<TD><Input Type =Text Name =K_" & na & " Size

=" & setColwidth(adRs, i, 2 ) & "></Td>"

‘以文字方塊製作鍵值欄位 End If

Next Next End If

Btn = "<TD bgcolor=LightBlue><Select Name =Kall Size =1><Option Value=No Selected> No</Option>"

Btn =Btn & "<Option Value=Yes> Yes </Option>

</Select></TD></TR></Table><Table border=1>"

(19)

Response.Write Btn

Response.Write "<TR Height =15 bgcolor=LightBlue><td>更新</td>"

For ki =0 To UBound(ufld) ‘ufld 修改欄位串列 na = Trim(Lcase(ufld(ki)))

For i= 0 To fld

If Lcase(adRs(i).Name) = na Then

Response.Write "<TD > <FONT Size=2 >" & adRs(i).Name &

"</FONT></TD>"

End If Next Next

Response.Write "<TR bgcolor=LightBlue><td bgcolor =red><input Type

= submit Name =Upd Value =執行></td>"

For ki =0 To UBound(ufld) na =Trim( Lcase(ufld(ki))) For i =0 to fld

If Lcase(adRs(i).Name) = na Then

Response.Write "<TD><Input Type =Text Name =" & na & " Size =" &

setColwidth(adRs, i, 2 ) & "></Td>"

‘以文字方塊製作修改欄位 End If

Next Next

Response.Write "</TR></Table>"

End If

%>

</FORM>

4. 輸入鍵值及修改資料。

5. 按下確認按鈕,取鍵值及修改資料,然後將合乎鍵值之資料予以修改,修 改指令如下:

excSQL = ""

If wkType = "Key" Or wkType = "All" Then

excSQL = "Update " & tbl & " Set " ‘組合修改 SQL 指令 For ki =0 To Ubound(ufld) ‘逐欄取出修改資料

na= Trim(ufld(ki)) vl = Request(na)

If ki > 0 Then excSQL = excSQL & ", "

(20)

If isValue(rs1(na).Type) Or isBool(rs1(na).Type) Then excSQL = excSQL & na & " = " & vl

Else

If isDate(rs1(na).Type) Then

excSQL = excSQL & na & " = #" & vl & "#"

Else

If vl=Empty Then vl =Null '若為空字串, 原資料欄可不輸入資料 excSQL = excSQL & na & " = '" & vl & "'"

End If End If Next End If

If kstr <> "" Then

excSQL = excSQL & " Where " & kstr ‘加入過濾條件 adCon.Execute excSQL ‘修改資料

End If

18-3-7 查閱資料兼挑檔 設計技巧簡述如下:

1. 前置處理:開啟紀錄集。

2. 製作紀錄核取表單。

Response.Write "<Form Action =AddPkData.asp?Page=" & intPage & "

Method =Post>"

Response.Write "<Center><TABLE BORDER=1 cellspacing = 0 cellpadding = 0 >"

Response.Write "<TR BGCOLOR=#00FFFF>"

Response.WRITE "<TD> <FONT Size=2 >挑選</FONT></TD>"

Bio = -1

For i=0 to fRs.Fields.Count-1 ‘提示欄位抬頭

Response.WRITE "<TD> <FONT Size=2 >" & Trim(adRs(i).Name) &

"</FONT></TD>"

If isBLOB(fRs(i).Type) Then ‘檢查是否有大型物件欄 Set fs = CreateObject("Scripting.FileSystemObject") blo = i

End If Next

Response.Write "</TR>"

odd = True

(21)

For j = 1 to pgRec’檢查該筆紀錄是否已被選入 If fRs.EOF then

Exit For End If IsCheck =""

‘檢查該筆紀錄是否已被選入(鍵值是否存入 Cookies) If KFL2 <> Empty Then

KDA1 =Request.Cookies(KFL1) ‘取出 Cookie 紀錄 KDA2 =Request.Cookies(KFL2)

kd1 = Split(KDA1, ", ") kd2 = Split(KDA2, ", ")

For kj =0 To Ubound(kd1) ‘比對每組鍵值 KVL1 =kd1(kj)

KVL2 =kd2(kj)

If isValue(frs(KFL1).Type) Then KVL1 =Csng(KVL1) If isValue(frs(KFL2).Type) Then KVL2 =Csng(KVL2) If fRs(KFL1) = KVL1 And fRs(KFL2) = KVL2 Then IsCheck = "Disabled"

‘若當筆鍵值等於 Cookie 之鍵值,則 IsCheck 加註 "Disabled"

Exit For End If Next Else

KDA1 =Request.Cookies(KFL1) ‘取出 Cookies 紀錄 kd1 = Split(KDA1, ", ") ‘剖析紀錄

For kj =0 To Ubound(kd1) KVL1 =kd1(kj)

If isValue(frs(KFL1).Type) Then KVL1 =Csng(KVL1) If fRs(KFL1) = KVL1 Then

IsCheck = "Disabled"

Exit For End If Next End If

If odd = True Then

Response.Write "<TR bgcolor=White>"

Else

Response.Write "<TR bgcolor=LightGreen>"

(22)

End if

If KFL2 = Empty Then

Response.Write "<Td><Input Type = CheckBox Name =" & KFL1 & "

Value =" & fRs(KFL1) & " " & IsCheck & "></Td>"

‘輸出資料前,每筆紀錄前端加入一個核取方塊,可供核取紀錄,

核取方塊取名為鍵值欄名 Else

Response.Write "<Td><Input Type = CheckBox Name =" & KFL1 &

"_" & KFL2 & " Value ='" & fRs(KFL1) & "| |" & fRs(KFL2) &

"' " & IsCheck & "></Td>"

End If

For i=0 to fRs.Fields.Count-1 ‘輸出資料

Response.WRITE "<TD> <FONT Size=2 > " & fRs(i) &

"</FONT></TD>"

Next

Response.Write "</TR>"

odd = Not odd fRs.MoveNext Next

‘以下製作決策按鈕

Response.Write "<TR><Td bgcolor=red><Input Type = Submit Value = 選入></Td>"

Response.Write "<Td><A href= 'chkPkData.asp?wkType=CHK'>查看

</A></TD>"

If pkType ="SHO" Then

Response.Write "<Td><A href= 'chkPkData.asp?wkType=SAV'>存檔

</A></TD>"

Response.Write "<Td><A href= 'chkPkData.asp?wkType=SAD'>存後刪 除</A></TD>"

Else

If pkType ="DEL" Then

Response.Write "<Td><A href= 'chkPkData.asp?wkType=SAD'>存後刪 除</A></TD>"

Response.Write "<Td><A href= 'chkPkData.asp?wkType=DEL'>刪除

</A></TD>"

End If End If

(23)

‘建立檔案物件和檔名

‘以用戶帳號串接資料表名、日期和流水號當檔名 Set fs = CreateObject("Scripting.FileSystemObject")

dstr =Cstr(Year(Date())) & Cstr(Month(Date())) & Cstr(Day(Date())) tpFl = Server.MapPath("/mysql/expoData") & "\" & Session("User") &

"_" & fTbl & "_" & dstr tpFl = tpFl & ".csv"

If fs.FileExists(tpFl) = True Then

‘假如存檔成功,則以超連結提示查看檔案 objF = Mid(tpFl, Instr(tpFl, ":") +1, Len(tpFl))

Response.Write "<Td><A href='" & objF & "'>查看檔案</A></TD>"

End If

Response.Write "<Td><A href= 'chkPkData.asp?wkType=CLR'>取消

</A></TD>"

Response.Write "</TR></TABLE></center></Form>"

%>

3. 核取紀錄,然後按選入鈕,將選取紀錄存入 Cookies,指令如下:

<%

Response.Buffer = True KFL1= Session("KFL1") KFL2= Session("KFL2") intPage = Request("Page") If KFL2 <> Empty Then na = KFL1 & "_" & KFL2

KDA1 = Request.Cookies(KFL1) ‘取出 Cookie 紀錄 KDA2 = Request.Cookies(KFL2)

Else

na = KFL1

KDA1 = Request.Cookies(KFL1) ‘取出 Cookie 紀錄 End If

da = Request(na) ‘讀取核取紀錄 kda= Split(da, ", ") ‘剖析核取鍵值 For i =0 To Ubound(kda) ‘逐筆處理鍵值 If Len(KDA1) = 0 Then

If KFL2 = Empty Then KDA1 = kda(i)

(24)

Else

da = Split(kda(i), "| |") KDA1 = da(0)

KDA2 = da(1) End If

Else

If KFL2 = Empty Then

KDA1 =KDA1 & ", " & kda(i) Else

da = Split(kda(i), "| |")

KDA1 =KDA1 & ", " & da(0) KDA2 =KDA2 & ", " & da(1) End If

End If Next

Response.Cookies(KFL1) = KDA1 ‘將核取紀錄寫入 Cookies If KFL2 <> Empty Then Response.Cookies(KFL2) = KDA2

Response.Write "<BODY bgcolor=#FFFFCC><center><BR><BR>

<BR> <BR> <BR>挑選資料已存入暫存區<BR>"

Response.Redirect "pickData.asp?Page=" & intPage

%>

4. 選入紀錄後,再按存檔鈕,可將選取紀錄存入外部檔案。

‘建立檔案物件和檔名

‘以用戶帳號串接資料表名、日期和流水號當檔名 Set fs = CreateObject("Scripting.FileSystemObject")

dstr =Cstr(Year(Date())) & Cstr(Month(Date())) & Cstr(Day(Date())) tpFl = Server.MapPath("/mysql/expoData") & "\" & Session("User") &

"_" & fTbl & "_" & dstr & "_" & fno tpFl = tpFl & ".csv"

If KFL2 <> Empty Then

KDA1 = Request.Cookies(KFL1) ‘取出 Cookie 紀錄 KDA2 = Request.Cookies(KFL2)

Else

KDA1 = Request.Cookies(KFL1) ‘取出 Cookie 紀錄 End If

kd1= Split(KDA1, ", ") ‘剖析鍵值

If KFL2 <> Empty Then kd2 = Split(KDA2, ", ")

(25)

For j =0 To Ubound(kd1) ‘逐筆處理鍵值 KVL1 = kd1(j)

If isValue(frs(KFL1).Type) Then KVL1 =Csng(KVL1) If KFL2 <> Empty Then

KVL2 =kd2(j)

If isValue(frs(KFL2).Type) Then KVL2 =Csng(KVL2) End If

fstr = KFL1 & "=" ‘組合過濾條件 If isDate(fRs(KFL1).Type) Then fstr = fstr & "#" & KVL1 & "#"

Else

If isValue(fRs(KFL1).Type) Then fstr = fstr & KVL1

Else

fstr = fstr & "'" & KVL1 & "'"

End If End If

If KFL2 <> Empty Then

fstr = fstr & " And " & KFL2 & "="

If isDate(fRs(KFL2).Type) Then fstr = fstr & "#" & KVL2 & "#"

Else

If isValue(fRs(KFL2).Type) Then fstr = fstr & KVL2

Else

fstr = fstr & "'" & KVL2 & "'"

End If End If End If

fRs.Filter = ""

fRs.Filter = fstr ‘尋找合乎鍵值紀錄 If Not fRs.EOF Then

For i=0 to fRs.Fields.Count-1 ‘輸出資料並組合字串 If i =0 Then

str = fRs(0) Else

str =str & "," & fRs(i) End If

(26)

Next

If str <> "" Then fso.WriteLine rmCrLf(str) ‘當筆紀錄寫入檔案 Next

End If

18-3-8 郵寄資料-一般郵件 設計技巧簡述如下:

1. 前置處理:取出寄信伺服器及寄件人。

If Request.Cookies("mlServer") <> Empty Then mlServer = Request.Cookies("mlServer")

If Request.Cookies("mlFrom") <> Empty Then mlFrom = Request.Cookies("mlFrom")

2. 製作郵件輸入表單。

<form method="POST" action="SendMlSub.asp?wkType=<% =wkType

%>">

<input type="hidden" name="wkType" value=<% =wkType%>>

<table>

<% If wkType="Slf" Then %>

<tr><td><font size="2">收件人 </font> <input type="text" size="80"

name="mlTo"></td></tr>

<tr><td><font size="2">副本 </font> <input type="text" size="82"

name="mlCc"></td></tr>

<% End If %>

<% If wkType ="Bat" Then %>

<tr><td><font size="2">群組名稱 </font> <input type="text" size="80"

name="mlTo"></td></tr>

<% End If %>

<tr><td><font size="2">寄信伺服器 </font> <input type="text"

size="77" name="mlServer" Value=<% =mlServer%>></td></tr>

<tr><td><font size="2">寄件人 </font> <input type="text" size="80"

name="mlFrom" value= <% =mlFrom%> ></td></tr>

<tr><td><font size="2">主旨 </font> <input type="text" name="Subject"

size="82"></td> </tr>

</table>

<table>

<tr><td valign=top><font size="2">本文</font></td><td><textarea rows="12" name="mlMsg" cols="80"></textarea></td></tr>

(27)

</table>

<table><tr><td><font size="2">附件 1</font><input type="file"

name="File1" size="30"></td>

<td><font size="2">2</font><input type="file" name="File2"

size="30"></td>

</tr></table>

<table><tr>

<td><input type="submit" value="傳送" name="B1"></td>

<td><input type="reset" value="重新設定" name="B2"></td></tr>

</table>

</form>

3. 輸入郵件資料,點取傳送鈕,啟動寄信程式。

4. 取出郵件資料

mlServer = Request("mlServer") mlFrom = Request("mlFrom")

Response.Cookies("mlServer") = mlServer Response.Cookies("mlFrom") = mlFrom mlSendUsing = 2

ath1 =""

ath2=""

mlTo = Request("mlTo") mlCc = Request("mlCc")

If Instr(mlTo, "@") =0 Then mlByTbl=1

If mlCc <> "" Then mlTo = mlTo & ", " & mlCc Subject = Request("Subject")

mlMsg = Request("mlMsg") 5. 設定郵件伺服器屬性

‘建立郵遞物件

Set conf = Server.CreateObject("CDO.Configuration")

‘建立郵件欄位

Set Flds = conf.Fields

‘設定郵件欄位及屬性

Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = mlServer

Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = mlSendusing

(28)

Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectio ntimeout") = 10

Flds.Update

‘建立郵件信息物件

Set msg = Server.CreateObject("CDO.Message")

‘郵件信息物件加入郵遞物件 Set msg.Configuration = conf

‘設定信息物件屬性 msg.From = mlFrom msg.Subject = Subject msg.TextBody = mlMsg ath1 =""

ath2 =""

ath1 =Request("File1") ‘取出附加檔 1 ath2 =Request("File2") ‘取出附加檔 2 msg.To = mlTo ‘設定收信人

If ath1 <>"" Then msg.AddAttachment ath1 ‘加入附加檔 1 If ath2 <>"" Then msg.AddAttachment ath2 ‘加入附加檔 2 5. 傳送郵件

msg.Send

註:若要傳送資料表內含紀錄,事前可將資料表匯出為文字檔,然後以附加 檔傳送。

18-4 將 ASP 程式碼封裝成 DLL

由於ASP 之程式,不論是在伺服端或主控端執行,都是以明碼之 Script

格式呈現,惡意聯網人員可以輕易得知原始程式,因而遭受到無謂之入侵和

破壞。為提高程式之隱密性和安全性,可將ASP 程式封裝成 DLL 格式,以

下詳細介紹DLL 之製作程序與技巧。

1. 啟動 VB 應用程式。

2. 點選應用系統格式-Active DLL。

3. 開啟系統設計介面

系統自動產生一個名稱為Class1 之類別模組,專案名稱預設為

Project1,可將 Class1 和 Project1 改名為適當名稱。

4. 點取主功能表之“Project”之 “References”,開啟物件參照選單,請選 入下列物件:

Microsoft Active Server Pages Object Library

Microsoft Active Data Objects 2.8 Library

Microsoft ADO Ext. 2.8 for DLL & Security

(29)

Microsoft Active Server Pages ObjectContext Object Library

COM+ Services TypeLibrary 5. 在 Class1 開頭加入下列指令:

Public ObjectContext As ObjectContext

Public Application As ASPTypeLibrary.Application Public Server As ASPTypeLibrary.Server

Public Session As ASPTypeLibrary.Session Public Response As ASPTypeLibrary.Response Public Request As ASPTypeLibrary.Request

註:以上變數為ASP 程式與 DLL 程式溝通之介面

6. 在 Class1 加入下列兩個事件程序:

Private Sub Class_Initialize() ‘啟動 DLL 程式時,執行前置處理程序 On Error Resume Next

Set objContext = GetObjectContext

Set Application = objContext.Item("Application") Set Server = objContext.Item("Server")

Set Session = objContext.Item("Session") Set Request = objContext.Item("Request") Set Response = objContext.Item("Response")

‘ 此處可加入其它自定程式碼 End Sub

Private Sub Class_Terminate() ‘結束 DLL 程式時,清除系統變數 On Error Resume Next

‘ 此處可加入其它自定程式碼 Set Application = Nothing Set Server = Nothing Set Session = Nothing Set Request = Nothing Set Response = Nothing Set objContext = Nothing End Sub

7. 在類別內加入屬性欄位,做為 ASP 與 DLL 存取資料溝通欄位。

讀取資料欄:

Public Property Get 欄位名稱() As 資料型態 欄位名稱= 系統變數

End Property

(30)

寫入資料欄:

Public Property Let 欄位名稱(ByVal 接收變數 As 資料型態) 系統變數=接收變數

End Property

8. 若有需要,可依步驟 6 與 7 加入其它類別。

9. 存檔。

10. 點取主功能表之“File”之 “Make *.dll”功能,將專案轉成 DLL 檔。

11. 將DLL 檔註冊:點取桌面之【開始】、【執行】,在輸入方塊內輸入左列指

令:regsvr DLL 檔所在目錄及檔名,例如,

regsvr D:\Mysql\ASP\AspDoMysql.dll 12. DLL 檔之引用

在原ASP 程式,將原來以 <% ……%>之程式碼移除,改以下列指令取代:

<%

Dim AspObj

Set AspObj = Server.CreateObject(“AspDoMysql.Class1”)

‘其中 AspDoMysql 為自行開發之 DLL 檔,Class1 為類別名稱 AspObj .欄位名稱 = 傳入值

‘傳入預設參數給 DLL 檔 AspObj .程序名稱 傳入參數

‘執行 DLL 檔內之特定程序 變數 = AspObj .欄位名稱

‘取回 DLL 檔處理結果 Set AspObj = Nothing

%>

13. 應用範例:

下列指令為顯示Customer 資料表之原始 ASP 程式碼:

Dim Con Dim Rs

Set Con= Server.CreateObject("ADODB.Connection")

cn_str = "Driver={MySQL ODBC 3.51 Driver}; Server=主機位址; " & _

"User=用戶帳號; Password=連線密碼;" Database=連線資料庫;” & _

“Option= 16437"

Con.ConnectionString = cn_str Con.Open

Sql = “Select * From Customer”

Set Rs= Server.CreateObject("ADODB.Recordset")

(31)

Rs.Open Sql, Con, 3, 2

Response.Write "<CENTER><TABLE BORDER=1 cellspacing = 0 cellpadding = 0 >"

Response.Write "<TR BGCOLOR=#00FFFF>"

fld = Rs.Fields.Count-1

‘提示欄位抬頭 For i=0 to fld

Response.WRITE "<TD><FONT Size=2 > " &Rs(i).Name & "</FONT>

</TD>"

Next

Response.Write "</TR>"

Do While Not Rs.EOF Response.Write "<TR>"

For i=0 to fld

Response.WRITE "<TD><FONT Size=2 > " & Rs(i) & "</FONT></TD>"

Next

Response.Write "</TR>"

Rs.MoveNext Loop

Response.Write "</TABLE></CENTER>"

修改DLL 檔程式碼

DLL 之類別開頭宣告五個公用變數

Public m_HOST As String Public m_WKDB As String Public m_USER As String Public m_PSWD As String Public m_SQL As String

DLL 之類別內加入五個資料存取欄位

Public Property Let HOST(ByVal str AsString) M_HOST=str

End Property

Public Property Let WKDB(ByVal str AsString) M_WKDB=str

End Property

Public Property Let USER(ByVal str AsString) M_USER=str

(32)

End Property

Public Property Let PSWD(ByVal str AsString) M_PSWD=str

End Property

Public Property Let SQL(ByVal str AsString) M_SQL=str

End Property

DLL 之類別內加入一個展示資料程序

Private Sub showData() On Error Resume Next

Dim Con AS New ADODB>Connection Dim Rs New ADODB.Recordset

cn_str = "Driver={MySQL ODBC 3.51 Driver}; Server=” & m_HOST & “;

" "User=” & m_USER & “; Password=” & m_PSWD & “;" Database=” &

m_WKDB & “;Option= 16437"

Con.ConnectionString = cn_str Con.Open

Rs.Open m_SQL, Con, 3, 2

Response.Write "<CENTER><TABLE BORDER=1 cellspacing = 0 cellpadding = 0 >"

Response.Write "<TR BGCOLOR=#00FFFF>"

fld = Rs.Fields.Count-1

‘提示欄位抬頭 For i=0 to fld

Response.WRITE "<TD><FONT Size=2 > " &Rs(i).Name & "</FONT>

</TD>"

Next

Response.Write "</TR>"

Do While Not Rs.EOF Response.Write "<TR>"

For i=0 to fld

Response.WRITE "<TD><FONT Size=2 > " & Rs(i) & "</FONT></TD>"

Next

Response.Write "</TR>"

Rs.MoveNext Loop

Response.Write "</TABLE></CENTER>"

Rs.Close

(33)

Set Rs = Nothing Con.Close

Set Con = Nothing End Sub

接著將編輯內容存檔,然後重製DLL 檔(但不需要新註冊)。

將原ASP 程式改為下列程式碼

<%

Set AspObj = Server.CreateObject(“AspDoMysql.Class1”) AspObj.HOST = “LocalHost”

AspObj .WKDB = 資料庫 AspObj .USER = 用戶帳號 AspObj.PSWD = 密碼

AspObj.SQL = “Select * From Customer”

AspObj.showData Set AspObj = Nothing

%>

大功告成!是不是覺得很簡單。請試試你的DLL 執行結果。DLL 之能力

不只如此而已,請好好發揮你的創意吧!

參考文獻

相關文件

Including government health establishments such as public health centres and Medical Check-up Centre for Civil Servants, and private clinics including establishments of health

Including government health establishments such as public health centres and Medical Check-up Centre for Civil Servants, and private clinics including establishments of health

Including government health establishments such as public health centres, Medical Check-up Centre for Civil Servants, etc., and private clinics including establishments of health

Including government health establishments such as public health centres, Medical Check-up Centre for Civil Servants, etc., and private clinics including establishments of health

[r]

The Task Force fully recognises students’ diverse learning and development needs across different key stages and domains, and hence the recommendations need to be considered in

• Students annotate a text using an annotation tool that identifies their authorship. • Advantage: student annotations may

How would this task help students see how to adjust their learning practices in order to improve?..