二、漢字亂碼問題
筆者曾經(jīng)在使用ADO向SQL Server 6.5中追加或修改數(shù)據(jù)后,發(fā)現(xiàn)查詢出來的漢字都是亂碼,最初以為是客戶端的環(huán)境有問題,后來打開服務(wù)器端的數(shù)據(jù)庫,發(fā)現(xiàn)其中的漢字也都是亂碼,費(fèi)了九牛二虎之力才找到原因:在追加和修改的過程中,ADO將字符進(jìn)行了自動翻譯(AutoTranslate),翻譯后就成了亂碼(Microsoft給我們開了一個(gè)“小小”的玩笑),解決的辦法就是不讓它亂翻譯,具體操作如下:
如果ADO通過OLE DB直接連接到數(shù)據(jù)庫,則在Connection的ConnectionString中加入字符串:AutoTranslate=False;
如果ADO通過ODBC連接到數(shù)據(jù)庫,則在配置ODBC時(shí),將“執(zhí)行字符數(shù)據(jù)轉(zhuǎn)換”一項(xiàng)的勾去掉。
三、在SQL中處理含單引號的字符串
VB在寫SQL時(shí),對字符串?dāng)?shù)據(jù)都用單引號引起來,如:
Select * from MyTable Where ID='FirstID'
若其中的FirstID為First'ID,即中間多出一個(gè)單引號,則上述寫法將導(dǎo)致錯誤,解決的辦法是將字符串中的每一個(gè)單引號用兩雙引號替換,下面的函數(shù)StrToSQL完成該功能,并用單引號將處理后的字符串引起來:
Private Function StrToSQL(ByVal strValue As String) As String
StrToSQL = "'" + Replace(strValue, "'", "'") + "'"
End Function
在寫SQL時(shí)如有字符串?dāng)?shù)據(jù),不管其中有沒有單引號,都可以這樣使用:
strValue="First'Id"
strSQL="Select * from MyTable Where ID="+StrToSQL(strValue)
四、只返回查詢結(jié)果的前N個(gè)記錄
這是個(gè)老生常談的問題,稍有這方面經(jīng)驗(yàn)的人都會想到在SQL中用"Select Top"語句來完成此功能,如訪問Access數(shù)據(jù)庫時(shí)為:
Select top 50 * From MyTable
SQL Server 7.0和SQL Server 2000中都可以這樣,但在SQL Server 6.5中不行,它不支持"Select Top",筆者采用了一個(gè)折衷的辦法,使用SQL Server 6.5的"Set Rowcount"來限制記錄數(shù),例如:
MyConnection.Execute "Set Rowcount 50"
......'執(zhí)行查詢
MyConnection.Execute "Set rowcount 0"
最后一行表示取消記錄數(shù)據(jù)限制,這句千萬不能少,因?yàn)橛涗洈?shù)的限制在MyConnection的生存期都有效,所以其它的查詢也會受此限制,最多只返回50條記錄,筆者曾深受其害。
本文中涉及的內(nèi)容的測試平臺為Visual Baisc 6.0 Enterprise+Service Pack 4。
相關(guān)推薦:2010年9月計(jì)算機(jī)等級考試成績查詢時(shí)間匯總
2011計(jì)算機(jī)等級考試二級VB考點(diǎn)及習(xí)題匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |