站內搜尋:Yahoo搜尋的結果,如果沒有給完整的網址,請在站內再搜尋一次!

顯示具有 Asp 標籤的文章。 顯示所有文章
顯示具有 Asp 標籤的文章。 顯示所有文章

2016-05-22

VBScript檢查字串中不合法的字元

Function ChkChar(strChk)
           Dim i, nPos, zInvaildList
           '預設所要檢查的字串不包含不合法的字元
           ChkChar = True
           '指定那些字元是不合法的字元
           zList = "&'/""<>"           '指定"要再前置"
           '去掉前後空白,避免傳入NULL          
           strChk = trim(strChk & "")
           zErr = ""
           For i = 1 to Len(zList)
                      nPos = InStr(strChk, Mid(zList, i, 1))
                      if nPos <> 0 then zErr = zErr & " " & Mid(zList, i, 1)
           next
           if zErr<> "" then
                      zMsg = "『" & strChk & "』字串中含有不合法字元:" & zMsg
                      ChkChar = False
           end if
End Function

VBScript計算中英文混合字串的長度

用VBScript的Len函數,計算字串的長度,一個ASCII字元長度是1,但一個中文字的長度還是算1,自訂一個函數讓ASCII字元算1,中文字算2:

Function LenAB(strLen)
           dim i,n
           n=0
           for i = 1 to Len(strLen)
                     if asc(mid(strLen,i,1)) >=0 and asc(mid(strLen,i,1)) <= 255 then
                                n = n + 1
                     else
                                n = n + 2
                     end if
           next
           LenAB = n
End Function

VBScript修正NULL為空值或零

從資料庫讀取資料後,如果取得的欄位值是NULL,如果資料處理的過程,還是一直保持NULL,要回寫或處理時,就很可能發生錯誤,所以取得欄位值後,檢查一下是否為NULL?有時候是有必要的...

Function FixNull(varValue,varType)
           if isnull(varValue) = True then
                     if ucase(varType) = "STRING" then
                                FixNull = ""
                     elseif ucase(varType) = "NUMERIC" then
                                FixNull = 0
                     else
                                FixNull = ""
                     end if
           else
                     FixNull = varValue
           end if
End Function

classic asp Request.ServerVariables 取得伺服器環境變數的值

  1. Request.ServerVariables["ALL_HTTP"] 
  2. Request.ServerVariables["ALL_RAW"] 
  3. Request.ServerVariables["APPL_MD_PATH"] 
  4. Request.ServerVariables["APPL_PHYSICAL_PATH"] 
  5. Request.ServerVariables["AUTH_PASSWORD"] 
  6. Request.ServerVariables["AUTH_TYPE"]
  7. Request.ServerVariables["AUTH_USER"]
  8. Request.ServerVariables["CERT_COOKIE"]
  9. Request.ServerVariables["CERT_FLAGS"] : 如有驗證 BIT0=1, 驗證無效 BIT1=1
  10. Request.ServerVariables["CERT_ISSUER"]
  11. Request.ServerVariables["CERT_KEYSIZE"]
  12. Request.ServerVariables["CERT_SECRETKEYSIZE"]
  13. Request.ServerVariables["CERT_SERIALNUMBER"]
  14. Request.ServerVariables["CERT_SERVER_ISSUER"]
  15. Request.ServerVariables["CERT_SERVER_SUBJECT"]
  16. Request.ServerVariables["CERT_SUBJECT"]
  17. Request.ServerVariables["CONTENT_LENGTH"]
  18. Request.ServerVariables["CONTENT_TYPE"]
  19. Request.ServerVariables["GATEWAY_INTERFACE"]
  20. Request.ServerVariables["HTTP_HEADERNAME"]
  21. Request.ServerVariables["HTTPS"] : 如果使用SSL送出請求回傳ON, 非SSL回傳OFF
  22. Request.ServerVariables["HTTPS_KEYSIZE"]
  23. Request.ServerVariables["HTTPS_SECRETKEYSIZE"]
  24. Request.ServerVariables["HTTPS_SERVER_ISSUER"]
  25. Request.ServerVariables["HTTPS_SERVER_SUBJECT"]
  26. Request.ServerVariables["INSTANCE_ID"] :  IIS instance ID
  27. Request.ServerVariables["INSTANCE_META_PATH"]
  28. Request.ServerVariables["LOCAL_ADDR"]
  29. Request.ServerVariables["LOGON_USER"] : Windows的登入帳號
  30. Request.ServerVariables["PATH_INFO"]
  31. Request.ServerVariables["PATH_TRANSLATED"]
  32. Request.ServerVariables["QUERY_STRING"] : HTTP 請求網址中問號 (?) 後面的參數
  33. Request.ServerVariables["REMOTE_ADDR"]
  34. Request.ServerVariables["REMOTE_HOST"]
  35. Request.ServerVariables["REMOTE_USER"]
  36. Request.ServerVariables["REQUEST_METHOD"]
  37. Request.ServerVariables["SCRIPT_NAME"]
  38. Request.ServerVariables["SERVER_NAME"]
  39. Request.ServerVariables["SERVER_PORT"]
  40. Request.ServerVariables["SERVER_PORT_SECURE"] :  0 or 1
  41. Request.ServerVariables["SERVER_PROTOCOL"]
  42. Request.ServerVariables["SERVER_SOFTWARE"]
  43. Request.ServerVariables["URL"]
ASP 解析取得 ServerVariables 變數值(環境變數)的方式
<%
For Each x in Request.ServerVariables
  Response.Write(x & "<br />")
Next
%>

2015-12-05

