ACCESSasp中Access与Sql Server数据库区别总结

[一]接连问题(举例)

[Microsoft Access]

constr = “DBQ=c:\data\clwz.mdb; DRIVER={Microsoft Access Driver
(*.mdb)}”

[Microsoft Sql Server]

constr = “DRIVER={SQL Server};SERVER=host;DATABASE=mydata;uid=sa;pwd=”

[二]一般函数(举例)

[1]DATEDIFF(datepart, startdate, enddate)
内“datepart”参数可选如下:
设置 描述
————————————
[Microsoft Access]
年 yyyy
季度 q
月 m
平年的日数 y
日 d
一如既往周到之日数 w
周 ww
小时 h
分钟 n
秒 s

[Microsoft Sql Server]
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
hour hh
minute mi, n
second ss, s
millisecond ms

大多差不多,但只顾的是以描写的时刻

[Microsoft Access]如若加引号,如:datediff(‘d’,enddate,’2004/08/01′)
[Microsoft Sql Server]虽说不待,如:datediff(d,enddate,’2004/08/01′)

[2][Microsoft Access]备受只是因此而cstr等转移数据类型函数,而 [Microsoft
Sql Server]中则用convert或cast函数,如:
convert(varchar,[amount])等。

[3][Microsoft Sql Server] 取当前时空因故getdate等等…

[三]语句 [Microsoft Sql Server] 可以用

CASE
WHEN THEN
WHEN THEN

ELSE
END

语句,而 [Microsoft Access] 不支持。

[Microsoft Access]呢不支持between语句

[Microsoft Sql Server]虽说足以这么描绘:

[date] between @date1 and @date2

[四]查询表

[Microsoft Sql Server] 可三独与以上表join查询,而 [Microsoft Access]
好像只能两单表联接查询(待权威认可),而且[Microsoft Sql
Server]可用“*=”和“=*”连接符。

[五]而外散装题材

[Microsoft Access] 在遇见除数为零时,自动抛弃相关记录,而 [Microsoft
Sql Server]
则会报错,且查询中止。删除代码:[Microsoft Access] 可以如此描绘:

delete * from [table]

[Microsoft SQL Server]

只好如此写:

delete from [table]

多*会报错

目前日期: [Microsoft Access] 用date() [Microsoft SQL Server]
用getdate()如果数据库可能会见转换项目的话,可以 在ASP代码中增长要这样:

if inStr(constr,”Microsoft Access”) > 0 then
sqlstr=[Microsoft Access][sql代码]
else
sqlstr=[Microsoft Sql Server][sql代码]
end if

(constr–连接字符串)

然就改变了数据库,也非用改数据库查询更新代码了。
再加:access中发出true、false的字段记录,而sql里只有smallint,对诺设当access里产生“字段名=true”的,在sql
里要是转化“字段名=1”
网上多数之免费asp程序行使的凡access数据库。但是access数据库作为一个中小型的单机数据库系统,在担负访问量、数据量大之网站以时,
往往就是不堪重负了。

诚如认为,超过50M的access数据库性能就起来明显下降,超过100M以后,出错、运行缓慢的题目会见尤其突出。尽管可以如动网7.0从此那样,从程序的角度尽量优化以祈求提高性能,但是非可知从根本上解决问题。

这儿可能下微软的SQL
Server数据库就是极致可能的方法,当然也堪下其它的如Oracle、MySQL等等,但是当改写来说,由于和为微软的制品,改写成SQL
Server应该是极其朴素的法门。

一致、改写前提:

网现已安装好SQL
Server2000并且从及了SP3补丁;安装好Office套件里面的Access;使用一个支持纯文本编辑并且带有行号显示的编辑器,推荐Ultra
Edit,当然为堪下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)如果你一旦为此一个For
SQL的次,里面用到了仓储过程,那么你当发其一程序本身建立SQL数据库的道:有夫自我的SQL数据库文件,
或者sql脚论;如果无的话,采用导入access数据库的艺术是无能为力建立存储过程的,这样您不过好放弃是For
SQL的先后版本,使用相同版本的 For
Access的主次,导入access数据库,然后用底的改写方法好改变化SQL版本的次第。

老三、连接字符串的改写

