2011年7月5日 星期二

動態產生的select box 裡的 item 在回一頁時會跑掉

user 反應, 他的訂單資料有錯.

經反複的測試, 終於找到錯誤的原因, 這個bug 是必需輸入過錯誤的資料, 才測試的出來, 發生的因為 user 曾輸入過錯誤的資料, 造成回上一頁時, 動態產生的 select box 裡的 item 會固定變成第1個項目.


┏┓
┗■━━━━━━━━━━━━━━━━━━━━━━━
 ┃ 執行畫面 (Screens)
 ┗━━━━━━━━━━━━━━━━━━━━━━━
 ■ 1. 在下拉框(select box)輸入正確的資料, 松山區.



 ■ 2. 固定輸入錯誤的資料.



 ■ 3. 畫面一回來, 就會看到 動態產生的下拉框裡固定被帶入第1個項目, 而不是正確的 "松山區".




┏┓
┗■━━━━━━━━━━━━━━━━━━━━━━━
 ┃ 解決方式 (Solution)
 ┗━━━━━━━━━━━━━━━━━━━━━━━
 ■ 增加一個隱藏的欄位, 用來存放送出之前的內容值. 並在回一頁時, 把該值填入動態產生的下拉框之中.

 ※ 附註: 這個隱藏欄位的用法, 建議不要使用 input 的 hidden 欄位來做, 經測試 google chrome 很神奇的會抓不到該 hidden 欄位的值, 即使你在 submit 按鈕按下去之後有給他值. 建議使用 type='text' style='display:none;'

 ※ 附註: 由於 google chrome 和 firefox 都太聰明了, 會 cache 住前一頁的 image, 會造成回上一頁時, 驗證碼會是舊的, 所以要在回上一頁之後, 執行一次 reset 驗證碼的動作.

研究 google 提供的繪圖 API

有一個問卷統計的部分會用到圓餅圖,
發現使用 google 提供的 API 更快, 更方便.


┏┓
┗■━━━━━━━━━━━━━━━━━━━━━━━
 ┃ 範例 (Example)
 ┗━━━━━━━━━━━━━━━━━━━━━━━
 ■ hello world:
 → http://chart.googleapis.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World


 ■ pie chart (圓餅圖):
 → http://chart.apis.google.com/chart?chs=220x110&cht=p&chd=s:9DBBB&chl=Windows|Linux|Macintosh|iPhone|iPad


┏┓
┗■━━━━━━━━━━━━━━━━━━━━━━━
 ┃ 相關連結 (Links)
 ┗━━━━━━━━━━━━━━━━━━━━━━━
 ■ Google Chart Tools / Image Charts (aka Chart API)
 → http://code.google.com/intl/zh-TW/apis/chart/image/docs/gallery/chart_gall.html

 ■ Chart Wizard
 → http://code.google.com/intl/zh-TW/apis/chart/image/docs/chart_wizard.html
 → http://imagecharteditor.appspot.com/

2011年7月1日 星期五

MSSQL 不支援此種介面 (No such interface supported)

下面要分享的是解決問題的過程和方法.

今天發生客戶的主機, 無法進行全文檢索的指令, 在執行SQL 指令後, 會發生
"不支援此種介面" (No such interface supported) 的錯誤.




這個問題, 似乎在2年前我有處理過, 由於都沒有留下文件, 而且年代久遠已經完全忘記發生過什麼事情及如何解決, 所以重新再處理一次.

■ step 1: 先用中文字 google 看看, 發現都沒有相關的文章.

■ step 2: 改用英文字 google 看看, 看了很多篇, 似乎也無解.

■ step 3: 縮小 google seareh 的範圍, 加入 /site:microsoft.com , 似乎也無解.

■ step 4: google 無效, 改成比較正式機與測試機間的差異. 開始提出可能的假設.

■ step 4.1: 由於客戶給的Database 主機是給一般的 user 帳號, 所以很多指令無法執行, 先假設是權限造成. 請客戶用管理員帳號, 重建一次全文目錄, 結果還是一樣, 會出錯, 所以排除是權限因素.

■ step 4.2: 測試看看, 使用不同語言的詞庫來斷詞, 看看是否能成功. 結果可以, 但由於詞庫不合, 用英文來斷中文字, 會查不出資料. 可以確定原因之一是: 是中文繁體斷詞出錯.

■ step 4.3: 檢查測試機與正式機上面斷詞的相關參數, 發現 classid 不一致.

v12.0 版就是使用 SQL server 2005 的斷詞 classid 應該是:
954F1760-C1BC-11D0-9692-00A0C908146E

v2.0 就是不斷詞 classid 應該是:
1680E7C3-9430-4A51-9B82-1E7E7AEE5258