在ASP環境下使用AspSmartUpload上傳檔案

  1. AspSmartUpload是免費的DLL元件,包含兩個DLL檔案:AspSmartUpload.dll及AspSmartUploadUtil。
    將這兩個檔案放到C:\Windows\System32目錄下
    使用以下指令註冊元件:regsvr32.exe C:\Windows\System32\AspSmartUpload.dll
  2. 單一檔案上傳使用方法:
    假設上傳的來源網頁
    <form mothed="post" action="UploadImg.asp" enctype="multipart/form-data" >
        <label>圖檔標題:</label>
        <input type="text" id="txtTitle" name="txtTitle" />
        <input type="file" id="fileImage" name="fileImage" />
        <input type="submit" value="上傳圖檔" />
    </form>

    ''UploadImg.asp 的上傳相關內容
    ''建立上傳物件
    Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
    ''指定網頁所使用的字元集
    mySmartUpload.CodePage = "950"
    ''限制上傳檔案的大小 1MB=1204*1024=1048576
    myUploadfile.MaxFileSize = 1048576
    ''指定可以接受的檔案格式
    myUploadfile.AllowedFilesList = "jpg,gif,png,swf"
    ''以Upload方法接收來源網頁所傳送過來的資料,放到mySmartUpload物件
    mySmartUpload.Upload

    ''從mySmartUpload物件中,將來源網頁的 各input內容解析出來
    zTxtTitle = mySmartUpload.Form("txtTitle").values
    ''從mySmartUpload物件中的files collection 取出檔案的檔名
    zFileName = mySmartUpload.files.item(1).FileName
    ''指定在server中要存放路徑
    zPath = server.mappath("../") & "\upload\" & zFileName
    ''將檔案儲存到指定的路徑
    mySmartUpload.files.item(1).saveas(zPath)
    ''釋放mySmartUpload物件
    Set mySmartUpload = Nothing
  3. 多檔案上傳使用方法:
    假設上傳的來源網頁
    <form mothed="post" action="UploadImg.asp" enctype="multipart/form-data" >
        <label>圖檔標題:</label>
        <input type="text" id="txtTitle1" name="txtTitle1" />
        <input type="file" id="fileImage1" name="fileImage1" />
        <input type="text" id="txtTitle2" name="txtTitle2" />
        <input type="file" id="fileImage2" name="fileImage2" />
        <input type="text" id="txtTitle3" name="txtTitle3" />
        <input type="file" id="fileImage3" name="fileImage3" />
        <input type="submit" value="上傳圖檔" />
    </form>

    ''UploadImg.asp 的上傳相關內容
    ''建立上傳物件
    Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
    ''指定網頁所使用的字元集
    mySmartUpload.CodePage = "950"
    ''限制上傳檔案的大小 1MB=1204*1024=1048576
    myUploadfile.MaxFileSize = 1048576
    ''指定可以接受的檔案格式
    myUploadfile.AllowedFilesList = "jpg,gif,png,swf"
    ''以Upload方法接收來源網頁所傳送過來的資料,放到mySmartUpload物件
    mySmartUpload.Upload

    ''取得多個檔案的內容
    i = 1
    For each file In mySmartUpload.Files
    if not file.IsMissing then
    zPath = server.mappath("../") & "\upload\" & file.FileName
    file.Saveas(zPath)
    zTxtTitle = mySmartUpload.form("txtTitle" & i)
    '' ....  處理儲存 zTxtTitle  ....
    end if
    i = i + 1
    next
    Set mySmartUpload = nothing
  4. AspSmartUpload物件主要的屬性或方法:
    • CodePage : POST頁面的語系
    • TotalMaxFileSize : 所有POST頁面內上傳檔案大小的合計限制
    • MaxFileSize :個別上傳檔案的大小限制 
    • AllowedFilesList : 允許上傳的檔案類型(正面表列) 
    • DeniedFilesList : 禁止上傳的檔案類型(負面表列) 
    • Upload : 取得POST頁面所傳送過來的資料
    • Save : 將上傳的檔案,儲存在目前路徑下
  5.  AspSmartUpload物件,包含兩個collection : Files, Form
  6. Files collection 由 file組成,Files的屬性方法...
    • Count : 上傳檔案的個數 
    • TotalBytes : 上傳檔案的大小合計 
    • Item(id) : 取得指定id的檔案附件
  7. file的屬性方法:
    • FileName : 原上傳檔案的檔名
    • FileExt : 上傳檔案的類型
    • FilePathName : 原上傳的檔案路徑 
    • Size : 檔案大小 
    • IsMissing : input file 是否已指定? 
    • SaveAs
    • Save
    • FileToField : 把檔案儲存到資料庫 
參考來源:http://www.cooldocument.com/451651046/

2014-06-22

使用ADO物件連接資料庫,存取操作資料

  • ADO:ActiveX Data Objects,是一個用於存取資料來源的COM元件(是一個用於存取資料來源的COM(Component Object Model)元件),是程式語言和OLEDB間的一個中間層。使用ADO存取資料庫SQL的知識不是必要的,但仍可透過ADO的命令物件來執行SQL命令。
    參考:http://zh.wikipedia.org/wiki/ADO
     
  • OLEDB(Object Linking and Embedding, DataBase,物件連結嵌入資料庫):以統一方式存取不同類型的資料而設計的一種應用程式介面,是一組用元件物件模型(COM)實作的介面。除了支援SQL的資料庫,也能用在不支援SQL的物件資料庫,或試算表檔案(如Excel)。
    參考:http://zh.wikipedia.org/wiki/OLE_DB
     
  • ADO物件階層圖

  • ADO的Connection及RecordSet物件:建立資料庫連線→取得資料→操作資料
    • Connection物件:建立連接資料庫的物件。
      • 參考:http://www.w3school.com.cn/ado/ado_ref_connection.asp
      • 如何建立Connection?
        dim oConn As ADODB.Connection
        set oConn = Server.CreateObject("ADODB.connection")
      • 設定連線字串
        • zConn = "Driver={SQL Server};server=192.168.xx.xx;uid=UserID;pwd=xxx;database=DBname"  ← MS-SQL
        • zConn = "Provider=IBMDA400;data source=192.168.xx.xx;User Id=UserID;password=xxx;DEFAULT COLLECTION=SLLIB;"  ← AS/400
        • zConn = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\DB\xxx.mdb"  ← Access
      • 開啟資料連結:
        oConn.open zConn
         
    • RecordSet物件:存放所取得資料的物件。
      • 參考:http://www.w3school.com.cn/ado/ado_ref_recordset.asp
      • 如何產生RecordSet?
        dim oRs As ADODB.RecordSet
        set oRs = Server.CreateObject("ADODB.recordset")
      •  用Open方法取得RecordSet的語法:
        RecordSet.Open source, ActiveConnection, CursorType, LockType, Options
        • source:可以是一串SQL命令。
        • CursorType:
          adOpenForwardOnly(0):只可向前移動的RecordSet(往末筆方向)(預設)
          adOpenKeyset(1):可以自由移動的RecordSet
          adOpenDynamic(2):可動態更新編輯的RecordSet
          adOpenStatic(3):可靜態更新編輯的RecordSet
        • LockType:
          adLockReadOnly(1):唯讀(預設)
          adLockPessimistic(2):悲觀鎖定,取得RecordSet後立即鎖定。
          adLockOptimistic(3):樂觀鎖定,只在進行更新時鎖定。
          adLockBatchOptimistic(4):批次樂觀鎖定,同時更新多筆資料時,暫不將資料更新到資料庫,先放在暫存區,執行UpdateBatch時,才將資料整批寫回資料庫。
        • 用Open取得RecordSet的範例:
          oRS.open zSQL, oConn, adOpenKeySet, adLockReadOnly
      • 用Execute方法取得RecordSet的語法:
        Set RecordSet = Connection.Execute[(CommandText,RecordAffected,Options)]
        CommandText:SQL命令
        RecordAffected: 為Long形態的變數,表示被此命令所影響的資料筆數
        Options:
        1-adCmdText SQL查詢文字
        2-adCmdTable 資料表
        4-adCmdStoredProc 預存函式
        8-adCmdUnknown 未定義;由Provider決定
        512-adCmdTableDirect 直接開啟的資料表(應避免使用在SQL Server資料庫上)
         
    •  操作所取得的資料(RecordSet)
      • 如果沒有取得任何資料,EOF及BOF的屬性值,都會是True。所以如果要確認已取得資料的情況下,才進行資料操作,可以這樣做:
        if not oRs.eof then
            '操作資料
            '資料操作後,如確定不再使用,可以將RecordSet清空
            oRs.close
            set oRs = nothing
        else
            'Recordset未取得任何資料
        end if
        '程式最後記得清空連線
        oConn.close
        set oConn = nothing
      • 如何移動資料指標所在位置?
        • oRs.MoveFirst
        • oRs.MovePrevious
        • oRs.MoveNext
        • oRs.MoveLast
      • 逐筆顯示資料一:
        While not oRS.eof
            response.write oRs("欄位名稱").value & ","
            response.write oRs(欄位順序).value & "<br />"
            oRs.MoveNext
        wend
      • 逐筆顯示資料二:
        do until oRs.EOF
           for each x in oRs.Fields
             Response.Write x.name  & "="
             Response.Write x.value & "<br />"
           next
           Response.Write "<br />"
           oRs.MoveNext
        loop
      • 使用GetRows取得RecordSet的資料:
        • GetRows的方法會將Recordset的資料放到指定的二維陣列中,第0維的個數是資料欄位數,第1維是資料筆數。
        • 語法:varArray = rs.GetRows([Rows], [Start], [Fields])
          Rows :表示要擷取的資料筆數。預設值為 adGetRowsRest (-1)。
          Start:讀取起點的BookMark;adBookmarkCurrent(0)(目前資料),adBookmarkFirst(1)(第1筆資料),adBookmarkLast(2)(最後資料)。
          Fields:可以用欄位名稱、索引等來指定要讀取的資料範圍。當欄位數大於1個時,可以用陣列表示。省略 Rows 參數或設定爲 adGetRowsRest(-1)時,GetRows 方法會讀取所有資料並讓Recordset的變成EOF狀態,而不會産生任何錯誤。
        • 範例:aDS = oRs.GetRows(, , Array("EmpCde", "EmpNam", "EmpTel"))
          資料的筆數是UBound(aDS,2)+1
          欄位數是UBound(aDS,1)+1
      •  使用GetString取得RecordSet的資料:
        • 語法:GetString([Format], [NumRows], [ColDelimiter], [RowDelimiter], [NullExpr])
          Format:預設adClipString(2)
          NumRows:要取得的列數,使用-1或省略,代表讀取所有剩下的記錄
          ColDelimiter:行的分隔字元,預設為Tab
          RowDelimiter:每筆資料間的分隔字元,預設為換行字元
          NullExpr:用來表示Null欄位的字串,預設為空字串
        •  範例:
          zString=oRs.GetString( , ,"</td><td>","</td></tr><tr><td>"," ")
      • 使用Find方法取得符合條件的RecordSet中的資料
        • 語法:RecordSet.Find criteria, SkipRows, SearchDirection, start
          criteria:搜尋條件的字串
          SkipRows:從開始位置起,要跳過的資料筆數,可省略
          SearchDirection:搜尋方向,可省略。adSearchForward往最後一筆方向,adSearchBackward往第一筆方向
          start:開始位置
        • 範例:
          oRs.Find = "欄位名稱='條件值'"
      • 新增、刪除、更新
        RecordSet.AddNew [Field],[value]
        RecordSet.Delete [Field],[value]
        RecordSet.Update [Field],[value]
      • 當LockType為adLockPressimistic或adLockOpimistic時,不允許兩個異動同時進行,可以用Supports方法預先檢查
        •  語法:boolean=RecordSet.Supports(CursorOptions)
          CursorOptions: adUpdate, adAddNew, adDelete, adMovePrevious, adBookMark
    • Field物件
      Recordset物件下有Fields物件集合,Fields由一或多個Field物件所組成。每個Field物件代表資料來源的一資料行。
      • 在RecordSet中取得或指定資料指標所在位置的某欄位資料,完整的語法是:
        RecordSet.Fields("欄位名稱").value = "欄位值"
      • 因為Fields是RecordSet的預設屬性,所以表達的語法可以是:
        RecordSet("欄位名稱").value = "欄位值"
      • 又因為value是Fields的預設屬性,所以表達的語法也可以是:
        RecordSet("欄位名稱") = "欄位值"
    • Fields集合物件
      如何計算Field的個數?RecordSet.Fields.Count
  • ADO元件,所提供的另一個存取資料作法
    • Command物件
      Command是使用上較靈活的物件,可以帶入參數,相當於資料庫的預存程序。但是用這種方法取得的RecordSet物件的LockType是adLockReadOnly...
      • 以下使用Command物件的範例:
        set oConn = Server.CreateObject("ADODB.connection")
        oConn.Provider = "Microsoft.Jet.OLEDB.4.0"
        oConn.open "c:/DBFiles/DBname.mdb"
        set oComm=Server.CreateObject("ADODB.command")
        oComm.ActiveConnection=oConn
        zSQL="Select * from PSEMPP  "
        oComm.CommandText=zSQL
        set oRs=ServerCreateObject("ADODB.RecordSet")
        set oRS = oComm.Execute
        ...
      • Execute是Command物件的重要方法,語法:
        Execute([RecordsAffected], [Parameters], [Options]) As Recordset
        RecordsAffected:Long型態的資料筆數
        Parameters:參數陣列
        Options:
        可以指定Command 物件的 CommandText 屬性。可以是一或多個 CommandTypeEnum 或 ExecuteOptionEnum 值。預設值是 adCmdUnspecified。
      • 參考:http://www.w3school.com.cn/ado/ado_ref_command.asp
    • Parameter物件
      雖然Command物件的Execute方法可以傳遞任意數量的參數,但Execute方法無法接收輸出的參數。如果要接收輸出的參數,可用CreateParameter方法來建立Parameter物件
      • 語法:CreateParameter([Name], [Type], [Direction], [Size], [Value]) As Parameter
        name:Parameter物件的名稱
        type:adEmpty, adSmallInt, adInteger, adDate, adChar, adVarChar ...
        Direction:代表輸入參數,輸出參數,或預存函數的回傳值
          0-adParamUnknown 不知名的方向
          1-adParamInput 輸入參數(預設值)
          2-adParamOutput 輸出參數
          3-adParamInputOutput 輸出入參數
          4-adParamReturnValue 預存函數的傳回值
    • Parameters物件集合
      範例:
      set oConn = Server.CreateObject("ADODB.connection")
      oConn.Provider = "Microsoft.Jet.OLEDB.4.0"
      oConn.open "c:/DBFiles/DBname.mdb"
      zSQL="Select * from PSEMPP where EMPCDE>? and EMPCDE<?  "
      set oComm=Server.CreateObject("ADODB.command")
      oComm.ActiveConnection=oConn
      oComm.CommandText=zSQL
      set param1=Server.Create("ADODB.Parameter")
      set param1=CreateParameter("pCDE1", adVarChar, adParamInput, 10)
      oComm.Parameters.Append param1
      set param2=Server.Create("ADODB.Parameter")
      set param2=CreateParameter("pCDE2", adVarChar, adParamInput, 10)
      oComm.Parameters.Append param2
      '取得參數值,並將指定到Parameter物件
      oComm.Parameters("pCDE1").value= "1000"
      oComm.Parameters("pCDE2").value= "2000"
      '取得查詢結果
      set oRs = Server.Create("ADODB.RecordSet")
      set oRS = oComm.Execute
        
  • 參考資料