只是参照动网的立段,分别是对access和SQL的

Dim ConnStr
If IsSqlDataBase = 1 Then
‘sql数据库连接参数:数据库名、用户密码、用户称、连接名(本地用local,外地用IP)
Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName
SqlDatabaseName = “dvbbs7”
SqlPassword = “”
SqlUsername = “dvbbs”
SqlLocalName = “(local)”
ConnStr = “Provider = Sqloledb; User ID = ” & SqlUsername & “; Password
= ” & SqlPassword & “; Initial Catalog = ” & SqlDatabaseName & “; Data
Source = ” & SqlLocalName & “;”
Else
‘免费用户率先破用要修改本处数据库地址并相应修改data目录中数据库名称,如将dvbbs6.mdb修改也dvbbs6.asp
Db = “data/fengerqingqing.mdb”
ConnStr = “Provider = Microsoft.Jet.OLEDB.4.0;Data Source = ” &
Server.MapPath(db)
End If
On Error Resume Next
Set conn = Server.CreateObject(“ADODB.Connection”)
conn.open ConnStr

自然你利用SQL的语,有关access的采用语句可以去,就是else后面到on error
resume next前面,变成这样:

Dim ConnStr
‘sql数据库连接参数:数据库名、用户密码、用户称、连接名(本地用local,外地用IP)
Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName
SqlDatabaseName = “dvbbs7”
SqlPassword = “”
SqlUsername = “dvbbs”
SqlLocalName = “(local)”
ConnStr = “Provider = Sqloledb; User ID = ” & SqlUsername & “; Password
= ” & SqlPassword & “; Initial Catalog = ” & SqlDatabaseName & “; Data
Source = ” & SqlLocalName & “;”
On Error Resume Next
Set conn = Server.CreateObject(“ADODB.Connection”)
conn.open ConnStr

啊可简单一些,写成这样:

Set conn = Server.CreateObject(“ADODB.Connection”)
conn.open “Provider = Sqloledb; User ID = sa; Password = 1234567;
Initial Catalog = dvbbs7; Data Source = (local);”

里头的数据库名称、数据源、用户、密码根据自己的实际情况改写一下。

季、程序的改写

即为来三三两两栽状况

1、如果你好运,拿到之是For
SQL的次序,那么一旦地方的数据库建立过程并未赶上麻烦,程序基本上就可运行了,出错的话,只是程序本身的bug,如何改不是其一帖子讨论的内容,就非赘述了。

2、大多数情形,程序本身是For Access的,与For
SQL的次差别主要是程序中采用及的SQL查询语句。注意,SQL查询语句是数据
库应用不可少的局部,不管是For SQL还是For
Aceess的程序采取的语法大体差不多,但是来局部神秘之反差,正是这些出入,造成了序的不
通用,也是咱得改的根本内容。这样一般如果修改的组成部分如下:

