2011年10月27日 星期四

[javascript].判斷中文字的個數.(chineseCount)

客戶有一個需求: 要求使用者必需在 "姓名" 欄位裡輸入2個字以上的中文字.

google 了一下, 有3個解法, 資料來源:
http://blog.wu-boy.com/2009/01/javascript%E5%88%A4%E6%96%B7%E4%B8%AD%E6%96%87%E5%85%A8%E5%BD%A2%E5%AD%97%E6%95%B8%E6%9C%89%E5%B9%BE%E5%80%8B/


emome 的解法, 需要多 include 一個 js 檔, 所以先跳過,
我最後是使用的是 toshii 的 解法:

function chineseCount(word){
var v=0;
for(cc=0;cc < word.length;cc++){
c = word.charCodeAt(cc);
if (!(c >=32 && c <= 126)) v++;
}
return v;
}

我本來是比較偏向使用 regular pattern 的寫法,
沒有用的原因是 pattern 的寫法在 big5 編碼的網頁下,
似乎 unicode 的判斷會不正確, 固定都只傳回 0;

2011年10月25日 星期二

[SQL].資料庫中已經有一個名為 xxx 的物件。

今天用SQL建立資料表時, 發生下面的錯誤:
資料庫中已經有一個名為 PK_myTableName 的物件。

似乎是 PK_myTableName 發生重複,
想要知道是那個資料表佔用這個名字,於是我下了以下指令搜尋:

SELECT name, object_id, OBJECT_NAME(object_id) AS object_name, parent_object_id, OBJECT_NAME(parent_object_id) AS table_name
FROM sys.objects
WHERE type = 'PK' AND name LIKE '%PK_myTableName%'
ORDER BY name ASC


結果, 就會看到, 原來是之前下錯指令, 直接把 create table 的句子拿來修改為別的 table name, 沒有修改到 PK index name.


資料來源:
http://charley0405-notes.blogspot.com/2010/07/pkagrrrrf01.html

[SQL].備份和加總比較舊的不重要的Log

user 有一個需求, 希望可以看到每一個商品, 在每一個小時的流量, 所以log table 長大的速度會很快, 以"小時"為單位, 和以"日"為單為 log 的筆數會差到 24倍.

今天一早, 有一個營運中的網站掛掉, 剛好掛到去 log 取資料, 挑戰改善 log table 的資料筆數, 使用到的 SQL 指令如下:


--// 查詢, 目前的資料量.
select count(*) from DemoHitCount;


--// create 2009 log backup table.
CREATE TABLE [dbo].[DemoHitCountLogBak_2009](
[DOC_ID] [int] NOT NULL,
[hitDate] [smalldatetime] NOT NULL,
[hitCount] [int] NOT NULL
);

insert into DemoHitCountLogBak_2009
select DOC_ID, hitDate, hitCount from DemoHitCount
where year(hitDate)=2009;


--// create 2010 log backup table.
CREATE TABLE [dbo].[DemoHitCountLogBak_2010](
[DOC_ID] [int] NOT NULL,
[hitDate] [smalldatetime] NOT NULL,
[hitCount] [int] NOT NULL
);

insert into DemoHitCountLogBak_2010
select DOC_ID, hitDate, hitCount from DemoHitCount
where year(hitDate)=2010;


--// create temp table.
CREATE TABLE [dbo].[DemoHitCount_tmp](
[DOC_ID] [int] NOT NULL,
[hitDate] [smalldatetime] NOT NULL,
[hitCount] [int] NOT NULL CONSTRAINT [DF_DemoHitCount_hitCount_tmp] DEFAULT ((0)),
CONSTRAINT [PK_DemoHitCount_tmp] PRIMARY KEY CLUSTERED
(
[DOC_ID] ASC,
[hitDate] ASC
)
) ON [PRIMARY]


--// summary 2009 data.
insert into DemoHitCount_tmp
select DOC_ID, '2009/12/31' as hitDate, sum(hitCount) as hitCount from DemoHitCount
where year(hitDate)=2009
group by DOC_ID;


--// summary 2010 data.
insert into DemoHitCount_tmp
select DOC_ID, '2010/12/31' as hitDate, sum(hitCount) as hitCount from DemoHitCount
where year(hitDate)=2010
group by DOC_ID;


--// delete current log
delete from DemoHitCount
where year(hitDate)=2009;

delete from DemoHitCount
where year(hitDate)=2010;

insert into DemoHitCount
select DOC_ID, hitDate, hitCount from DemoHitCount_tmp;


--// drop temp table.
drop table DemoHitCount_tmp;


--// 測試加總的結果:
SELECT sum(hitCount) AS hCount FROM DemoHitCount WHERE DOC_ID=1



附註1: 備份 log用的 table, 由於只是放著之後備查用, 所以建議不要建 index, 因為 index 在大量筆數的情況, 是很占空間的.

附註2: 在測試機改好後, 連到客戶的主機上執行, 才發現是客戶的database 系統發生異常.

附註3: 應該有更好的解法, 我是遜卡, 什麼證照都沒有.

2011年10月24日 星期一

javascript 檢查 不可只是"文字", 僅接受"數字"或"文字+數字"

前陣子收到一個需求, 要檢查輸入的欄位的內容
不可只是"文字", 僅接受"數字"或"文字+數字".
這句話, 換句話來說就是: 輸入的內容, 一定要包含數字.

用 javascript 的 function 如下:

function mustNumericChk(chkStr) {
if(chkStr!=''){
var Pat = /[0-9]+/;
var chk = chkStr.match(Pat);
if (chk == null) {
return false;
}
}
return true;
}


說明: 上面的例子是用 match pattern 來檢查.
[0-9]+ , 加號(+) 的意思, 就是最少要出現1次.



今天又收到新的需求: 文號的部分,數字部分必須要輸入8碼。
例如: 第1234567號, 醬子是錯誤的, 最少要有8個數字.

還好, 之前是用 match 寫,
把+ 號, 換成 {8,} 就解決了, 真是神奇的 match.


今天又收到新的需求: 文號的部分,數字部分必須要輸入8碼。
例如: 第1234567號, 醬子是錯誤的, 最少要有8個數字.

還好, 之前是用 match 寫,
把+ 號, 換成 {8,} 就解決了, 真是神奇的 match.


相關文章:
Regular Expressions patterns
http://www.javascriptkit.com/javatutors/redev2.shtml

2011年10月21日 星期五

MS SQL server 建立維護計畫 範例

想幫MS SQL server 建立維護計畫來建立排程, 定時的備份資料庫,
在一般的情況下, 應該5~10分鐘之內可以設定完成.

step 1: 增加一個 T-SQL 來執行相關的 SQL 指令.



step 2: 輸入, 定時要執行的 SQL 指令.
ex:
DUMP TRANSACTION databaseName WITH NO_LOG;
BACKUP LOG databaseName WITH NO_LOG;
DBCC SHRINKDATABASE(databaseName);



step 3: 增加備分工作, 把database backup 成 .bak 檔案



step 4: 選擇要輸出的資料夾:



step 5: 增加清除檔案的工作, 來把 .bak 檔案刪除:



step 6: 設定要去刪除的資料夾位置.




step 7: 設定維畫計畫的排程, 以下是設成 12小時備份1次.




step 8: 在維護計畫, 按右鍵, 執行一次測試看看, 並檢查有沒有產生實體的.bak 檔案.

[SQL].安裝 Integration Services

想幫MS SQL server 建立維護計畫來建立排程, 定時的備份資料庫, 發生錯誤, 必需安裝 Integration Services, 相關的執行畫面如下:


step 1: 插入光碟, 選安裝.



step 2: 勾選 Integration Services



step 3: 選安裝



step 4: 完成啦!

sp_enum_sqlagent_subsystems 與維護計畫

今天, 想幫MS SQL server 建立維護計畫來建立排程, 定時的備份資料庫, 發生錯誤, 訊息如下:



查了一下, sp_enum_sqlagent_subsystems,
使用語法: sp_enum_sqlagent_subsystems
這個程序會列出執行個體中可用的子系統。

RESOLUTION(解決辦法):
To resolve this behavior, install the Integration Services service from the SQL Server 2005 CD. To do this, follow these steps:

1. Run the SQL Server Installation Wizard.
2. On the System Configuration Check page, click Next after the scan is complete.
3. In the Name box and in the Company box, enter the appropriate information, and then click Next.
4. Click to select the Integration Services check box, and then click Next.
5. Click Next, and then click Install.
6. When the installation is complete, click Next, and then click Finish.


MORE INFORMATION (更多資訊...):
SQL Server Integration Services (SSIS)
http://msdn2.microsoft.com/en-us/library/ms141026.aspx

How to create a maintenance plan
http://msdn2.microsoft.com/en-us/library/ms189953.aspx

2011年10月14日 星期五

建議使用session 內容時, 請先判斷session 內容的正確性再進行處理

下面這行指令:



當 session 消失時, 會造成錯誤, 如下:



解決方法:
使用session 內容時, 請先判斷session 內容的正確性再進行處理.

2011年10月13日 星期四

[Asp].建議使用 clng 函數 來取代 cint 函數

最近遇到一個舊系統, 因為程式裡使用了 cint 造成溢位的錯誤, 研究了一下 asp 裡的 int 內容值只可以允許 -32,768 到 32,767.

只能存到 32767, 其實還滿容易造成溢位的, 我遇到的錯誤是要挑戰把 5萬這個數字, 使用 cint 做轉換,
錯誤訊息如下圖所示:




順便, 研究一下 SQL Server 使用整數數據的精確數字數據類型。
 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  ★ bigint
 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數據(所有數字)。存儲大小為 8 個 bytes。


 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  ★ int
 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
從 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型數據(所有數字)。存儲大小為 4 個bytes。
int 的 SQL-92 同義字為 integer。


 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  ★ smallint
 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
從 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型數據。存儲大小為 2 個bytes。



 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  ★ tinyint
 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
從 0 到 255 的整型數據。存儲大小為 1 byte。



附註: 這個辦法, 不是萬能的, 修改後, 或使用 clng 後, 記得看看會不會影響到其他的變數或database裡的其他欄位.

IIS 7.0 設定顯示詳細錯誤訊息 (HTTP 500 - 內部伺服器錯誤)

現在新的主機, 裝的 IIS 都是新的版本 (7.0),
安裝好之後, 程式出錯, 只會顯示: HTTP 500 - 內部伺服器錯誤


設了半天, 都看不到程式的錯誤在那一行, 及詳細的錯誤訊息. 原來是要在:

IIS 的 站台
- 錯誤網頁(要點兩下進去)
- 編輯功能設定(在右邊動作區塊)
- 請選擇"詳細錯誤"(無論本機遠端都顯示錯誤, 預設是是本機顯示錯誤,遠端不顯示錯誤)





資料來源:
http://social.technet.microsoft.com/Forums/zh-TW/windowsserver2008zhcht/thread/22586b7a-eccc-43dc-91d5-5c9b55e09b57/

2011年10月12日 星期三

swf 檔案的修改器(SWiX)

萬一 flash 做出來的 swf 裡有內容(圖片或Action Script)要修改怎麼辦?
可以先安裝 SWiX 來幫忙. URL:http://www.swixkit.com/

假設 action script 裡有一個常數的內容是 index02.html 要修改成 index03.html



修改後, 請存成 swix 的格式, 然後再轉存成 swf 格式, 為什麼要醬子做? 經我測試, 只有醬子才能正確修改到swf 的檔案...



如果, 是要修改 frame 裡的圖片, 可以使用 swfmodify, URL: http://www.swfmodify.com/

2011年10月11日 星期二

css 在 IE 與 chrome 相衝突的寫法

假設, 您有一個 CSS 的設定如下, 在 chrome 的世界裡可以正常顯示:



但, 上面的寫法, 用 IE 來執行卻會跑版, 把該屬性刪掉, 在IE 即可正常顯示:




為了讓2個瀏覽器都ok, 改寫成下面醬子, 就都ok了:



.className {
font-size:12px; \*這一行所有瀏覽器都看得懂,所以是給Firefox套用的*\
font-size:14px \9; \*這一行則是所有的ie都看得懂*\
[;font-size:16px;] \*這一行專門給Chrome跟Safari用,不過IE6跟7也看得懂喔*\
*font-size:18px; \*這一行給ie7*\
_font-size:20px; \*這一行給ie6*\
}
上面的設定中,壞掉的印表機提醒各位要注意到順序的問題,給Google Chrome跟Apple Safari使用的css hack一定要寫在ie8的設定後面,
若是沒有依照此種順序,將會造成後續ie6與ie7的css hack設定無效


結論: 要重覆寫2次, 第2次加一個星號給他.

附註: 會衝的到原因超級多, 這個只是茫茫大海裡的一個小小的個案.

相關文章: [CSS Hack]解決IE6、IE7、IE8、Firefox的瀏覽器相容性問題!
http://sofree.cc/ie6-ie7-ie8-firefox-css-hack/

動態修改frameset cols 或 rows 大小的建議寫法

假設您有一個 frameset 的 tag 如下:



動態修改frameset cols 或 rows 大小的建議寫法如下:


綠色被註角的部份, 是不建議使用的舊寫法, 因為只相容於 IE 系列, chrome 不會跑...

Facebook 留言板