2014-06-21

在VBScript環境下使用CDO.Message元件發送電子郵件

CDO元件:Collaboration Data Objects,對應的檔案是CDOSYS.dll,提供寄送電子郵件的功能。(從Windows Server 2000 / Windows XP起改為CDO元件,之前是CDONTS元件)

使用CDO元件建立電子郵件物件:
dim oMail
Set oMail=CreateObject("CDO.Message")

CDO元件常用的屬性及方法:
  • Subject:主旨
  • From:寄件人 
  • To:收件人,可以用分號(;)或逗號(,)串接多位收件人 
  • Cc:副本收件人,可以用分號(;)或逗號(,)串接多位收件人 
  • Bcc:密件副本收件人,可以用分號(;)或逗號(,)串接多位收件人 
  • TextBody:郵件內容為純文字格式 
  • HTMLBody:郵件內容為HTML格式 
  • CreateMHTMLBody:將本機或網路上的網頁,以HTML格式送出 
  • AddAttachmen:將指定的檔案,附加為郵件的附件 
  • Send:傳送郵件

範例:
Set oMail=CreateObject("CDO.Message")
oMail.Subject="使用CDO傳送電子郵件的範例" oMail.From= "件件人"
oMail.To="one@gmail.com;two@yahoo.com"
oMail.TextBody="郵件本文內容"
oMail.AddAttachment="c:\要附加的附件檔名"
oMail.Send
set oMail = nothing

2013-11-10

在Classic ASP中,使用正規表示式(Regular Express)檢查字串內容

正規表示式(Regular Express) 要是能熟練,對於字串的運算,必定是如虎添翼 ...

在Classic ASP下,使用正規表示式的主要步驟如下:

  1. 建立RegExp物件
    如果是在Client端執行:Set oRegExp = CreateObject("vbscript.RegExp")
    如果是在Server端執行:set oRegExp = New RegExp
  2. 使用Pattern,指定要檢測的條件
  3. 使用Test進行檢測,True符合條件,False不符合條件

<%
function isHex(sChk) 
    dim oRegExp
    set oRegExp = New RegExp 
    ''所有包含一個以上的abcdefABCDEF字母、0123456789數字的字串
    oRegExp.Pattern = "^[a-fA-F0-9]+$" 
    isHex = oRegExp.Test(sChk) 
    set oRegExp = nothing
end function

strChk= "HELLOa1b2C3D4E5F6G"
response.write strChk & "-" & IsHex(strChk) & "<br>"
n=len(strChk)
for i = 1 to n
    zChk = mid(strChk,i,1)
    response.write zChk & "-" & IsHex(zChk) & "<br>"
next
%>

執行結果:
HELLOa1b2C3D4E5F6G-False
H-False
E-True
L-False
L-False
O-False
a-True
1-True
b-True
2-True
C-True
3-True
D-True
4-True
E-True
5-True
F-True
6-True
G-False

正規表示式常用範例:

  1. 所有的正數:^[0-9]+$ 
  2. 所有的整數:^\-?[0-9]+$ 
  3. 所有的小數:^\-?[0-9]*\.?[0-9]*$ 
  4. 非負整數:^\d+$ 
  5. 正整數:^[0-9]*[1-9][0-9]*$ 
  6. 非正整數:^((-\d+)|(0+))$ 
  7. 負整數:^-[0-9]*[1-9][0-9]*$ 
  8. 整數:^-?\d+$  
  9. 非負浮點數:^\d+(\.\d+)?$ 
  10. 正浮點數:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0- 9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 
  11. 非正浮點數:^((-\d+\.\d+)?)|(0+(\.0+)?))$ 
  12. 負浮點數:^(-((正浮點數正規式)))$
  13. 英文字符串:^[A-Za-z]+$ 
  14. 英文大寫串:^[A-Z]+$ 
  15. 英文小寫串:^[a-z]+$ 
  16. 除了小寫字母以外的所有字串:[^a-z]
  17. 英文字符數字串:^[A-Za-z0-9]+$ 
  18. 由一個小寫字母和一位數字組成的字串:^[a-z][0-9]$

參考資料:http://zh.wikipedia.org/wiki/正規表示式

2013-10-13

如何用ASP(vbscript)檢查所輸入的中文字,是否包含沒有Big5編碼的其他中文字?

先來看一下,以下的這個範例及執行後輸出的內容:


上述程式碼輸出的內容如下:
他=-23220
是=-21425
游=-19227
錫=-16388
?=63
嗎=-18724
?=63
還=-15911
是=-21425
王=-23299
建=-21544
?=63
啊=-20262
!=33

堃、煊是沒有Big5對應編碼的中文字,所以在Big5編碼的網頁下,會出現?(問號),ASCII的編碼是63,範例中也使用了?(問號),ASCII的編碼當然也是63,所以這裡給判斷輸入在頁面上的文字內容是否沒有Big5對應編碼的中文字,下了個規則:如果原輸入中文單字不是?(問號),但輸出結果的ASCII值等於63,這個中文單字就是沒有Big5編碼對應的其他中文字 ...
範例程式碼如下:
function CheckUnicode(strContent)
        dim intErr        //偵錯記號,0表示正常,1表示存在Big5以外的中文字
        intErr = 0
   
        For i=1 To len(strContent)
                If asc(mid(strContent,i,1))=63 And (mid(strContent,i,1)<>"?") Then
                        intErr = 1
            exit for
                end If
        Next
        if intErr = 1 then
                'CheckUnicode = "第" & i & "個字【" & mid(strContent,i,1) & "】:是Big5以外的中文字, 請調整!!" & vbCrlf
        else
                CheckUnicode = ""
        end if
end function

2013-10-10

如何讓classic ASP程式的Session不受IIS的主機預設Timeout時間限制,維持所開啟ASP程式的可用狀態

以下範例程式執行後,會建立一個Session("LoginOK"),並將頁面轉址到,另一個程式NeverTimeout2.asp
<%
  session("LoginOK") = "OK"
  response.redirect "NeverTimeout2.asp"
%>

NeverTimeout2.asp,程式內容如下。
  • NeverTimeout2.asp繼續往下執行的條件是:Session("LoginOK")=OK
  • 讓NeverTimeout2.asp程式開啟後,一值保持在可用狀態的作法,如下:
    1. 在頁面中建立一個iFrame,將iFrame所要顯示的內容,指向另一個網頁;並將這個iFrame設定為不顯示,以免影響網頁內容的顯示。
    2. 開啟NeverTimeout2.asp後,使用JavaScript的setInterval(執行的內容, 間隔的時間),讓這個頁面每若干毫秒後,就重新更新一次iFrame的內容。
    3. 重新載入更新iFrame的作法:
      document.frames["iFrame的名稱"].location.reload();
<%
    if session("LoginOK") <> "OK" then
        response.write "Session Time!!!"
        response.end
    end if
    response.write request("text01")
%>
<html>
<head>
</head>
<script language=javascript>
    window.setInterval("reloadIFrame();", 60000);

    function reloadIFrame() {
       document.frames["ifContent"].location.reload();
    }
</script>
<body >
     <div>
         <iframe src="iFramePage.asp" id="ifContent" style="display:none;" >
         </iframe>
     </div>
     <form method=get name=form01 action=NeverTimeout2.asp >
         <input type=text id=text01 name=text01 >
         <input type=submit name=Send value=send>
     </form>
</body>
</html>


iFrame的應用是不是很妙?如果不方便使用XMLHttpRequest的進行ajax非同步存取,用iFrame加上JavaScript,來模擬一下ajax的效果,應該也會有不錯的效果。

2013-10-05

使用classic ASP向SOAP service提供者,請求服務內容的程式碼範例

參考資料來源:http://stackoverflow.com/questions/3905194/get-simple-response-from-soap-service-with-classic-asp

以下是來自http://stackoverflow.com/questions/3905194/get-simple-response-from-soap-service-with-classic-asp的範例圖片 ,查閱asmx web service所提供的網址,可以取得請求的XML範例,但Classic ASP要如何建立對應的程式碼?這個圖片提供了對應的說明。
  1. Using SOAP in HTTP :
  2. 關於XMLHTTP的一些基本介紹:http://zh.wikipedia.org/wiki/XMLHTTP
  3. w3school關於XmlHttpRequest的說明:
    http://www.w3school.com.cn/xmldom/dom_http.asp
  4. 關於XMLHttpRequest物件的規格說明:http://www.w3.org/TR/XMLHttpRequest/
    • open 方法說明
      open(method, url [,async=true [,user=null [,password=null]]])
      method可用選項CONNECT, DELETE, GET, HEAD, OPTIONS, POST, PUT, TRACE, or TRACK
      async=true非同步, false同步
    • setRequestHeader方法說明
      setRequestHeader(header, value)
      header可用大類:Accept-Charset, Accept-Encoding, Access-Control-Request-Headers, Access-Control-Request-Method, Connection, Content-Length, Cookie, Cookie2, Date, DNT, Expect, Host, Keep-Alive, Origin, Referer, TE, Trailer, Transfer-Encoding, Upgrade, User-Agent, Via, ... ,例如:
      "Content-Type", "text/xml; charset=utf-8"
      "SOAPAction", "http://提供soap服務的url/要請求內容的方法"
    • send方法說明:送出請求
      send([data = null])
      如果請求的方法用GET或HEAD,不需傳遞data參數
    • responseType屬性說明:
      response.Type的屬性值:空字串(預設), "arraybuffer", "blob", "document", "json", 及 "text".
    • responseText屬性
    • responseXML屬性

<%
    Response.Write "<br>START<hr>"

    Set oXmlHTTP = CreateObject("Microsoft.XMLHTTP")
    oXmlHTTP.Open "POST", "http://www.crusaderb2b.co.uk/b2bservice.asmx", False 

    oXmlHTTP.setRequestHeader "Content-Type", "text/xml; charset=utf-8" 
    oXmlHTTP.setRequestHeader "SOAPAction", "http://crusaderb2b.co.uk/TrackingId"

    SOAPRequest = _
      "<?xml version=""1.0"" encoding=""utf-8""?>" &_
      "<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" &_
        "<soap12:Body>" &_
          "<ourFunction xmlns=""http://ourNameSpace/"">" &_
            "<Ccode>OurCode</Ccode>" &_
            "<Pword>1d2s45a</Pword>" &_
            "<OrderNo>9876</OrderNo>" &_
          "</ourFunction>" &_
        "</soap12:Body>" &_
      "</soap12:Envelope>"

    oXmlHTTP.send SOAPRequest    
    Response.Write oXmlHTTP.responseText

    Response.Write "<br>END<hr>"
%>

以HolidayWebService為例,說明使用classic asp存取asmx web service

參考資料來源:http://www.holidaywebservice.com/

Holiday Web Service提供的功能:
http://www.holidaywebservice.com/Holidays/US/USHolidayService.asmx

除了HolidayWebService,還有另一個版本HolidayWebService2,可以使用:
http://www.holidaywebservice.com/HolidayService_v2/HolidayService2.asmx

使用Classic ASP存取HolidayWebService的範例程式碼:
http://www.holidaywebservice.com/exampleCode.aspx
http://www.holidaywebservice.com/ExampleCode_ASP.aspx
  1. 提供WebService的網址是:cWEB_SERVICE_BASE_URL = http://www.holidaywebservice.com/Holidays/US/USHolidayService.asmx
  2. HolidayWebService提供哪些services?(範例中已先定義好字串了)
    cWEB_SERVICE_GET_HOLIDAYS_AVAILABLE = "GetHolidaysAvailable"
    cWEB_SERVICE_GET_HOLIDAYS_FOR_MONTH = "GetHolidaysForMonth"
    cWEB_SERVICE_GET_HOLIDAYS_FOR_YEAR = "GetHolidaysForYear"
    cWEB_SERVICE_GET_HOLIDAYS_FOR_DATE_RANGE = "GetHolidaysForDateRange"
    cWEB_SERVICE_GET_HOLIDAY_DATE = "GetHolidayDate"
  3. 使用GetHttpResponse自訂函數,向HolidayWebService請求回應值
    • Set oXmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
    • oXmlHttp.Open "POST", url, False
      url = WebService的網址 + 所定義服務字串
      例url=cWEB_SERVICE_BASE_URL & "/" & cWEB_SERVICE_GET_HOLIDAYS_FOR_MONTH
    • 設定請求內容的型態:
      oXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    • 送出請求:oXmlHttp.Send 請求內容的參數
      請求內容的參數,如果是請求回應指定年月中的Holiday,
      請求的字串範例: "year=" & Escape(年) & "&month=" & Escape(月)
    • 取得web service回傳的內容
      GetHttpResponse = oXmlHttp.ResponseText
  4. 使用WebServiceSimpleDataValue自訂函數,顯示取得的資料內容(適用在某年度的某節日對應日期查詢)
    • 建立XML物件,用來存放取得的回傳值
      Set oXmlDoc = CreateXmlObject()
    • 將回傳值放到所建立的XML物件中
      oXmlDoc.LoadXml(xmlString)
    • 取得節點名稱、節點的值
      Set oXmlNode = oXmlDoc.documentElement
      sDataType = oXmlNode.nodeName
      vReturnValue = oXmlNode.Text
    • 解析回傳內容、呈現回傳內容 ...
  5. 使用WebServiceDatasetToRecordset自訂函數,顯示取得的資料內容
    • 建立XML物件,用來存放取得的回傳值
      Set oXmlDoc = CreateXmlObject()
    • 將回傳值放到所建立的XML物件中
      oXmlDoc.LoadXml(xmlString)
    • 建立節點物件
      Set oXmlNode = oXmlDoc.SelectSingleNode("//xs:sequence")
    • 建立ADODB Recordset物件,用來存放所取得的回傳內容
      Set oRs = Server.CreateObject("ADODB.Recordset")
      oRs.ActiveConnection = nothing
      oRs.CursorLocation = adUseClient
      oRs.LockType = adLockBatchOptimistic
      oRs.CursorType = adOpenDynamic
    • 建立Recordset要存放資料的欄位名稱、值 ...
      For Each oXmlNode_Field In oXmlNode.ChildNodes
      sFieldName = oXmlNode_Field.Attributes.GetNamedItem("name").Value
      sFieldType = oXmlNode_Field.Attributes.GetNamedItem("type").Value
      Select Case sFieldType
      Case "xs:dateTime"
      iDataType = adDate
      Case Else
      iDataType = adVarchar
      End Select
      oRs.Fields.Append sFieldName, iDataType, 1024, adFldIsNullable
      Next
      oRs.Open
    • 將回傳值寫入Recordset中
      Set oXmlNode = oXmlDoc.SelectSingleNode("//NewDataSet")
      For Each oXmlNode_Record In oXmlNode.ChildNodes
      oRs.AddNew
      For Each oXmlNode_Field In oXmlNode_Record.ChildNodes
      sFieldName = oXmlNode_Field.nodeName
      oRs(sFieldName) = oXmlNode_Field.Text
      Next
      oRs.Update
      Next
    • 呈現回傳值
Option Explicit 

Const adUseClient = 3 
Const adLockBatchOptimistic = 4 
Const adOpenDynamic = 2 
Const adVarChar = 200 
Const adDate = 7 
Const adDBDate = 133 
Const adFldIsNullable = &H00000020 

Const NODE_ELEMENT = 1 

Const cXMLDOM_TYPENAME = "MSXML2.DOMDocument" 
Const cXMLHTTP_TYPENAME = "MSXML2.ServerXMLHTTP" 

Const cLOG_PATH = "./" 
Const cLOG_FILENAME = "call_holiday_service.log" 

Const cWEB_SERVICE_BASE_URL = "http://www.holidaywebservice.com/Holidays/US/USHolidayService.asmx" 

Const cWEB_SERVICE_GET_HOLIDAYS_AVAILABLE = "GetHolidaysAvailable" 
Const cWEB_SERVICE_GET_HOLIDAYS_FOR_MONTH = "GetHolidaysForMonth" 
Const cWEB_SERVICE_GET_HOLIDAYS_FOR_YEAR = "GetHolidaysForYear" 
Const cWEB_SERVICE_GET_HOLIDAYS_FOR_DATE_RANGE = "GetHolidaysForDateRange" 
Const cWEB_SERVICE_GET_HOLIDAY_DATE = "GetHolidayDate" 

Dim oRs, _ 
    oFld 