(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
(name is null)

(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(column as varchar)来采取。

CursorType要反化1,也就是打开数据库时只要让有第一独数字参数为1,否则记录或来得不完整。

isnull(rowname)要改成rowname = null

ACCESS的数据库被的全自动编号类型在转账时,sql
server并不曾以它如果为全自动编号型,我们要于SQL创建语句子被增长identity,表示自动编号!

中转时,跟日期有关的字段,SQL
SERVER默看smalldatetime型,我们无限好拿其成datetime型,因为datetime型的克比smalldatetime型
大。有时用smalldatetime型时,转化失败,而之所以datetime型时,转化成。

本着之两栽数据库进行操作的sql语句不全相同,例如:在针对ACCESS数据库进行去纪录时用:”delete
* from user where id=10″,而针对SQL SERVER数据库进行删除是因此:”delete user
where id=10″.

日子函数不一致,在对ACCESS数据库处理面临,可用date()、time()等函数,但对SQL
SERVER数据库处理中,只能用datediff,dateadd等函数,而非可知就此date()、time()等函数。

以对ACCESS数据库处理面临,sql语句被一直可以就此一些VB的函数,像cstr()函数,而对SQL
SERVER数据库处理面临,却无可知用。

下表比较了MicrosoftAccess数据库(MicrosoftAccess数据库:数据以及目标(如表、查询或窗体)组成的汇,与一定的主
题要用有关。MicrosoftJet数据库引擎用于管理数据。)和MicrosoftAccess项目(MicrosoftAccess项目:与
MicrosoftSQLServer数据库连接且用于创造客户/服务器应用程序的Access文件。项目文件中无包含其他数或者因数定义之目标(如
表或视图)。)的数据类型(数据类型:决定字段可具有的数据类型的字段特征。数据类型包括Boolean、Integer、Long、Currency、
Single、Double、Date、String和Variant(默认))。

MicrosoftAccess数据类型SQLServer数据类型

举凡/否(“是/否”数据类型:一种字段数据类型,用于只生半点栽可能价值(如是还是为、True或False)的字段。不允生Null值。)bit(bit数据类型:在Access项目中,一栽存储值为1或0的数据类型。接受1和0外场的整数值,但总是拿该说也1。)

数字(“数字”数据类型:MicrosoftAccess数据库中之一律种字段数据类型,用于将在数学运算被采用的数值数据。但是,若要显示或算货
币值,则应采用“货币”数据类型。)(字节)tinyint(tinyint数据类型:Access项目中的平种植占有一个字节(8号)的数据类型,用于存储
从0到255限外之平头。)

数字(整型)smallint(smallint数据类型:Access项目中的同样栽2字节(16位)数据类型,存储在-2^15(-32,768)与2^15-1(32,767)之间的数字。)

数字(长整型)int(int数据类型:Access项目中之平等种植4字节(32员)数据类型,存储在-2^31(-2,147,483,648)与2^31-1(2,147,483,647)之间的数字。)

数字(单精度浮点型)real(real数据类型:在Access项目蒙,一种近似的数值数据类型,精度也7位,正值取值范围约从1.18E-38顶3.40E+38,负值取值范围约从-1.18E-38到-3.40E+38,也得以取0。)

(无等价的数据类型)bigint(bigint数据类型:Access项目遭到之平等栽8字节(64位)数据类型,存储在-2^63(-
9,223,372,036,854,775,808)与2^63-1(9,223,372,036,854,775,807)之间的数字。)

数字(双精度浮点型)float(float数据类型:在Access项目被,一种近似的数值数据类型,精度为15号。它所蕴藏的方范围约是自从2.23E-308交1.79E+308,负值范围约是从-2.23E-308到-1.79E+308,也可以为0。)

圆(“货币”数据类型:MicrosoftAccess数据库被的如出一辙栽多少列,用于与钱币有关的算计还是其精确度极其重要的原则性计算。)
money(money数据类型:在Access项目中,用于存储货币值的数据类型,取值范围由-922,337,203,685,477.5707暨
922,337,203,685,477.5807,精确度为万分之一个币单位。)

smallmoney(smallmoney数据类型:Access项目蒙之平等种植存储货币值的数据类型,取值范围从-214,748.3648到214,748.3647,精确度为挺之一个元单位。当显smallmoney值时,会将它们四放弃五切乎寡单稍数各。)

小数/数值(decimal数据类型(Access数据库):精确的数值数据类型,用于存储-10^38-1交10^38-1的价值。可以指定数值范
围(最充分总位数)和精度(小数碰右侧边的卓绝可怜位数)。)decimal(decimal数据类型(Access项目):精确的数值数据类型,用于存储-
10^38-1届10^38-1底价值。可以指定数值范围(最特别总位数)和精度(小数沾右侧边的极致充分位数)。)

numeric(numeric数据类型:在Access项目蒙,一种植标准的数值数据类型,取值从-10^38-1交10^38-1。可以指定数值范围(最特别总位数)和精度(小数接触右侧边的极端要命位数)。)

日期/时间(“日期/时间”数据类型:Access数据库的相同种植多少类,用来存放日期与时间信息。)datetime(datetime数据类
型:在Access项目中,日期及日之数据类型,范围由1753年1月1日及9999年12月31日,精确度为三百分之一秒,即3.33毫秒。)

smalldatetime(smalldatetime数据类型:Access项目被之等同栽日期和日数额类,精度不如datetime时间数额列。数据取值范围从1900年1月1日交2079年6月6日,精确度为平分钟。)

机关编号(“自动编号”数据类型:MicrosoftAccess数据库中之同一栽字段数据类型,当朝表中补充加相同漫长新记录时,这种数据类会自行吗各级
修记下存储一个唯一的号码。可以生三种编号:顺序号、随机号和共复制ID。)(递增)int(int数据类型:Access项目受到之一模一样种4字节(32
位)数据类型,存储在-2^31(-2,147,483,648)与2^31-1(2,147,483,647)之间的数字。)(定义了
Identity属性)

文件(“文本”数据类型:MicrosoftAccess数据库被的一律种植字段数据类型。“文本”数据类型最多可分包255独字符,或者是出于
FieldSize属性指定的一个略部分的字符数。)(n)varchar(n)(varchar(n)数据类型:Access项目被之平等种而转换长的多次
据类型,最老尺寸也8,000个ANSI字符。)

nvarchar(n)(nvarchar(n)数据类型:在Access项目被,一种而变换长的数据类型,最多可含蓄4,000只Unicode字符。Unicode字符每字符占少数独字节,而且支持具有国际字符。)

备考(“备注”数据类型:在MicrosoftAccess数据库中之平等种植字段数据类型。“备注”字段最多得分包65,535只字符。)text
(text数据类型:Access项目受到的如出一辙种植长度可变的数据类型,最多只是存储2^31-1(2,147,483,647)个字符;默认长度也16。)

OLE对象(“OLE对象”数据类型:字段的数据类型之一,用于在其余应用程序中创造的、可链接或者坐(插入)到Access数据库被的目标。)
image(image数据类型:在Access项目遭到,一种植长度可变的数据类型,最多只是存储2^31-1(2,147,483,647)字节的第二前行制数
据。image数据类型用来存储BLOB(二上前制大对象),如图、文档、声音和曾编译代码。)

联合复制ID(又称之为全局唯一标识符(GUID:在Access数据库被,一栽用于建协同复制唯一标识符的16许节约字段。GUID用于标识副本、副
本集、表、记录和另外对象。在Access数据库中,GUID是依赖齐复制ID。)(GUID))uniqueidentifier
(uniqueidentifier数据类型:在Access项目遭到,16字节底大局唯一标识符(GUID)。)(仅适于SQLServer7.0或还高
版本)

跳链接(“超链接”数据类型:存储超链接地址的Access数据库字段的数据类型。地址最多好涵盖四片段,用以下语法格式编写:displaytext#address#subaddress#。)

char(char数据类型:在Access项目面临,一种永恒长度的数据类型,最多但是含蓄8,000单ANSI字符。),
nchar(nchar数据类型:在Access项目被,一栽固定长度的数据类型,最多而含蓄4,000个Unicode字符。Unicode字符每字符占
两单字节,而且支持所有国际字。),varchar,nvarchar(Hyperlink属性设为Yes)

(无等价的数据类型)varbinary(varbinary数据类型:Access项目蒙之同等种而易长的数据类型,最多而是存储8,000字节的二进制数据。)

(无等价的数据类型)smallint(smallint数据类型:Access项目蒙之均等种植2字节(16各项)数据类型,存储在-2^15(-32,768)与2^15-1(32,767)之间的数字。)

(无等价的数据类型)timestamp(timestamp数据类型:在Access项目蒙,一种植每插入或更新一行就会自动更新的数据类型。
timestamp列中之值不是datetime数据,而是binary(8)或varbinary(8),标明了数修改的各个。)

(无等价的数据类型)charnchar

(无等价的数据类型)sql_variant(sql_variant数据类型:Access项目遭到之均等栽多少类,存储除text、ntext、
image、timestamp和sql_variant类型以外的余数目类的价值。在排列、参数、变量或用户定义函数的回值备受行使。)

(无等价的数据类型)用户定义(用户定义的数据类型:在MicrosoftSQLServer数据库被,允许某列包含的数码的类型定义,由用户使用现有的系统数据类型定义。规则及默认值仅可绑定到用户定义的数据类型。)

注在Access项目或者SQLServer数据库中,前缀“n”代表“国家/地区”,意思是此数据类型是启用Unicode的。在Access数据库中,全部文本列在默认情况下还是启用Unicode的。

相关文章