■ step 5: 請客戶設定 class id 後, 重啟 SQL Server 服務, 就大功告成, 正常運作了.

2011年6月30日 星期四

允許後台的排序與前台不同(Order By)

今天要分享的是, 讓資料在後台的排序欄位與前台不同,
解決方法有2:

───────────────────────────────────
 ■ 方案1: 用 DND
───────────────────────────────────
 ※ 缺點: 之後欄位資料調整, 要改2個(以上) 的 xml.
 ※ 優點: 現行程式不需調整.


───────────────────────────────────
 ■ 方案2: 在 xml 裡增加新的 tag
───────────────────────────────────
 ※ 缺點: 要改寫程式.
 ※ 優點: 多個節點, 都用共同一個 DSD 的情況下, 只需要使用同一支 xml.

step 1: 修改 xml 檔, 增加新的tag.


step 2: 更新 asp 程式及 select box 在使用 xsl 版型.

step 3: 大功告成了, 執行畫面如下:

2011年6月28日 星期二

Flash廣告輪播,增加 "另開視窗" 的判斷

Flash廣告輪播,增加 "另開視窗" 的判斷

Step 1:
在 flash12345.asp 增加一個 newWindow 的 tag, 讓 flash 做判斷.


Step 2:
在 flash 的 action 裡, 判斷目前的 item 的 newWindow=="N" 就設成 同視窗開啟 (_self)
反之就另開視窗 (_blank)


 ※ 附註: 這年頭, 愈來愈少人用 flash 了, 因為 jQuery 做出來的效果很棒, 也比較好維護跟修改.

2011年6月20日 星期一

[Asp].無組件上傳 (hyUpload)

先透過 .isFile 屬性來判斷要處理的欄位是檔案, 還是一般的字串.

由於是使用 iis 內建的元件, 因此在 x64 (64bit) 和 x86 (32bit) 都可以work.



● 畫面1: 選取檔案 (form.asp).
================================



● 畫面2: 上傳成功 (upload.asp).
================================
(用藍字來顯示 File 的部份, 綠色用來顯示一般的 string 資料.



● 檔案清單:
================================
\form.asp
\upload.asp
\inc\hyFileUpload.inc


● form.asp (source code):
================================
<form method="post" ENCTYPE="multipart/form-data" action="upload.asp">
<br/>userName:<input type="text" name="userName">
<br/>file:<input type="file" name="uploadFile">
<br/><input type="submit" name="submit" value="Upload">
</form>


● upload.asp (source code):
================================
dim apath
apath = server.mapPath(".") & "\"

dim xup
set xup=New HyFileUpload

'// 定義最大值, 單位Byte, 0: 不設限
xup.MaxBytesToAbort = 0
'// 定義預設上傳路徑
xup.Start apath

for each x in xup.Form
response.write "<br/> filed(" & x & ") ==>" & xup.Form(x).IsFile & vbcrlf
if xup.Form(x).IsFile then
response.write "<font color='blue'>"
response.write "<br/>+------Name:" & xup.Form(x).Name & vbcrlf
response.write "<br/>+------FileSize:" & xup.Form(x).FileSize & vbcrlf
response.write "<br/>+------FileName:" & xup.Form(x).FileName & vbcrlf
response.write "<br/>+------FileType:" & xup.Form(x).FileType & vbcrlf
response.write "<br/>+------sDefaultPath:" & xup.Form(x).sDefaultPath & vbcrlf
response.write "</font>"
else
response.write "<font color='green'>"
response.write "<br/>+------Name:" & xup.Form(x).Name & vbcrlf
response.write "<br/>+------Value:" & xup.Form(x).value & vbcrlf
response.write "</font>"
end if
next

set xup=nothing




================================
附註1: 更多相關文章 google 關鍵字下: ASP 無組件上傳
附註2: 特別感謝 e部門, 還有ken, 還有提供我這個 source code 的人.

在x64 的 iis 下執行 32-bit Applications 的方法2

這次是不透過允許 32bit 應用程式(Enable 32-bit Applications) 的情況下, 來執行 32 bit 的 com+ object, 設定方試很簡單, 在元件裡按 "內容" -> "進階" -> "允許IIS內建內容" 打勾

Component Services -> Computers -> My Computer -> COM+ Applications
Open a COM+ Application object.
Open Components.
Right-click on a class and select Properties.
Under "Advanced" there is a check box for "Allow IIS intrinsic properties".

附註1: 經測試, 在同一個畫面, 同一時間執行 32bit 和 64bit 的 object.
附註2: 我用的 TABS 是 2.1版, 1.6版或 3.0版可能也ok.


執行畫面如下:

Facebook 留言板