Dim sResponse, _ 
    sTmp 

    'sResponse = GetHolidaysAvailableResponse() 
    'sResponse = GetHolidaysForMonthResponse(2005, 5) 
    'sResponse = GetHolidaysForYearResponse(2005) 
    'sResponse = GetHolidaysForDateRangeResponse("2004-12-20", "2005-1-15") 
    'sResponse = GetHolidayDateResponse("easter", 2005) 
 
    'To see the XML returned, uncomment these next lines 
    'WriteLog String(25, "-") 
    'WriteLog sResponse 
    'WriteLog String(25, "-") 
 
    'To display simple data types (e.g. GetHolidayDate) 
    'Response.Write WebServiceSimpleDataValue(sResponse) 
 
    'To display DataSets, you have to first convert the Dataset to a Recordset 
    ' (e.g. GetHolidaysAvailable, GetHolidaysForMonth, GetHolidaysForYear, GetHolidaysForDateRange) 
    'Set oRs = WebServiceDatasetToRecordset(sResponse) 
    '    oRs.MoveFirst 
    '    Do Until oRs.EOF 
    '        sTmp = "" 
    '        For Each oFld In oRs.Fields 
    '            sTmp = sTmp & _ 
    '                oFld.Name & "=" & oFld.Value & vbCrLf 
    '        Next 
    '        Response.Write sTmp 
    '        oRs.MoveNext 
    '    Loop 
 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' 
'Helper function for calling the GetHolidaysAvailable web service method 
' 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function GetHolidaysAvailableResponse() 

    GetHolidaysAvailableResponse = GetHttpResponse(cWEB_SERVICE_BASE_URL & "/" & cWEB_SERVICE_GET_HOLIDAYS_AVAILABLE, Nothing) 

End Function 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' 
'Helper function for calling the GetHolidaysForMonth web service method 
' 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function GetHolidaysForMonthResponse(yr, mth) 

Dim sData 

    sData = "year=" & Escape(yr) & "&month=" & Escape(mth) 

    GetHolidaysForMonthResponse = GetHttpResponse(cWEB_SERVICE_BASE_URL & "/" & cWEB_SERVICE_GET_HOLIDAYS_FOR_MONTH, sData) 

End Function 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' 
'Helper function for calling the GetHolidaysForYear web service method 
' 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function GetHolidaysForYearResponse(yr) 

Dim sData 

    sData = "year=" & Escape(yr) 

    GetHolidaysForYearResponse = GetHttpResponse(cWEB_SERVICE_BASE_URL & "/" & cWEB_SERVICE_GET_HOLIDAYS_FOR_YEAR, sData) 

End Function 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' 
'Helper function for calling the GetHolidaysForDateRange web service method 
' 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function GetHolidaysForDateRangeResponse(startDate, endDate) 

Dim sData 

    sData = "startDate=" & Escape(startDate) & "&endDate=" & Escape(endDate) 

    GetHolidaysForDateRangeResponse = GetHttpResponse(cWEB_SERVICE_BASE_URL & "/" & cWEB_SERVICE_GET_HOLIDAYS_FOR_DATE_RANGE, sData) 

End Function 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' 
'Helper function for calling the GetHolidayDate web service method 
' 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function GetHolidayDateResponse(holidayName, yr) 

Dim sData 

    sData = "holidayName=" & Escape(holidayName) & "&year=" & Escape(yr) 

    GetHolidayDateResponse = GetHttpResponse(cWEB_SERVICE_BASE_URL & "/" & cWEB_SERVICE_GET_HOLIDAY_DATE, sData) 

End Function 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' 
'Helper function to get POST data to a server and get the text response 
' 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function GetHttpResponse(ByVal url, ByVal dataToSend) 

Dim oXmlHttp: Set oXmlHttp = Server.CreateObject(cXMLHTTP_TYPENAME) 
Dim bSendData 

    oXmlHttp.Open "POST", url, False 

    bSendData = False 
    If IsObject(dataToSend) Then 
        If Not dataToSend Is Nothing Then 
            bSendData = True 
        End If 
    ElseIf Len(Trim(dataToSend)) > 0 Then 
        bSendData = True 
    End If 

    If bSendData Then 
        If bSendData And IsObject(dataToSend) = False Then 
            'set the content type 
            oXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
        End If 

        oXmlHttp.Send dataToSend 
    Else 
        oXmlHttp.Send 
    End If 

    GetHttpResponse = oXmlHttp.ResponseText 

Set oXmlHttp = Nothing 

End Function 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' 
'Helper function to get the value of a simple data type returned by a Web Service 
' 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function WebServiceSimpleDataValue(ByVal xmlString) 

Dim oXmlDoc: Set oXmlDoc = CreateXmlObject() 
Dim oXmlNode 
Dim sDataType 
Dim vReturnValue 

    oXmlDoc.LoadXml(xmlString) 
    Set oXmlNode = oXmlDoc.documentElement 

    sDataType = oXmlNode.nodeName 
    vReturnValue = oXmlNode.Text 

    Select Case sDataType 
        Case "dateTime" 
            vReturnValue = CDate( _ 
                            Mid(vReturnValue, 1, 4) & "-" & _ 
                            Mid(vReturnValue, 6, 2) & "-" & _ 
                            Mid(vReturnValue, 9, 2) & " " & _ 
                            Mid(vReturnValue, 12, 2) & ":" & _ 
                            Mid(vReturnValue, 15, 2) & ":" & _ 
                            Mid(vReturnValue, 18, 2) _ 
                            ) 

            'Example: 
            '2005-03-27T00:00:00.0000000-05:00 
            '123456789012345678901234567890123 
    End Select 

    WebServiceSimpleDataValue = vReturnValue 

End Function 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' 
'Helper function to get convert a DataSet data type returned by a Web Service to an 
'ADO recordset 
' 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function WebServiceDatasetToRecordset(ByVal xmlString) 

Dim oXmlDoc: Set oXmlDoc = CreateXmlObject() 
Dim oXmlNode, _ 
    oXmlNode_Field, _ 
    oXmlNode_Record 
Dim oRs, _ 
    oFld 
Dim sFieldName, _ 
    sFieldType 
Dim iDataType 

    oXmlDoc.LoadXml(xmlString) 

    Set oXmlNode = oXmlDoc.SelectSingleNode("//xs:sequence") 

    Set oRs = Server.CreateObject("ADODB.Recordset") 
        oRs.ActiveConnection = nothing 
        oRs.CursorLocation = adUseClient 
        oRs.LockType = adLockBatchOptimistic 
        oRs.CursorType = adOpenDynamic 

        For Each oXmlNode_Field In oXmlNode.ChildNodes 
            sFieldName = oXmlNode_Field.Attributes.GetNamedItem("name").Value 
            sFieldType = oXmlNode_Field.Attributes.GetNamedItem("type").Value 

            Select Case sFieldType 
                Case "xs:dateTime" 
                    iDataType = adDate 
                Case Else 
                    iDataType = adVarchar 
            End Select 

            oRs.Fields.Append sFieldName, iDataType, 1024, adFldIsNullable 
        Next 

        oRs.Open 

    Set oXmlNode = oXmlDoc.SelectSingleNode("//NewDataSet") 

    For Each oXmlNode_Record In oXmlNode.ChildNodes 
        oRs.AddNew 
         
        For Each oXmlNode_Field In oXmlNode_Record.ChildNodes 
            sFieldName = oXmlNode_Field.nodeName 

            oRs(sFieldName) = oXmlNode_Field.Text 
        Next 

        oRs.Update 
    Next 

    Set WebServiceDatasetToRecordset = oRs 

End Function 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' 
'Helper function to create an XML Object 
' 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function CreateXmlObject() 

    Set CreateXmlObject = Server.CreateObject(cXMLDOM_TYPENAME) 

End Function 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' 
'Helper function to append messages to a log file 
' 
'*** WriteLog assumes WRITE permissions on the directory that the log is being written to 
' 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function WriteLog(ByVal psMessage) 

Dim sFileName 
    sFileName = cLOG_PATH & cLOG_FILENAME 
Dim oFs: Set oFs = Server.CreateObject("Scripting.FileSystemObject") 
Dim oTs: Set oTs = oFs.OpenTextFile(sFileName, 8, True)    '8 = ForAppending 
    oTs.WriteLine Now() & vbTab & psMessage 
    oTs.Close 
Set oTs = Nothing 
Set oFs = Nothing 

    WriteLog = True 

End Function 



2013-04-03

如何使用ASP執行AS/400的RGP程式(有傳入參數值,並回傳參數值)

只要掌握幾個要點,要透過ASP來執行AS/400的RGP程式,並不是一件很難的事
使用IBMDA400所提供的ADODB(OLEDB)連線存取功能,以connection物件建立連線,再以command物件建立要傳入傳出的參數,執行command,即可透過ASP執行RPG程式。
<%
  set conn=server.createobject("ADODB.connection")    
  ConnStr = "Provider=IBMDA400;Data Source=400主機網址;User Id=帳號;Password=密碼;"
  conn.open ConnStr
  set ccmd = server.CreateObject("ADODB.Command")
  set ccmd.ActiveConnection = conn
  ccmd.CommandType = adCmdText   
  '''必須包含{{}},這個RGPNAME共有三個參設
  ccmd.CommandText = "{{call TSTLIB.RGPNAME(?,?,?)}}"
  ccmd.NamedParameters = True
  ccmd.Prepared = True
  '''依序建立這三個參數
  '''第一個參數以資料型態char(10),值=zPara1,傳入給RPG的PARA1接收。
  set para = ccmd.CreateParameter("PARA1",adChar,adParamInput,10,zPara1)
  ccmd.Parameters.Append para
  set para = ccmd.CreateParameter("PARA2",adChar,adParamInput,10,zPara2)
  ccmd.Parameters.Append para
  '''第三個參數以資料型態char(10),接收給RPG的PARA3的回傳值。
  set para = ccmd.CreateParameter("PARA3",adChar,adParamOutput,10,zPara3)
  ccmd.Parameters.Append para
  ccmd.Execute()
  zPARA = ccmd.Parameters("PARA3").value
  conn.close()
%>

在VS2010新增建立ASP網頁應用程式的Team Foundation專案

以下將說明如何在VS2010新增建立一個命名為SmsrDevProj的ASP網頁應用程式的Team Foundation專案。

  1. 檔案→新增專案→已安裝的範本→其他專案類型→Visual Studio方案→空白方案。
    • 名稱:SmsrDevProj    (專案的名稱)
    • 位置:\\WebServer\WwwRootForTest
      (可以指向位於其他主機的資料夾,不需事先建立專案名稱的資料夾,專案建立後會自動產生該資料夾,上例: \\WebServer\WwwRootForTest\ SmsrDevProj)
  2. 移到『方案總管』,將程式碼、資料夾加入專案中:
    專案(P)→加入現有項目(G)→選取要加入的各種類型的檔案
    專案(P)→加入新的方案資料夾(D)→在專案中加入資料夾
  3. 將上述加入的檔案、資料夾等資料,加入至原始控制檔:
    檔案(F)→原始控制檔(R)→將方案加入至原始控制檔(A)
    建立(Team專案位至)新的資料夾,輸入方案資料夾的名稱(F),與專案名稱相同即可。
  4. 將上述在本機端建立的專案,簽入到TFS (Team Foundation Server)
    檔案(F)→原始檔案控制(R)→簽入(I)
完成以上步驟,才算將方案中的資料,納入TFS的管理。

2012-08-26

在client端以vbscript查詢資料庫並傳回結果

參考資料:如何使用 XMLHTTP 或 ServerXMLHTTP 物件送出表單資料

將以下程式碼放在要client端的程式內

<%@ Language=vbScript%>
<%
  DataToSend = "id=1"
  dim xmlhttp 
  set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
  xmlhttp.Open "POST","http://localhost/Receiver.asp",false
  xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  xmlhttp.send DataToSend
  Response.ContentType = "text/xml"
  Response.Write xmlhttp.responsexml.xml
  Set xmlhttp = nothing
%>

  1. 建立xmlhttp
  2. 以xmlhttp.Open指定要查詢的程式
    (http://localhost/Receiver.asp為查詢資料庫的程式)
  3. 以xmlhttp.send送出要查詢的資料
  4. 以Response.ContentType指定回傳資料的形態
  5. 以xmlhttp.responseXML.xml取得查詢得結果
    (或設一變數,將回傳值接收下來rtnValue = xmlhttp.ResponseText )
  6. client端接收取得資料後,可以用 set xmlhttp = nothing 清空 xmlhttp