共计 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 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!