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

2013年1月10日 星期四

[aspx]access 資料庫壓縮

客戶家的資料庫,用得是 access,已經兩年,長得非常大,有 1G 這麼大。實在是會擔心,如果不小心壞了,那可是救都救不回來。還好,備份一個 access 的資料庫非常簡單,就把那個檔案複製一份,就解決了。甚至,還可以寫一個 aspx 網頁,來執行這個動作,讓我在任何地方,只要有網路,就可以用網頁來做備份,就算我用 iPad,iPhone,Android手機都可以。雖然是小題大作,一年不過做個兩、三次的事,但是,若能夠不讓客戶擔心的情況下,做完這些保險的事,也會有讓他們信任的感受。就算不是電腦自動化地來做,至少也是我自動地做,也算是自動化了啊!

但是,只有備份,仍然不夠,備份只解決了失效復原的第一步。接下來面臨的是舊資料越來越多,如果不刪除,檔案越來越大,查詢的時間越來越長,真的是無謂的浪費時間。所以,接下來完成了刪除舊資料的功能。但是,這又產生一個不滿足。雖然,資料刪了,查詢速度又回復以往的快速,但是,資料檔的大小,仍然維持一樣。著實想想真是不開心。

使用 office access,可以把 mdb 打開,然後在「主功能(左上的視窗)」->「管理」->「壓縮及修復資料庫」這個功能,把資料庫壓縮。

image

這麼做,就需要人工來做。並且要準備一台裝有 MS access 的電腦才行。

當然這工作,用指令也行,但還是要在裝有 MS access 的電腦執行指令,然後用工作排程器執行(參考)。

C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE c:\Northwind.mdb /compact

這種若要想用網頁執行,則會因為某種限制而無法執行。猜測主要是因為 MSACCESS.exe 是桌面程式。執行後就卡住,沒有把工作做完。這應該只是設定的問題,因為在開發環境是可以正常使用。但是在 IIS 的環境,就是卡住。有人提醒 service 程式也許不能與桌面互動而導致問題(參考)。我試過這方法也是失敗。
我們以前嘗試過,如果是 console 程式,是可以的執行成功的。

為了堅持要用網頁執行,尋找許久,在微軟的開發環境裡,都會安裝一個 dao。它只是一個 dll。只要把 dao.dll 複製一份在 bin 裡面,然後引用它。只要用兩行就搞定了。



dao.DBEngine dbe = new DBEngine();
dbe.CompactDatabase(target_uncompact, target_compact, null, null, null);


如果,老闆問,為什麼兩行程式要寫快兩個星期,那……,要請曹操的好朋友來回答了。


註:網路上也有用 Jet 引擎來處理的,我累了,所以有空的人可以試試。參考

2012年10月29日 星期一

[asp]使用VS2008,怎麼對 asp debug

如果使用VS2008,若直接對 asp 按下 debug,會出現

image

經過搜尋,解決方法是,

(1)設定iis,使得該頁可以直接使用。

image

(2)打開VS2008,開啟網站(檔案->開啟->網站),選擇網站所在的目錄

image

(3)附加至處理序(偵錯->附加至處理序),選擇 w3wp.exe (適用於 iis 6)

image

按下附加之後,VS2008,就會進入偵錯模式。

(4)瀏覽器跑一下 asp 網頁,方案總管會出現指令碼文件。

image

(5)雙擊 asp 文件,打開文件後,即可設中斷點,開始正式 debug。

image

 

結尾:

美中不足,不能邊改邊debug,你可以看到這文件是唯讀的。

[asp] 最近又用到 asp,幾個筆記需要記

判斷 access 資料庫某個欄位值為 null

我以為用 if cursor.fields(i).value = null then…可以判斷。我錯了。

要用 if isnull(cursor.fields(i).value) then … 才行。

 

到底權限怎麼開才能寫入?

首先,我的 os 是 windows 7,iis是 7 (應該吧…)

如果是 asp .net 的程式,IIS_USRS 這個使用者要開啟權限到寫入。

如果是 asp 的程式,IUSR 這個使用者要開啟權限到寫入。

 

如何存取utf-8 編碼的文字檔內容?

asp 直接 openTextFile 是不對的。它會按執行環境的預設值讀寫檔案。

我有改過CODEPAGE="65001",無效。

目前使用 ADODB.Stream 可。

有人提供小函數使用。

Sub Save2File (sText, sFile)
    Dim oStream
    Set oStream = CreateObject("ADODB.Stream")
    With oStream
        .Open
        .CharSet = "utf-8"
        .WriteText sText
        .SaveToFile sFile, 2
    End With
    Set oStream = Nothing
End Sub

Function ReadUtf8File(sFile)

    Set objStream = CreateObject("ADODB.Stream")
    With objStream
        .Charset = "utf-8"
        .Type=2
        .mode=3
        .Open
        .loadfromfile sFile
        ReadUtf8File=.readtext
        .Close
    End With
    Set objStream = Nothing

End Function

使用 javascript 的 escape 的文字,asp 怎麼解?

我基本上放棄了。試了幾次都不成功。這個問題很大,需要前後程式配合(html, javascript, asp)。因此會另外再寫詳細的文章。

簡單來說,我後來轉用 htmlencode。那 javascript 怎麼做 htmlencode 或 htmldecode?

以下有兩個小函數可以使用

function htmldecode(strHtmlEncode){
    var div =  document.createElement('div');
    div.innerHTML = strHtmlEncode;
    return div.innerText
}

function htmlencode(strHTML)
{
    var div = document.createElement('div');
    div.innerText = strHTML;
    return div.innerHTML;
}

asp 的程式,直接取值就好,不用解。