2015年8月6日 星期四

各種 IE版本模擬器

各種 IE版本抹你氣

平平是IE,你看到的ie8跟我看到的ie10就是不一樣

特別是套用css後


這次用的是IETester,可以檢視原始檔,還不錯用,可以試試。

網路上有免安裝中文版。一次測到爽(囧)。


2015年7月31日 星期五

交易處理(Transaction)介紹

說到交易處理,最常舉的例子就是銀行 金錢 提款



Round 1 【交易四大特性】 **********************************************

交易處理(Transaction)

【交易四大特性】
一、單元性(Atomicity)
二、一致性(Consistency)
三、隔離性(Isolation)
四、持久性(Durability)

1 單元性(Atomicity)
【定義】
將交易過程的所有對資料庫操作視為同一個單元工作,其中可能包括許
多步驟,這些步驟要嘛全部執行成功,否則,整個交易宣告失敗。所以,
整個交易是一個不可分割的邏輯單位。
但是,在單元工作中,如果其中有一個操作尚未完成,則整個交易必須
回到初始狀態,回到初始狀態的程序稱為復原(Recovery, Rollback) 。


2 一致性(Consistency)
【定義】
指交易過程所異動的資料在交易前與交易後必須一致,資料庫的資料必
須仍然滿足完整性限制條件(利用資料表中的Check與Foreign Key),即
維持資料的一致性


2.3 隔離性(Isolation)
【定義】隔離性是指多筆交易在同時交易時,雖然各交易是並行執行,
不過各交易之間應該滿足獨立性,也就是說,一個交易不會影響到其它
交易的執行結果,或被其它交易所干擾。

A交易處理某帳號時,B交易正好要讀取此帳號,當A交易處理失敗,
A交易Abort(撤回),形成B交易所讀取的資料是不正確的,也必須要被Abort(撤回)。

【分析】A交易資料更新到一半尚未完成確認(Commit)時,卻被B交易讀取,
因此,B交易只是取得A交易的暫時性資料,此現象就稱為Dirty Read。

【解決方法】利用鎖定(Lock)資料的方式來隔離交易。


4 持久性(Durability)
【定義】
永久性是指當交易完成執行確認交易(Commit)後,資料庫會保存交
易後的結果,即使系統掛了,交易的結果也不能遺失。




【兩種機制與ACID分析】
資料庫系統的交易管理是指「並行控制」和「回復技術」兩個機制的合
稱,因此,我們可以將兩種機制與ACID分析如下:
(1)「並行控制」機制是要維持「隔離性」和「一致性」保持
(2)「回復技術」機制是維持交易處理的「不可分割性」和「永久性」


Round 2 交易的狀態 **********************************************


交易的狀態
一個交易狀態是由活動狀態(Active)、部分確認(Partially Committed)、確
認(Committed)、失敗(Failed)及終止狀態(Terminated)等五個狀態組合而成。

1. 活動狀態(Active State)
【定義】
當「交易開始(Begin Transaction)」執行時即進入「活動狀態(Active
State)」,在此狀態中可以對資料庫進行一系列的讀(Read)及寫(Write)
動作。

2. 部分確認狀態
(Partially Committed State)
【定義】
指在對資料庫進行各種單元操作完成之後,也就是交易結束。此時即可
進入「部分確認狀態(Partially Committed State)」,在此狀態中「同
步控制」動作將會去檢查是否干擾其他正在執行中的交易。

3. 確認狀態(Committed State)
【定義】
當「活動狀態」與「部分確認狀態」檢查動作都成功之後,即可進入
「確認狀態(Committed State)」,亦即將交易過程真正的寫入資料庫
中,表示此筆交易成功。

4. 失敗狀態(Failed State)
【定義】
當「活動狀態」或「部分確認狀態」檢查動作其中一項失敗時,此時會
被要求進入「失敗狀態」,在此狀態中交易將會寫入「UNDO取消」動
作,以回復到交易未執行前的狀態。

5. 終止狀態(Terminated State)
【定義】
是指在「交易失敗」或「交易成功」之後,最後都必須執行交易終止,
亦即結束交易(End Transaction)。


若要結束交易功能的話,有兩種情況:

下達確認(Commit)或撤回(Rollback)指令這兩種情況才會使交易結束。因此,如果在交
易處理當中,若執行的操作有成功的話,可以使用確認(Committed)指令。執行確認指令
之後,交易功能的處理結果就會真正被反映出來。

如果在交易處理當中,若執行的操作失敗時,或想要重新再來一次的話,可以執行撤回
(Rollback)指令。執行撤回指令之後,原來的交易操作會變成無效,資料會回到原本執行
處理之前的狀態。



Round 3 交易的進行 **********************************************


交易的進行
【定義】
一個完整且成功的交易,必須要經過一連串的交易動作,因此,我們必
須要了解每一個交易動作的目的。如下所示:

1.BEGIN TRANSACTION(又可寫成BEGIN TRAN)

2.READ或WRITE

3.同步控制動作檢查

--對資料庫的各種操作完成之後,即可進入部分確認狀態,並且準備進入Commit
--同步控制動作將檢查其是否干擾其他正在執行中的交易


4.COMMIT TRANSACTION
(又可寫成COMMIT TRAN、COMMIT或COMMIT WORK)

--【定義】對資料庫的各種操作完成之後,即可進入部分確認狀態,並且準備進入Commit

--如果交易執行過程沒有錯誤,下達COMMIT指令,將交易更改的資料實際寫入資料庫

5.ROLLBACK TRANSACTION
(又可寫成ROLLBACK TRAN, ROLLBACK 或ROLLBACK WORK)

--【定義】回復交易(Rollback):如果交易執行過程有錯誤,就是下達ROLLBACK指令放棄交易,並將資料庫回復到交易前狀態
--如果交易失敗,回復交易是使用ROLLBACK TRAN指令結束。

6.UNDO
--【定義】與ROLL BACK動作相似,但是只會被用來回復到未進行單一動作前的
狀態,而不是整個交易。

7.REDO
--【定義】這是要重複執行某一交易中的動作,以確定所有已被確認的交易動作已
經成功的作用在資料庫中。




Ex 1 ================================

BEGIN TRAN
INSERT 學生資料表VALUES('S001', '張三')

IF @@ERROR<>0 --同步控制動作檢查
  ROLLBACK TRAN --確認交易(Commit)
ELSE
  COMMIT TRAN        --回復交易(Rollback)
END TRAN


Ex 2 ================================

Begin Transaction --開始交易
SQL命令1
SQL命令2
……
SQL命令N

if (產生錯誤) --進行ROLLBACK的動作
Rollback transaction
else
Commit transaction --交易成功
End Transaction --結束交易

================================


**********************************************

此篇為筆記,資料來源 洪瑞展老師。


2015年6月24日 星期三

[visual studio 2010] 未正確載入套件

visual studio 2010 未正確載入套件


















解決方法:

刪除 ComponentModelCache

C:\Users\{登入者}\AppData\Local\Microsoft\VisualStudio\10.0

完畢。



安裝visual studio 2010 sp1沒裝成,連原來程式都不能用了...,這也算一絕吧。
網路上很多人有這些問題。

2015年5月14日 星期四

上傳檔案,錯誤 'ASP 0104 : 80004005' 上傳下載檔案大小限制設定


在執行上傳檔案時,出現錯誤訊息,如下

錯誤訊息:
要求物件 錯誤 'ASP 0104 : 80004005'
不允許的操作


其實是因為iis 有上傳檔大小限制,以我 IIS7.5 為例,(後面補充IIS6的做法),開啟 iis後,

==============================================
 IIS7.5 上傳下載檔案大小限制設定

  1. 點開ASP
  2. 調整 "要求實體的上限" byte值










完畢。

==============================================
IIS 6 上傳下載檔案大小限制設定

1.視需求勾選
啟用直接 metabase 編輯。允許您在IIS執行時,編輯IIS Metabase設定檔。



2.
開啟 C:\WINDOWS\system32\inetsrv\metabase.xml
AspBufferingLimit="4194304"                     \\下載限制
AspMaxRequestEntityAllowed="204800"   \\上傳限制

把上傳限制設大一點。

重啟IIS

完畢。

==============================================

參考:
win2003 解除iis6.0上傳容量限制
http://pecoju.pixnet.net/blog/post/18548676-win2003-%E8%A7%A3%E9%99%A4iis6.0%E4%B8%8A%E5%82%B3%E5%AE%B9%E9%87%8F%E9%99%90%E5%88%B6-

