於工作需要, 所以又硬著頭皮寫出以下的EXCEL VBA , 發現不錯用, 分享出來:
Private Sub Workbook_Open()
Call ClearWorkSheet
Call CopyWorkSheet
End Sub
Sub ClearWorkSheet()
Application.DisplayAlerts = False
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> "首 頁" Then
Ws.Delete
End If
Next
Application.DisplayAlerts = True
End Sub
Sub CopyWorkSheet()
Dim SRC As Workbook
Dim DES As Workbook
Dim WKS As Worksheet
'Set SRC = Workbooks.Open(ActiveWorkbook.Path & "\HKG.xls")
Set DES = ThisWorkbook
Set WKS = ThisWorkbook.Worksheets(1)
'SRC.Activate
'SRC.Worksheets.Copy BEFORE:=DES.Worksheets(1)
'SRC.Worksheets(1).Copy BEFORE:=DES.Worksheets(1)
'SRC.Close
Set fso = CreateObject("Scripting.FileSystemObject")
Dim strText As String
Dim i As Integer
Set flds = fso.GetFolder(ActiveWorkbook.Path).Files
i = 1
For Each f In flds
If f.Name <> "TARGET.xls" Then
Set SRC = Workbooks.Open(f.Path)
SRC.Worksheets.Copy BEFORE:=DES.Worksheets(1)
SRC.Close
' strText = strText & i & "." & f.Name & vbCrLf
End If
i = i + 1
Next
End Sub
2011年12月29日 星期四
2011年12月21日 星期三
C#寫入SQL字串時, 須要注意的單引號的事
商業書信時常發現有一種寫法就是Ms.Wang's .
看起來很正常, 如果Ms.Wang's 出現在程式要將這個字串寫入SQL SERVER 時, 卻發現老是出錯,寫不進入.
經過檢查, 發現是因為 問題出現在單引號上, 這個單引號會造成SQL SERVER 在解析這些字串時出現錯誤, 因為SQL SERVER 本身就是利用單引號在解析字串, 結果字串內又含有單引號造成SQL SERVER 解析出錯.
例如:
String MyStr = " Hello, This is Ms.Wang's monther ";
String MySql = "Update MyTable set Message = '" + MyStr + "' ";
當我們執行這個 SQL script 時, 經由展開, 我們發現 MySql 的內容變成.
Update MyTable set Message = ' Hello, This is Ms.Wang's monther '
有沒有發現 , 上面的這個SQL script 有三個單引號, 難怪 SQL SERVER 會出現錯誤.
這時改進的方法就是先將字串作檢查, 如果發現有使用到單引號, 就先作處理, 就是把一個單引號變成兩個, 這樣SQL SERVER 就知道, 這個是一個單引號, 而不是字串的結束符號.
String MySql = "Update MyTable set Message = '" + MyStr.Replace("'", "''") + "' ";
切記, 切記!!
看起來很正常, 如果Ms.Wang's 出現在程式要將這個字串寫入SQL SERVER 時, 卻發現老是出錯,寫不進入.
經過檢查, 發現是因為 問題出現在單引號上, 這個單引號會造成SQL SERVER 在解析這些字串時出現錯誤, 因為SQL SERVER 本身就是利用單引號在解析字串, 結果字串內又含有單引號造成SQL SERVER 解析出錯.
例如:
String MyStr = " Hello, This is Ms.Wang's monther ";
String MySql = "Update MyTable set Message = '" + MyStr + "' ";
當我們執行這個 SQL script 時, 經由展開, 我們發現 MySql 的內容變成.
Update MyTable set Message = ' Hello, This is Ms.Wang's monther '
有沒有發現 , 上面的這個SQL script 有三個單引號, 難怪 SQL SERVER 會出現錯誤.
這時改進的方法就是先將字串作檢查, 如果發現有使用到單引號, 就先作處理, 就是把一個單引號變成兩個, 這樣SQL SERVER 就知道, 這個是一個單引號, 而不是字串的結束符號.
String MySql = "Update MyTable set Message = '" + MyStr.Replace("'", "''") + "' ";
切記, 切記!!
2011年12月20日 星期二
差點讓我冒冷汗的 vs2005 unicode 問題.
由於VS2005 一直號稱沒有UNICODE 的問題, 所以我一直 對於VS2005 UNICODE 很放心的. 不料在作一次展示時. 卻發現 "堃", "浜" 等字, 寫入至 SQL SERVER 時出現 ??.
一開始以為 是 SQL SERVER 上該欄位沒有使用 NVARCHAR 的關係, 不料把欄位改成 NVARCHAR 後, 執行程式, 寫入上面兩個字時, 仍出現? .
於是我開始冒冷汗, 難道是我搞錯了嗎? 還好有Google 大神的幫忙, 最後才發現. 原來是在SQL SERVER 要寫入含有 上面提到的這些特別字時, 須要在 寫入字串的單引號前加入一個 N 字, 這樣這些字才不會變成亂碼寫入到資料庫.
例如:
UPDATE AA SET NAME = N'王堃浜' <== 如果 少了N , 則寫入到SQL SERVER 的字仍會是亂碼.
真是........
如果是用 C#, 則可以參考下面寫法:
string MySql = "UPDATE MYTABLE SET ";
MySql += " NAME = N'" + txtNAME.Text.Trim() + "' ";
MySql += " WHERE CODE = '" + txtNO.Text.Trim() + "' ";
注意上面的例子, 在字串單引號前,記得要加N指明這個是UNICODE 的字串, 這樣就可以存入UNICODE 的字元到SQL SERVER 內.
一開始以為 是 SQL SERVER 上該欄位沒有使用 NVARCHAR 的關係, 不料把欄位改成 NVARCHAR 後, 執行程式, 寫入上面兩個字時, 仍出現? .
於是我開始冒冷汗, 難道是我搞錯了嗎? 還好有Google 大神的幫忙, 最後才發現. 原來是在SQL SERVER 要寫入含有 上面提到的這些特別字時, 須要在 寫入字串的單引號前加入一個 N 字, 這樣這些字才不會變成亂碼寫入到資料庫.
例如:
UPDATE AA SET NAME = N'王堃浜' <== 如果 少了N , 則寫入到SQL SERVER 的字仍會是亂碼.
真是........
如果是用 C#, 則可以參考下面寫法:
string MySql = "UPDATE MYTABLE SET ";
MySql += " NAME = N'" + txtNAME.Text.Trim() + "' ";
MySql += " WHERE CODE = '" + txtNO.Text.Trim() + "' ";
注意上面的例子, 在字串單引號前,記得要加N指明這個是UNICODE 的字串, 這樣就可以存入UNICODE 的字元到SQL SERVER 內.
訂閱:
文章 (Atom)