共計 4217 個字符,預計需要花費 11 分鐘才能閱讀完成。
本篇內容主要講解“Access 數據庫怎么改成 SQLServer 數據庫”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“Access 數據庫怎么改成 SQLServer 數據庫”吧!
一、改寫前提:
系統已經安裝好 SQLServer2000 并且打上了 SP3 補丁; 安裝好 Office 套件里面的 Access; 使用一個支持純文本編輯并且帶有行號顯示的編輯器,推薦 UltraEdit,當然也可以使用 FrontPage2003,不過以前的版本行號顯示不太好用。
個人能力要求:會基本的 asp 語法、access 數據庫的操作、SQLServer 企業管理器的基本操作。
二、數據庫的準備
一般來說有兩種情況:
1、程序提供了 SQL 數據庫格式:有一個 MDF 文件,或者提供了創建 SQL 數據庫的 SQL 腳本文件 (后綴名為.sql)。
假如有 mdf 文件,可以用企業管理器直接附加上,假如提供的是 sql 腳本文件,那么就先用企業管理器自己創建一個 sql 數據庫,然后數據庫用企業管理器中的查詢分析器運行這個腳本創建數據庫表。
這樣建立的數據庫基本不用再去改寫什么了。
2、更多的是沒有提供 SQL 數據庫或腳本文件的,這時,就要自己來做這一切了,這也是我們這個帖子主要解決的問題。一般這樣的程序會提供一個 access 數據庫,這樣你就用企業管理器導入 access 數據庫,導入后需要改寫下面一些東西:
對照原來的 access,改寫下面的部分:
(1)sql 數據庫表是沒有自動字段的,因此原來 access 中的自動字段被轉換成了普通字段,需要手工改成標識類型,增量為 1。
(2) 所有的時間字段,假如定義了默認值,那么原來肯定是 now(),需要改成 getdate()
(3) 原來字段的默認值一般都不會自動引入,需要對照原表的字段手工添加。
(4) 由于數據庫的不同,access 和 sql 的字段類型很多轉換后就變化了,比如原來的《是否》字段會被轉換成 bit 或者 int,備注字段被轉換成 longtext,text 字段轉換成 varchar 等等,一般來說不會影響程序運行,假如有問題,我們在下面的程序改寫部分再說。
(5) 假如你要用一個 ForSQL 的程序,里面用到了存儲過程,那么你應該有這個程序本身建立 SQL 數據庫的方法:有其本身的 SQL 數據庫文件,或者 sql 腳本; 假如沒有的話,采用導入 access 數據庫的方式是無法建立存儲過程的,這樣你最好放棄這個 ForSQL 的程序版本,使用同樣版本的 ForAccess 的程序,導入 access 數據庫,然后用下面的改寫方法自己改成 SQL 版本的程序。
三、連接字符串的改寫
可參考動網的這段,分別是針對 access 和 SQL 的
DimConnStrIfIsSqlDataBase=1Then sql 數據庫連接參數:數據庫名、用戶密碼、用戶名、連接名 (本地用 local,外地用 IP)DimSqlDatabaseName,SqlPassword,SqlUsername,SqlLocalNameSqlDatabaseName= dvbbs7 SqlPassword= SqlUsername= dvbbs SqlLocalName= (local) ConnStr= Provider=Sqloledb;UserID= SqlUsername Password= SqlPassword InitialCatalog= SqlDatabaseName DataSource= SqlLocalName Else 免費用戶第一次使用請修改本處數據庫地址并相應修改 data 目錄中數據庫名稱,如將 dvbbs6.mdb 修改為 dvbbs6.aspDb= data/fengerqingqing.mdb ConnStr= Provider=Microsoft.Jet.OLEDB.4.0;DataSource= Server.MapPath(db)EndIfOnErrorResumeNextSetconn=Server.CreateObject(ADODB.Connection)conn.openConnStr 當然你使用 SQL 的話,有關 access 的使用語句可以刪除,就是 else 后面到 onerrorresumenext 前面,變成這樣:DimConnStr sql 數據庫連接參數:數據庫名、用戶密碼、用戶名、連接名 (本地用 local,外地用 IP)DimSqlDatabaseName,SqlPassword,SqlUsername,SqlLocalNameSqlDatabaseName= dvbbs7 SqlPassword= SqlUsername= dvbbs SqlLocalName= (local) ConnStr= Provider=Sqloledb;UserID= SqlUsername Password= SqlPassword InitialCatalog= SqlDatabaseName DataSource= SqlLocalName OnErrorResumeNextSetconn=Server.CreateObject(ADODB.Connection)conn.openConnStr
也可以簡潔一些,寫成這樣:
Setconn=Server.CreateObject(ADODB.Connection)conn.open Provider=Sqloledb;UserID=sa;Password=1234567;InitialCatalog=dvbbs7;DataSource=(local);
里面的數據庫名稱、數據源、用戶、密碼根據自己的實際情況改寫一下。
ASP 網站 Access 數據庫改成 SQLServer 數據庫怎么實現
四、程序的改寫
這也有兩種情況:
1、假如你幸運,拿到的是 ForSQL 的程序,那么假如上面的數據庫建立過程沒有遇到麻煩,程序基本上就可以運行了,出錯的話,只是程序本身的 bug,如何修改不是這個帖子討論的內容,就不贅述了。
2、大多數情況,程序本身是 ForAccess 的,與 ForSQL 的程序差別主要是程序中使用到的 SQL 查詢語句。注意,SQL 查詢語句是數據庫應用不可缺少的部分,不管是 ForSQL 還是 ForAceess 的程序使用的語法大體差不多,但是有一些微妙的差別,正是這些差別,造成了程序的不通用,也是我們需要修改的主要內容。這樣一般要修改的部分如下:
(1) 時間函數的問題:SQL 數據庫的時間函數與 access 不同,最常見的是取現在時間的函數,access 是 now(),SQL 是 getdate()。因此凡是在 where 子句中使用了 now() 的地方都要改成 getdate(); 注意,now() 函數在 asp 程序本身也要使用,凡是不在數據庫查詢或執行語句中使用的 now() 函數千萬不要改。
(2) 時間比較函數:datediff(d , 時間 1,‘時間 2’) 這是 access 查詢用的格式,SQl 中這些引號都要去掉,同時時間格式的前后可能加上了 #,這也要去掉。同樣這也是指在 sql 語句中的,在 asp 語句中的要保持原樣。
(3) 空值的表示:在 access 中,判斷空值一般用是否 = 來表示,但是這在 SQL 中往往出錯,假如遇到出錯的問題或者程序運行不正常,可以改成如這樣判斷:where(nameisnull)
(4) 真假值判斷:access 中可以用 =true、=false 來判斷,但是在 SQL 中就會出錯,因此在 SQL 查詢或執行語句中這類判斷要分別改成 =1、=0。注意一點:有些程序雖然寫成 =“true”,但是由于有引號,所以這個字段是字符類型的,你不能改成 =1,保持原樣即可。
以上是比較常見的改寫的地方,還有一些不太常見,假如遇到了可以在此回帖討論。
五、程序的調試
前面推薦使用帶有行號的編輯器,是因為上述的改寫不大可能是直接搜索程序源碼來做,很難找全。
我采取的方式一般這樣:數據庫改寫完成,直接調試程序,出錯后,看看出錯的提示,找到相應文件的代碼行,但是根源往往不是那行,比如出錯的語句是:conn.execute(sql),但是這句本身是沒有錯的,錯誤原因是里面的這個 sql 字符串,那就向上看這個 sql 字符串是如何生成的,按照上面所說的程序修改辦法修改。
數據庫導入以后,自動增加字段需要重寫,所有的數字類型需要增加長度,最好用 decimal。
所有的默認值都丟失了。主要是數字類型和日期類型。
所有 now(),time(),date() 要改成 getdate()。
所有 datediff(d ,time1,time2) 要改成 datediff(day,time1,time2)
有可能一些 true/false 類型不能使用,要變為 1 /0。
備注類型要通過 cast(columnasvarchar) 來使用。
CursorType 要改成 1, 也就是打開數據庫時要給出第一個數字參數為 1,否則記錄可能顯示不完整。
isnull(rowname) 要改成 rowname=null
ACCESS 的數據庫中的自動編號類型在轉化時,SQLServer 并沒有將它設為自動編號型,我們需在 SQL 創建語句中加上 identity,表示自動編號!
轉化時,跟日期有關的字段,SQLServer 默認為 smalldatetime 型,我們最好將它變為 datetime 型,因為 datetime 型的范圍比 smalldatetime 型大。有時用 smalldatetime 型時,轉化失敗,而用 datetime 型時,轉化成功。
對此兩種數據庫進行操作的 sql 語句不全相同,例如:在對 ACCESS 數據庫進行刪除紀錄時用:delete*fromuserwhereid=10 , 而對 SQLSERVER 數據庫進行刪除是用:deleteuserwhereid=10 .
日期函數不相同,在對 ACCESS 數據庫處理中,可用 date()、time() 等函數,但對 SQLServer 數據庫處理中,只能用 datediff,dateadd 等函數,而不能用 date()、time() 等函數。
在對 ACCESS 數據庫處理中,sql 語句中直接可以用一些 VB 的函數,像 cstr() 函數,而對 SQLServer 數據庫處理中,卻不能用。
到此,相信大家對“Access 數據庫怎么改成 SQLServer 數據庫”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!