我的天地

小议Access与MS SQL的差别

        这段时间没有什么项目做比较闲,但隔三岔五的老板又会安排我做点小事情,总是静不下心来认真学习。想了想,算了学习理论知识还不如尝试去点做没有以前接触过的东西,这样即学了知识又长了经验,一举两得。

        前几个月我女朋友老是唠叨钱不知道用到哪里去了,我自己也这么认为。感觉没有怎么花钱,但钱又不知不觉没了,于是我想了个办法去整个记账软件把每天的开支及收入都一一记录下来,以后就有据可依啦!用那个记账软件用了段日子,说实话弄的挺好的,尤其是报表统计那块非常的棒,直到有天软件突然弹出提示“您的试用期限已到,请注册”。都怪自己没有看清楚,我还以为是共享版的呢,自己又不愿意花钱去注册(我想搞软件的人都不愿意吧,当然我绝对支持正版哈),就想自己琢磨着设计一套出来。正好现在可支配的时间比较充裕,虽然我之前没有做过Winform的程序,但是我觉得整套小的个人记账软件应该不是问题吧,更何况我有一个很好的帮手,我女朋友是做Winform软件的,嘿嘿。

        说干就干,花了点时间来分析之前使用的那套软件,再加了点我们自己的需求,开始啦!为了便于维护我采用的是工厂模式来设计,该有的都有。数据库用的是Access,不用安装数据库服务端,方便。我想没有哪个会用MS SQL或其它需要安装服务段的数据库来做数据容器吧,要是你拿去卖的话估计一套都卖不了。在制作的过程中遇到了很多纳闷的问题,比如插入数据失败(非常简单的数据插入),我跟踪来跟踪去总是找不出原因,查看SQL语句又都是对,我整了很长的时间都没有解决。后来跟同事交流了会,他估计了下原因,可能是我Access中字段的问题。我之前用MS SQL时都有一套我自己认为比较合理的字段命名规范,难道在Access中就不行。于是我就轮流把字段名该了下,经测试真的是字段名的问题,我的用户表中密码字段用的是“PassWord”,我把它改成“PWD”之后马上就能正常运行了。在网上查了下看是怎么回事,原来“PassWord”是Access中的保留关键字不能使用,但是MS SQL中也有关键字啊,我以前怎么从来就没有遇到过类似的问题,难道是Access智能型不够强?

为了不让大家犯同样的错误,我把Access的关键字列出来,朋友们多多注意哈。

代码
-A
     
ADD
     
ALL
     Alphanumeric
     
ALTER
     
AND
     
ANY
     Application
     
AS
     
ASC
     Assistant
     AUTOINCREMENT
     
Avg
 
-B
     
BETWEEN
     
BINARY
     
BIT
     BOOLEAN
     
BY
     BYTE
 
-C
     
CHARCHARACTER
     
COLUMN
     CompactDatabase
     
CONSTRAINT
     Container
     
Count
     COUNTER
     
CREATE
     CreateDatabase
     CreateField
     CreateGroup
     CreateIndex
     Createobject
     CreateProperty
     CreateRelation
     CreateTableDef
     CreateUser
     CreateWorkspace
     CURRENCY
     CurrentUser
 
-D
     
DATABASE
     DATE
     
DATETIME
     
delete
     
DESC
     Description
     DISALLOW
     
DISTINCT
     DISTINCTROW
     Document
     
DOUBLE
     
drop
 
-E
     Echo
     
Else
     
End
     Eqv
     Error
     
EXISTS
     
Exit
 
-F
     FALSE
     Field, Fields
     FillCache
     
FLOAT, FLOAT4, FLOAT8
     
FOREIGN
     Form, Forms
     
FROM
     
Full
     
FUNCTION
 
-G
     GENERAL
     Getobject
     GetOption
     GotoPage
     
GROUP
     
GROUP BY
     GUID
 
-H
     
HAVING
 
-I
     Idle
     IEEEDOUBLE, IEEESINGLE
     
If
     IGNORE
     Imp
     
IN
     
INDEX
     
Index, Indexes
     
INNER
     
INSERT
     InsertText
     
INTINTEGER, INTEGER1, INTEGER2, INTEGER4
     
INTO
     
IS
 
-J
     
JOIN
 
-K
     
KEY
 
-L
     LastModified
     
LEFT
     
Level
     
Like
     LOGICAL, LOGICAL1
     
LONG, LONGBINARY, LONGTEXT
                 
 
-M
     Macro
     Match
     
MaxMin, Mod
     MEMO
     Module
     
MONEY
     Move
 
-N
     NAME
     NewPassword
     NO
     
Not
     Note
     
NULL
     
NUMBER, NUMERIC
 
-O
     object
     OLEobject
     
OFF
     
ON
     OpenRecordset
     
OPTION
     
OR
     
ORDER
     Orientation
     
Outer
     OWNERACCESS
 
-P
     Parameter
     PARAMETERS
     Partial
     
PERCENT
     PIVOT
     
PRIMARY
     
PROCEDURE
     Property
 
-Q
     Queries
     Query
     Quit
 
-R
     
REAL
     Recalc
     Recordset
     
REFERENCES
     Refresh
     RefreshLink
     RegisterDatabase
     Relation
     Repaint
     RepairDatabase
     Report
     Reports
     Requery
     
RIGHT
 
-S
     SCREEN
     SECTION
     
SELECT
     
SET
     SetFocus
     SetOption
     SHORT
     
SINGLE
     
SMALLINT
     
SOME
     SQL
     
StDevStDevP
     STRING
     
Sum
 
-T
     
TABLE
     TableDef, TableDefs
     TableID
     
TEXT
     TIME, 
TIMESTAMP
     
TOP
     TRANSFORM
     TRUE
     Type
 
-U
     
UNION
     
UNIQUE
     
update
     
USER
 
-V
     VALUE
     
VALUES
     
VarVarP
     
VARBINARYVARCHAR
 
-W
     
WHERE
     
WITH
     Workspace
 
-X
     Xor
 
-Y
     
Year
     YES
     YESNO

        另外一个问题就是,Access中的数据类型没有MS SQL中的那么全,习惯了用MS SQL在使用Access时经常会出现数据类型的错误。Access中时间类型字段在C#中是被定义为string类型的,刚刚我就出现了这样的问题,我在给一条SQL语句中时间类型的参数设置DBType时就报错了,因为我把它设置为DateTime类型。同样又花了我很长时间来找错误,郁闷,后来把它设为string类型就成功啦!

       总之Access和MS SQL还是有一定差别的,除了上面所讲的两方面还有其它不同的地方,比如一些内置函数、SQL语句的差别。要是以后所有的数据库都有一套标准就好了,所有数据库厂商都必须遵循该标准,到时候学会了其中一种比较流行的数据库,其它的也就触类旁通了,再也不用花很多心思去学什么Oracle、DB2、MySql等不同的数据库,只是学习下各个数据库软件操作方法就行,在转移数据库时也不会存在不兼容的问题。

posted @ 2010-03-18 09:35 小胆粗心 Views(2275) Comments(43) Edit 收藏

 回复 引用 查看   
#1楼2010-03-18 09:41 | fzxu_05      
比较好奇这个软件,楼主可不可以发给看看啊~
邮箱fzxu_05@163.com

 回复 引用 查看   
#2楼2010-03-18 09:45 | ygcao      
在字段,表名两边加上[]就不会出现那个问题了。
 回复 引用 查看   
#3楼[楼主]2010-03-18 09:53 | duncannjm      
@fzxu_05
已经发给你啦!

 回复 引用 查看   
#4楼2010-03-18 10:02 | 我想我是风      
写SQL语句都是要字段,表名两边都加上[]的,而且SQL已经有标准的
ANSI在1986年公布了第一版的SQL标准,期望在众多数据库厂商间取得更多的一致性。1989年(ANSI)又进一步推出了更为广受各界接纳的第二版(SQL标准)。国际标准化组织(International Standards Organization,ISO)也批准了SQL标准。ANSI于1992年发布了称之为SQL92(或SQL2)的升级版,并于1999年再次发布SQL99及SQL3。(ANSI)于2003年发布了下一个升级版,并把它称为SQL3(或SQL2003)。之后还有 SQL:2006 ,SQL:2008

其实是ACCESS不去支持SQL标准,而不是没有标准,你打开ACCESS,选项,表/查询,SQL Server兼容语法(ANSI 92),选中后,就可以支持SQL标准了

 回复 引用 查看   
#5楼2010-03-18 10:12 | 牛腩      
164423073@qq.com
我也想要这个软件。。呵呵。。
我的第一个ASP.NET的项目就是一个记账本,是B/S的。。放在我的空间里。。呵呵。。地址就保密啦。。很简单的。。。

现在我做一些小单子都不用Access了。。。改用sqlite了。。。原因之有一个。。。sqlite可以使用limit分页。。呵呵。。

 回复 引用 查看   
#6楼2010-03-18 10:15 | Create Chen      
麻烦楼主也给我发一份, 学习学习:)
chenhua0108@gmail.com
谢谢

 回复 引用 查看   
#7楼2010-03-18 10:17 | 问世、      
2177251@qq.com
想看看那软件.. 谢谢..

 回复 引用 查看   
#8楼2010-03-18 10:26 | Mars.Chen      
楼主干脆把那个什么软件公布出来大家看一下了。
 回复 引用 查看   
#9楼2010-03-18 10:31 | DAP      
楼主以前用的是什么记账软件呀,有空我也学着做一个自己用用,哈哈
 回复 引用 查看   
#10楼2010-03-18 10:32 | Astar      
也地给我一份吧。passvcword@126.com
 回复 引用 查看   
#11楼2010-03-18 10:35 | 大疯车      
麻烦楼主也给我发一份。。谢谢
wujiche@163.com

 回复 引用 查看   
#12楼2010-03-18 10:41 | builderman      
我也说一个,传参数的时候,是按顺序匹配的,不是按参数名
 回复 引用 查看   
#13楼2010-03-18 10:43 | Astral.Road      
-。- 其实我比较好奇 为什么上来就工厂了
 回复 引用 查看   
#14楼2010-03-18 10:49 | 双击      
引用ygcao:在字段,表名两边加上[]就不会出现那个问题了。

引用builderman:我也说一个,传参数的时候,是按顺序匹配的,不是按参数名


非常赞同的说

 回复 引用 查看   
#15楼2010-03-18 10:55 | rgqancy      
给点小小建议
SQL Server 2005 Express和SQL Server 2000 Desktop Engine这些都不要钱的,完全免费,可能最大的限制还是数据文件不能超过2G。记个小账,应该够用了。要是你的软件发展状大了,让客户买个正式版或企业版也值得吧,就算迁移也很方便。

另外,SQLServer你要搞得深,光装引擎就够了,很小巧。
SQL Server Management Studio Express去一边子去吧,用命令行的sqlcmd(它要替换osql,微软建议)命令就OK了。

看到了,在这臭拽几句,没有抨击你的意思,勿怪勿见笑。我这人说话有时不稳当。

 回复 引用 查看   
#16楼2010-03-18 10:58 | 小猪凯      
还真给自己写过记帐的程序,不过因为搞B/S为主,所以看着很烂就是了,不过还能用.记一段时间后对消费进行分析汇总比较好,比较一下钱都花在什么地方了,哪些是应该花的,哪些是不必花的.
 回复 引用 查看   
#17楼2010-03-18 10:58 | 指针为空      
我的理解,如果你的软件没有更换数据库的需求,没必要上来就工厂.
工厂是个好东西,但是我认为,工厂使用在多数据库支持上还不错.对于单一数据库没必要的.

毕竟工厂会浪费性能,而且即便是工厂了,你每种数据库的操作之间也会有差异的.

我就不求源码了,楼主要是有兴趣的话,我觉得把需求和设计思路发出来比较好.能给我等新手一些参考,也能给老手看看提提意见共同提高不是吗?

 回复 引用 查看   
#18楼2010-03-18 11:20 | 阿水      
DB4O
 回复 引用 查看   
#19楼[楼主]2010-03-18 11:23 | duncannjm      
@rgqancy
我是说,如果使用者是非技术出身,那么要装数据库,还要配,他们跟本就不知道。而如果采用Access就不用进行任何配置就可以直接使用,多么方便。

 回复 引用 查看   
#20楼[楼主]2010-03-18 11:24 | duncannjm      
@小猪凯
我的界面也好不到哪儿去,熟悉那些空间都花了我很长的时间。

 回复 引用 查看   
#21楼2010-03-18 11:43 | 张磊_larry.zhang      
用EnterpriseLibrary企业库啊
不需要改代码,只要修改下connectionStrings的providerName
就可以在odbc,oledb,oracle,sql,sqlserverCe间随便切换了
不过不支持DB2和MySql

 回复 引用 查看   
#22楼2010-03-18 11:45 | 麦舒      
引用指针为空:
我的理解,如果你的软件没有更换数据库的需求,没必要上来就工厂.
工厂是个好东西,但是我认为,工厂使用在多数据库支持上还不错.对于单一数据库没必要的.

毕竟工厂会浪费性能,而且即便是工厂了,你每种数据库的操作之间也会有差异的.

我就不求源码了,楼主要是有兴趣的话,我觉得把需求和设计思路发出来比较好.能给我等新手一些参考,也能给老手看看提提意见共同提高不是吗?

赞同。想支持多种数据库,考虑使用 ORM 吧。

 回复 引用   
#23楼2010-03-18 12:02 | xiaoguan1985[未注册用户]
也给我一个呗
 回复 引用 查看   
#24楼2010-03-18 13:00 | yexuan      
楼主明显的基本功不足。
 回复 引用 查看   
#25楼[楼主]2010-03-18 13:20 | duncannjm      
@yexuan
仁兄说的是,还望多多指教啊。

 回复 引用 查看   
#26楼2010-03-18 13:27 | pandaren      
加[内容]
建议买本access入门书看

 回复 引用 查看   
#27楼2010-03-18 13:39 | cokkiy      
用SQL CE啊,拷贝3、4个dll就可以了,又与SQL Server兼容
 回复 引用 查看   
#28楼2010-03-18 14:16 | 大石头      
支持Access,只是楼主对Access的认识不够呀,哈哈

Access算是一个比较完美的文件数据库了,当然,要是你会Access开发,那就是绝对完美了!~

要不是Jet不支持x64,我早把机器上还有服务器上的SQL卸了
单表几百万数据而已,我有办法让Access支持

 回复 引用 查看   
#29楼2010-03-18 15:39 | YJJ      
听博主一说,很有兴趣啊
邮箱是:hwqlb@163.com
谢谢!

 回复 引用   
#30楼2010-03-18 15:43 | bal12212[未注册用户]
楼主麻烦给偶发一份
igo668@163.com

 回复 引用   
#31楼2010-03-18 17:28 | ivanbobo[未注册用户]
还是不错 好耍
 回复 引用 查看   
#32楼2010-03-18 23:16 | lcs-帅      
正准备自己搞一个呢。发个来参考参考。
lcskey@qq.com

 回复 引用 查看   
#33楼2010-03-19 00:49 | 诺贝尔      

用中文字段名就没有这个问题了。

 回复 引用 查看   
#34楼2010-03-19 01:54 | Rain Shan      
发份看看啊,楼主,俺是新手,想多学习学习
anran800at126.com

 回复 引用   
#35楼2010-03-19 08:52 | oxq[未注册用户]
用ORM的NH就能搞定不同数据库
 回复 引用 查看   
#36楼2010-03-19 08:52 | 剑魔      
xubinhua888@163.com
 回复 引用 查看   
#37楼2010-03-19 08:52 | 剑魔      
发我看看 学习下
 回复 引用   
#38楼2010-03-19 09:25 | sprite03[未注册用户]
我也要个
690243968@qq.com

 回复 引用 查看   
#39楼2010-03-19 10:30 | rgqancy      
@duncannjm
你比我考虑的周到。我想的是不给用户看数据库的数据,只让他用软件查看到,现在也感觉我的建议确实有点霸王条款了。

 回复 引用 查看   
#40楼2010-03-19 11:09 | czjone      
@指针为空
工厂,不只是在多数据库有变化的时候才用的,要用的地方还是有很多的

 回复 引用 查看   
#41楼2010-03-19 11:34 | zsea      
我也要程序
yjhgef@163.com

 回复 引用 查看   
#42楼2010-08-19 16:04 | 十二月的雪      
了解
 回复 引用 查看   
#43楼2010-11-11 12:11 | 踏草风狼      
楼主,能把你的那个软件发给我吗?我也想写个记账的小软件出来,但一直没写成(技术有限),现在还是新手,呵呵~ 我的邮箱是522489575@qq.com,谢谢!
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1688657 Pj6XP5s2hNY=