檔案重新命名


檔案重新命名,用搬移檔案的方式達成。

Syntax

FileSystemObject.MoveFile source,destination

<%
dim fs
set fs=Server.CreateObject("Scripting.FileSystemObject")
fs.MoveFile "c:\web\*.gif","c:\images\"
set fs=nothing
%>



======================================
參考 :
w3c, The FileSystemObject Object
http://www.w3schools.com/asp/asp_ref_filesystem.asp

2015年3月23日 星期一

asp判斷是否為英文或數字

方法一:
<%
'Response.Write(isValidate("ac4中123") & "<br>")
'Response.Write(isValidate("ac4123") & "<br>")


Function isValidate(str)
  Dim re
  Set re = new RegExp
  re.Pattern = "[^a-zA-Z0-9]"
  isValidate = re.Test(str)
End Function
%>




方法二:

function ContainsChtString(str)
  dim x,tmp
  tmp = false
  for x = 1 to len(str)
    if asc(mid(str,x,1)) > 32 and asc(mid(str,x,1)) < 127 then
      tmp = true
      exit for
    end if
  next
  ContainsChtString= tmp
end function


if ContainsChtString(Name) then
  error_mag = "字串包含特殊符號、數字和大小寫英文字"
end if


原先查到的資料是判斷
 asc(mid(str,x,1)) < 0 ,ascii碼小於零,即中文字,但後來發現,中文字中間夾英數字,就判斷不出來了。

所以改寫成 asc(mid(str,x,1)) > 32 and asc(mid(str,x,1)) < 127
判斷包含特殊符號、數字和大小寫英文字


================================

如果要判斷是否為數字
IsNumeric()

================================




2015年3月20日 星期五

mssql資料型態介紹: nvarchar, ntext


n        unicode
var     非固定長度,4000字以內的文字
ntext  unicode,4000字以上的文字


varchar
長度為 n 個字元之可變長度非 Unicode 字元資料。n 必須介於 1 至 8,000,儲存大小為實際輸入資料的長度,而非 n 個位元組。輸入的資料長度可以是 0 字元。

ntext
可變長度的 Unicode 資料,最大長度為 2^30 - 1 (1,073,741,823) 個字元。


適用時機:
varchar:
當你的字元長度少於8000個字元,且字元內容無須以 unicode 格式儲存時,可選擇varchar 註:一個中文字及一個英文字母皆算一個字元

ntext:
在 SQL Server 中,Unicode 資料是使用 nchar、nvarchar 和 ntext 資料型別來儲存。設成這些資料型別的資料行可儲存來自多個字元集的字元。若資料行項目所包含的 Unicode 字元個數並不一致 (最多為 4,000) ,請使用 nvarchar。若資料行每個項目的長度是固定的 (最多為 4,000 個 Unicode 字元),請使用 nchar。若資料行的任何項目長度超過 4,000 個 Unicode 字元,則使用 ntext。



這篇教學文章寫得很好(出處 http://www.dotblogs.com.tw/jeff-yeh/archive/2010/11/14/19440.aspx)

認識Char/NChar/VarChar/NVarChar/Text/NText


Char/NChar/VarChar/NVarChar/Text/NText,這幾個資料型別或許有些人很熟,有些人只熟其中幾個,尤其是程式設計師,不碰DB Design的,如果有碰到,也可能依"慣例"的去設定資料型別,所以不難看見,有些Table資料型別很單調,看的到的型別不多,只要是存文字的,都是NVarChar,或許在瞭解後,可以做出更好的規劃.
其實這個的識別方式很簡單.


  • 帶Var的 : 代表就是非固定長度的型別,所以Var在存不固定長度的資料時,會較省空間,
  • 帶N的 : 就是支援Unicode,但要注意,儲存的資料會大兩倍.

這樣就把Char全部講完,剩Text跟Char有什麼不同,Text的特性跟VarChar一樣,只是用來儲存大量的文字資料,但後來的VarChar也做了調整,也可以存大量的文字資料,所以Text在未來新版的DB會移除.


  • Char的長度為1~8000
  • VarChar的長度為1~8000,如果是VarChar(max)就是2^31-1 位元組,VarChar(max)只有SQL2005(含)以上才支援,SQL2000就沒有.
  • Text的長度為2^31-1,它的長度跟VarChar(max)是一樣的.


如果您有支援多國語言的網站,請考慮利用 Unicode nchar 或 nvarchar 資料類型,將字元轉換問題減到最少。如果您使用 char 或 varchar,我們建議您執行下列動作:

  • 當資料行資料項目的大小一致時,請使用 char。
  • 當資料行資料項目的大小變化相當大時,請使用 varchar。
  • 當資料行資料項目的大小變化相當大,且大小可能超出 8,000 位元組時,請使用 varchar(max)。



2015年3月15日 星期日

IUSR & IWAM


IUSR
Internet 來賓帳戶
匿名存取 Internet Information Services 的內建帳戶





IWAM

啟動 IIS 處理程序帳戶
從作業應用程式啟動的內建 Internet Information Services 帳戶






2015年3月12日 星期四

asp實作線上人數



Application 物件的應用

Application 物件可以用來保存總體變數,這些變數將保留到伺服器關機為止,由於這些變數在保存時不會去區分個別用戶端的連線編號(Session ID),因此無論是哪個用戶端都可以讀寫,利用這個特性我們可以很容易開發出計數器與聊天室的功能。

下面的例子,當參觀者連線到首頁時,就累計人數:

<%
Application.Lock
 Application("count")=Application("count")+1
 Application.Unlock
 %>
累計參觀人次:<% =Application("count") %>

在操作 Application 物件時要特別注意寫入衝突的問題,當參觀者同時上線時,由於大家所存取的 Application 變數是同一個,如果不把它鎖定就直接寫入,會造成計數不正確的現象。Application.Lock 就是用來鎖定物件,防止他人寫入。當物件被鎖定時,其他人就會暫停執行程式,等到鎖定解除後才會繼續執行。

如果要製作的計數器是線上人數,則不可以只累加而不減少,正確的作法應該是在參觀者上線時加 1,離線時減 1,特別要注意的是參觀者上線時,並不一定都會去連首頁,所以進行計數的程式不能寫在首頁中,首頁頂多只是用來秀出人數而已。

要達到這個功能必須使用 Session 物件所提供的兩個事件處理器:onStart 和 onEnd,前者在參觀者連線時會自動觸發執行,後者在離線時觸發執行。而要定義這兩個事件處理器,只能將程式寫在 global.asa 檔案中,這個檔案必須建立在網站主目錄的根目錄中,而且一個虛擬站台只能有一份 global.asa。程式語法如下:

<script language="VBScript" runat="SERVER">
 SUB Session_onStart
     Application.Lock
     Application("online")=Application("online")+1
     Application.Unlock
 END SUB

 SUB Session_onEnd
     Application.Lock
     Application("online")=Application("online")-1
     Application.Unlock
 END SUB
 </script>

global.asa 程式存檔後就會立即生效,現在我們就可以找個適當的網頁,來顯示線上人數:

現在有<% =Application("online") %>人上線

補充說明:Application 物件也有提供 onStart 和 onEnd 事件處理器,前者在 IIS 啟動時自動執行,後者在 IIS 關閉時執行。




來源:
http://www.spps.tp.edu.tw/documents/memo/asp_develop.htm

2015年3月9日 星期一

執行 ASP 網頁導致回應緩衝區超出其設定限制



回應物件 錯誤 'ASP 0251 : 80004005'

超出回應緩衝區限制

執行 ASP 網頁導致回應緩衝區超出其設定限制。


解法:
調整metabase 。參考這篇
開啟 C:\WINDOWS\system32\inetsrv\metabase.xml
AspBufferingLimit="4194304"                     \\下載限制
AspMaxRequestEntityAllowed="204800"   \\上傳限制


解法:
在第一行加入這一句

<% Response.Buffer = False %>




2015年3月8日 星期日

filesystemobject取得資料夾內的檔案名稱





fPath = Server.MapPath("file\")

Set fs=Server.CreateObject("Scripting.FileSystemObject")
'擷取使用者上傳檔名
Set folder = fs.GetFolder(fPath)
For each f in folder.files
fName = f.Name
Next

set fs=nothing

2015年3月5日 星期四

trigger 初體驗

trigger真是不錯的好東西




善心人士寫的入門指導文章 : http://deanma.blogspot.tw/2012/02/ms-sql-triggertable.html

的指導範例 :
--建立測試表格
CREATE TABLE [dbo].[WIPPrd](
    [ProdNo] [varchar](16) NOT NULL,
    [PnameD] [nvarchar](100) NULL,
    [PType] [varchar](4) NULL,
    [InDay] [datetime] NULL,
    [UsrNo] [varchar](10) NULL,
    [UsrCo] [varchar](5) NULL) ON [PRIMARY]
 
--建立記錄檔
CREATE TABLE [dbo].[WIPPrd_Log](
    [MState] [varchar] (10) NOT NULL,
    [ProdNo] [varchar](16) NOT NULL,
    [PnameD] [nvarchar](100) NULL,
    [PType] [varchar](4) NULL,
    [InDay] [datetime] NULL,
    [UsrNo] [varchar](10) NULL,
    [UsrCo] [varchar](5) NULL )    

--建立TRIGGER-在WIPPrd表格更新、新增、刪除後觸發
CREATE TRIGGER dbo.TR_WIPPrd_Modify on dbo.WIPPrd AFTER UPDATE,INSERT,DELETE
AS
BEGIN  
    --表格異動資料時會產生暫存的inserted和deleted兩個表格
    --兩個表格格式資訊皆與原表格相同
    --inserted紀錄insert資料、update後資料
    --deleted紀錄delete資料、update前資料
    
    --依據異動方式將異動資料新增到記錄檔
    --inserted和deleted皆有資料表示為-UPDATE
    IF EXISTS (select 1 from inserted) and EXISTS (select 1 from deleted)
    BEGIN      
        insert into WIPPrd_Log select 'DELETE',* from deleted
        insert into WIPPrd_Log select 'INSERT',* from inserted
    END
    --inserted有資料deleted無資料表示為-INSERT
    ELSE IF EXISTS (select 1 from inserted) and Not EXISTS (select 1 from deleted)
        insert into WIPPrd_Log select 'INSERT',* from inserted
    --inserted無資料deleted有資料表示為-DELETE
    ELSE IF NOT EXISTS (select 1 from inserted) and EXISTS (select 1 from deleted)
        insert into WIPPrd_Log select 'DELETE',* from deleted 
END


--測試
--清空資料 
delete from WIPPrd 
delete from WIPPrd_log
--新增資料
insert into WIPPrd values ('11','TEST_11','11',GETDATE(),'Dean','10001')
insert into WIPPrd values ('22','TEST_22','22',GETDATE(),'Dean','10001')
--更新資料
update WIPPrd set ProdNo='33',PnameD='TEST_33' where ProdNo='22'
--刪除資料
delete from WIPPrd
--查詢記錄檔
select * from WIPPrd_log



------------------------------------------------------------
INSERT     11    TEST_11    11    2012-02-26 14:17:47.750    Dean    10001
INSERT     22    TEST_22    22    2012-02-26 14:17:47.763    Dean    10001
DELETE    22    TEST_22    22    2012-02-26 14:17:47.763    Dean    10001
INSERT     33    TEST_33    22    2012-02-26 14:17:47.763    Dean    10001
DELETE    33    TEST_33    22    2012-02-26 14:17:47.763    Dean    10001
DELETE    11    TEST_11    11    2012-02-26 14:17:47.750    Dean    10001

將儲存功能寫在另一個asp裡面

將儲存功能寫在另一個asp裡面

案例一:
將儲存功能寫在另一個asp裡面,js定義兩個父子視窗關係

在父視窗(f100.asp)按下儲存按鈕,
利用button onclick開啟子視窗(b010.asp),執行儲存功能,
js關閉子視窗,且重整父視窗。


f100.asp

<form name="frmform" method="post" action="f100.asp?id=<%=P_id%>&no=<% =P_no%>">

   <input type=button value="儲存" onclick='run_submit();' class="formcss">

'...



</html>
 <script language="javascript">

  function run_submit(){
         var url="b010.asp"

 frmform.action=url;
 var xwin = Newopenurl("about:blank","xwin","");
 frmform.target = "xwin";
 if(xwin.opener==null) xwin.opener=window; //設定新視窗和舊視窗的關係
 frmform.submit();

   }
   </script>



b010.asp

'儲存功能
'...


<script language=javascript>
  //關閉子視窗,且重整父視窗。
  window.close();
  window.opener.location.reload();

</script>


**********************************

案例二:
將儲存功能寫在另一個asp裡面,(不開啟子視窗)


在網頁(watchgrant_f010.asp)按下儲存按鈕,
導入第二個網頁(watchgrant_q010.asp)執行儲存功能,
儲存功能執行完畢後,再利用js導回第一個網頁。

註 : 第一個網頁有兩個form,與此案例沒有什麼關係。



f010.asp

<!--撰寫2個form-->

<!--第一個form-->
<form name="form" method="post" action="f010.asp?id=<%=P_id%>&no=<%=p_no%>">

<!--第二個form-->
<!--第二個form,將儲存功能寫在另一個asp裡面,-->
<form name="form1" method="post" action="q010.asp?id=<%=P_id%>&no=<%=P_no%>" >

   <INPUT class=formcss_other  type=submit value="儲存" name=save>



q010.asp

'儲存功能
'...

<script language=javascript>
alert ("個人費用登記作業成功!!")
        window.location.href="/f010.asp?id=<%=P_id%>&no=<%=p_no%>"
</script>


完畢。

2015年2月24日 星期二

瀏覽人次計算


利用Request.ServerVariables("Remote_Addr") 計算瀏覽人次


  1. 抓取cliend端ip
    Request.ServerVariables("Remote_Addr")
  2. 將cliend端ip存入session
  3. 條件(1或2):
    1.判斷比較「cliend端ip」與「session存入的ip」,不相同。
    2.判斷session值為空。
    執行動作:計數+1。 session存入ip 。
  4. 完畢。


<%
   sqlstr = "SELECT top 1 * FROM WebCount"
   Set Rs = Server.CreateObject("ADODB.Recordset")
   Rs.open sqlstr,connE, 1, 3
   if session("RemoteAddr_E") = "" or session("RemoteAddr_E") <> Request.ServerVariables("Remote_Addr") then
      Rs("Web_Count") = Rs("Web_Count") + 1
      session("RemoteAddr_E") = Request.ServerVariables("Remote_Addr")
      Rs.update
      Web_E_Count = "0000000" & Rs("Web_Count")
      Session("Web_E_Count") = right(Web_E_Count,7)
   End if
   Rs.close
   set Rs = nothing
%>

asp下載遠端檔案的程式碼







<%
'將圖片欄位讀出,並存入 strUrl 變數中
Dim strUrl

Do While not RS.EOF

strUrl = strUrl & RS("图片")

RS.MoveNext

Loop

'將 strUrl 折解,並存入 arrUrl 陣列中
Dim arrUrl

arrUrl = Split(strUrl, ";")

'1、檢查遠端檔案是否存在,若不存在則警告訊息,但不影響程式進行
'2、檢查本地有否對應目錄,若不存在則建立目錄
'3、將遠端檔案下載到本地
Dim winPath1, winPath2
Dim arrPath
Dim FileName
Dim i, j
Dim Total
Dim ErrText

winPath1 = "E:\Temp\PULADA\"  '此目錄必須自己手動建立

For i = LBound(arrUrl) to UBound(arrUrl) - 1

'將 arrUrl(i) 拆解為另一陣列 arrPath,以便取得完整檔名
arrPath = Split(Replace(arrUrl(i), "http://" , ""), "/")

'取得完整檔名
FileName = arrPath(UBound(arrPath))

'1、檢查遠端檔案是否存在,若不存在則警告訊息,但不影響程式進行
Set XMLHTTP = Server.Createobject("MSXML2.ServerXMLHTTP.5.0")

XMLHTTP.Open "GET", arrUrl(i), false
XMLHTTP.Send()

'判斷遠端檔案是否存在,200 代表存在,404 代表不存在
If XMLHTTP.Status <> 200 Then

Response.Write "<font color=FF0000>第 " & i + 1 & " 筆:失敗" & "<br>"

'記錄錯誤訊息,然後在程式執行完後顯示
ErrText = ErrText & arrUrl(i) & "<br>"

Else

RemoteFile = XMLHTTP.ResponseBody

'2、檢查本地有否對應目錄,若不存在則建立目錄
Set FSO = Server.CreateObject("Scripting.FileSystemObject")

For j = LBound(arrPath) to UBound(arrPath) - 1

winPath2 = winPath2 & arrPath(j) & "\"

'判斷目的目錄是否存在,若不存在則建立
If not FSO.FolderExists(winPath1 & winPath2) Then
FSO.CreateFolder(winPath1 & winPath2)
End If

Next

Set FSO = Nothing

'3、將遠端檔案下載到本地
Set objAdostream = Server.Createobject("ADODB.Stream")

objAdostream.Open()
objAdostream.Type = 1
objAdostream.Write(RemoteFile)
objAdostream.SaveToFile(winPath1 & winPath2 & FileName), 2  '2 代表不詢問,直接覆蓋
objAdostream.SetEOS

Set objAdostream = Nothing

Response.Write "<font color=0000FF>第 " & i + 1 & " 筆:成功" & "<br>"

'記錄成功的筆數
Total = Total + 1

'winPath 必須清除內容,不然會出現建立目錄時產生無限迴圈
winPath2 = ""

End If

Response.Flush
Response.Clear

Next

Response.Write "<br><br>"
Response.Write "<font color=0000FF>總相片數應為:</font>" & UBound(arrUrl, 1) & "<br>"
Response.Write "<font color=0000FF>實際下載數為:</font>" & Total & "<br>"
Response.Write "<font color=0000FF>未下載的連結:</font>" & "<br>" & ErrText & "<br>"

%>




資料來源:
如何用 asp 下載網址有中文字的遠端檔案
http://www.blueshop.com.tw/board/FUM200410061525290EW/BRD20140715120104M6P.html



本站其他相關資料 : 
抓取遠端網頁錯誤代碼404,檢查遠端檔案是否存在
http://gdlion.blogspot.tw/2015/02/httpwebrequest404.html


2015年2月23日 星期一

抓取遠端網頁錯誤代碼404,檢查遠端檔案是否存在




<%
Function postFormData(url, data)
    Dim xhr : Set xhr = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
    xhr.open "POST", url, false
    xhr.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    xhr.send Data
    postFormData=xhr.Status '錯誤代碼

'自訂錯誤內容
'    If (xhr.Status = 200) then
'       postFormData = xhr.ResponseText
'    ElseIf (xhr.Status = 404) then
'       postFormData = xhr.ResponseText
'    Else
'        Err.Raise 1001, "postFormData", "Post to " & url & " failed with " & xhr.Status
'    End If

set xhr = Nothing
End Function
%>




<%
'如果A電腦沒有檔案,抓取B電腦的
url="http://100.100.100.111/big5/gencaa/upload/" & Rs("FilePath")
if postFormData(url,"") = 404 then
mail.AddAttachment "http://100.100.100.222/big5/gencaa/upload/" & Rs("FilePath")
else
mail.AddAttachment "http://100.100.100.111/big5/gencaa/upload/" & Rs("FilePath")
end if
%>






本站其他相關資料:




其他:
httpwebrequest在 asp 的運用

2015年2月15日 星期日

asp執行dos指令,複製檔案






dim WShShell,fs,f
Set WShShell = Server.CreateObject("WScript.Shell")
set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.CreateTextFile(Server.Mappath("C.bat"),true)

'f.write("copy " & Server.Mappath("aa.txt") & " " & Server.Mappath("bb.txt") & " /Y")
f.write("copy D:\WebSite\aa.txt D:\WebSite\bb.txt /Y")
f.close

WShShell.Run Server.Mappath("C.bat"), 1, True

set f=nothing
set fs=nothing
set WShShell=nothing




2015年2月12日 星期四

整個網頁變黑白灰階




重大災害,以示哀悼



IE 與 google chrome 適用 (推薦)

<head>

<meta http-equiv="Content-Type" content="text/html; charset=big5">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />  

<style type="text/css">
/*IE和Chrome*/
html {overflow-y:scroll;filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);-webkit-filter: grayscale(100%);}

/*IE*/
body *{
filter:gray;
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
</style>
</head>



2015年2月8日 星期日

解決 中文檔名下載變亂碼

想到用<a href="...">搭配javascript:window.open( )


成功 :
   <li><a href="/AAFile/bg/files/<%=Rs("edit_file1")%>" onclick="window.open(this.href, '', ''); return false;" title="<%=Rs("edit_file1_desc")%>(另開新視窗)"><%=Rs("edit_file1_desc")%></a><p><sup><%Response.Write "(" + Split(Rs("edit_time")," ")(0) + "更新)"%></sup></li>



參考 :


http://blog.xuite.net/vexed/tech/53799118-%E7%94%A8+%3Ca+href%3D%22...%22+%3E+%E5%AF%A6%E4%BD%9C+window.open()

File server 檔案備份設定

檔案 備份
apfile   backup














鏈結標籤< a 裡面可以加javascript


鏈結標籤< a > 裡面可以加javascript

可用在以圖片為按鈕


 <tr>
                  <td colspan="2" height="16" align="right" valign="middle"> <img src="images/arrow01.gif" width="10" height="10" alt=" ">搜
                    尋 字 串︰</td>
                  <td height="16" valign="middle" width="75%">
                    <input name=p size=20 value="網路">
                    <a onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image201','','images/search_01.gif',1)" onBlur="MM_swapImgRestore()" onFocus="MM_swapImage('Image201','','images/search_01.gif',1)">
                    <INPUT TYPE="image" name="Image201" border="0" src="images/search.gif" alt="確定搜尋" width="90" height="23"
                           align="absbottom">
                    </a> </td>
                </tr>

檔案與資料夾,建立、刪除




Set fs=Server.CreateObject("Scripting.FileSystemObject")

'來源檔案存在  ---開始---
if fs.FileExists(Src_fName) then

'建立目的資料夾,如果沒有此資料夾,則建立資料夾。
ary_folder = Split(fPath,"\")
Des_fPath = "D:\APfileBK"
Des_fName = Des_fPath & "\" & fName


For i = 0 to UBound(ary_folder)-1
Des_fPath = Des_fPath & "\" & ary_folder(i)
IF not fs.FolderExists(Des_fPath) then
'Response.Write("<br>Des_fPath : " & Des_fPath)
fs.CreateFolder(Des_fPath)
End if
Next


'刪除 '@20141015 檔案有存在,先刪除
if fs.FileExists(Des_fName) then
  'response.write("<br>Des_fName File exists! " &  Des_fName)
'Flag(true or false):預設值為false,true表可以刪除唯讀屬性 設定的檔案,若不設為 true,則遇到唯讀屬性檔案時將產 生『沒有使用權限』的錯誤 (err.number=70)
   
fileOpen.close '關閉檔  
fs.Deletefile Des_fName,true  '刪除檔案 先關閉,才能刪除
end if



'搬移
fs.CopyFile Src_fName,Des_fPath & "\" ,true 'overwrite(是否覆蓋):預設值為true




#####################################################

#T=============================
#T=FSO相關操作
#T= 判斷目錄是否存在
<%
Function IsFloderExist(strFolderName)
    SET FSO=Server.CreateObject("Scripting.FileSystemObject")
    IF(FSO.FolderExists(strFolderName))THEN
        IsFloderExist = True
    ELSE
        IsFloderExist = False
    END IF
    SET FSO=NOTHING
End Function
%>

#T= 創建目錄
<%
Function CreateFolder(strFolderName)
    SET FSO=Server.CreateObject("Scripting.FileSystemObject")
    IF(FSO.FolderExists(strFolderName) = False)THEN
        FSO.CreateFolder(strFolderName)
    END IF
    SET FSO=NOTHING
END Function
%>

#T= 刪除目錄
<%
Function DeleteFolder(strFolderName)
    SET FSO=Server.CreateObject("Scripting.FileSystemObject")
    IF(FSO.FolderExists(strFolderName))THEN
        FSO.DeleteFolder(strFolderName)
    END IF
    SET FSO=NOTHING
END Function
%>

#T= 判斷文件是否存在
<%
Function IsFileExist(strFileName) 
    SET FSO=Server.CreateObject("Scripting.FileSystemObject")
    IF(FSO.FileExists(strFileName))THEN
        IsFileExist = True
    ELSE
        IsFileExist = False
    END IF
    SET FSO=NOTHING
End Function
%>

#T= 刪除文件
<%
Function DeleteFile(strFileName)
    SET FSO=Server.CreateObject("Scripting.FileSystemObject")
    IF(FSO.FileExists(strFileName))THEN
        FSO.DeleteFile(strFileName)
    END IF
    SET FSO=NOTHING
END Function
%>