Office中国论坛/Access中国论坛

标题: MDB的十宗罪. [打印本页]

作者: lwwvb    时间: 2005-8-5 02:41
标题: MDB的十宗罪.
如题.
作者: zhuyiwen    时间: 2005-8-11 21:24
有意义吗?[em08]
作者: lwwvb    时间: 2005-8-16 17:20
有,研究表明,用ACCESS做数据库最好还是用adp,用MDB不太好.先说说十宗罪: 1.表设计可以不用主键也可插入数据,养成表设计的坏习惯.2.没有临时表的概念.造成多用户临时处理数据的不便.3.数据表多时,关系线不可避免的乱.4.MDB的SQL在网络上比TSQL慢.5.非标准的SQL语法.6.嵌入式SQL害大于利.7.复合查询的重用性并不高.不如在ADP做存储过程或TSQL函数。8.C/S模式下数据库不安全.9.体积比ADP大.造成当掉的机会比MDB高.10.如果软件考虑到用其它开发工具重做时,ADP比MDB来得容易。讨论这个东西也有意义的,吸引MDB的人学ADP,也使大家认识到MDB的不足和问题。[em05]
作者: rtmx01    时间: 2005-8-23 01:07
在下认为楼主所言有对有偏拨:1.表设计可以不用主键也可插入数据,养成表设计的坏习惯.此条我认为正好增加的灵活性,此外学access者很多为非计算机专业人员,能使他们更直观的学习.2.没有临时表的概念.造成多用户临时处理数据的不便. 此条可通过用ado另创本地临时mdb库,再在库中创临时表的方式解决,只是速度上较慢.

3.数据表多时,关系线不可避免的乱. 此条甚是4.MDB的SQL在网络上比TSQL慢. 此条甚是,但为鱼(易用性,随手安装,随意用)和熊掌(安全,效率)的选择5.非标准的SQL语法. 标准sql语法较之稍复杂,不易使用6.嵌入式SQL害大于利. 此条末见得,原因同第四条7.复合查询的重用性并不高.不如在ADP做存储过程或TSQL函数。此条赞同 8.C/S模式下数据库不安全. 此条赞同9.体积比ADP大.造成当掉的机会比MDB高. 此条甚是10.如果软件考虑到用其它开发工具重做时,ADP比MDB来得容易。 不一定,定位不同,mdb本就适合短平快,与adp比起来各有所用
作者: lwwvb    时间: 2005-8-25 18:38
2.没有临时表的概念.造成多用户临时处理数据的不便. 此条可通过用ado另创本地临时mdb库,再在库中创临时表的方式解决,只是速度上较慢.>>>>>>>>>>>>> 还不如临时表方便,链接断开时,临时表是自动删除的.6.嵌入式SQL害大于利. 此条末见得,原因同第四条>>>>>>>>>>>>>>> 实践证明,ADP用TSQL有一个好处,就是SQL与窗体元素的政党分家,有利于调试和重用性.调试SQL不用打开对应的窗体元素.而且,引用窗体元素多时,用参数的SQL绝对要比用MDB的SQL好看. 10.如果软件考虑到用其它开发工具重做时,ADP比MDB来得容易。 不一定,定位不同,mdb本就适合短平快,与adp比起来各有所用>>>>>>>>>>>>>>>> 很多的开发工具,都和ADP的方式类似,如.NET和VB.更换前台时,后台的存储过程和函数就不用怎么的变了.但是用MDB,很多东西都要重写.
作者: hgt    时间: 2005-8-25 18:48
我也来说说。1.表设计可以不用主键也可插入数据,养成表设计的坏习惯. 这是为了与Excel兼容,方便将数据倒来倒去而设计的。我还没有养成表设计的坏习惯。

2.没有临时表的概念.造成多用户临时处理数据的不便. 临时表没有用过,不知道有什么用的? 3.数据表多时,关系线不可避免的乱. 对极了,非常同意。不过小型数据库没有那么多关系啊, 4.MDB的SQL在网络上比TSQL慢. 同意一半,在Internet上,OLE-DB没有ODBC那么快,不知道什么原因?但在局域网OLE-DB就比ODBC快很多? 5.非标准的SQL语法. 对极了,非常同意。但Access为了方便和兼容,不能做成标准的SQL语法。做查询,拖拉就得,语法不用学,慢慢用就会,也没有什么大问题。 6.嵌入式SQL害大于利. 对极了,非常同意。方便一处,带来的麻烦非常多,难以解决。这种懒惰思想会限制组件编程思维。对初学者害处极大。 7.复合查询的重用性并不高.不如在ADP做存储过程或TSQL函数。 对极了,非常同意。学过组件编程的人都有同感。 8.C/S模式下数据库不安全. 对极了,非常同意。就是这个问题,使Access限制在小型桌面应用。学过Delphi做3层数据库的,就会因为安全问题毫不犹豫放弃Access和ADP。 9.体积比ADP大.造成当掉的机会比MDB高. 应该这样写:MDB体积比ADP大.造成死掉的机会比ADP高。 10.如果软件考虑到用其它开发工具重做时,ADP比MDB来得容易。 学ADP要用组件函数重用的思想来学习,学MDB要用懒惰的思想拖拖拉拉控件绑架查询就得。差别是相反的。
作者: chajiangliang    时间: 2005-8-26 22:52
我是用SQL Server+ MDB 做開發﹐不用ADP最主要的原因是

1. 有些存儲過程及ADO查詢不知為何無法返回記錄﹐但MDB的通過查詢卻可以。

2. MDB可以連接各種數據源﹐統一管理比較方便﹐Refresh Link 又很容易。

3. 安全方面,因為我是在發布時﹐沒有表與查詢在MDB中(有也不會保存密碼)﹐連接語句都在代碼里﹐并且加了密﹐而且會根據不同用戶使用不同的用戶名與密碼訪問服務器, 所以安全可靠。

4. MDB可以使用工作群組加強前端的管理。

5. 我不用臨時表﹐一般用數組保存臨時數據。

6. MDB使大家容易相互交流學習。使無數門外漢因此開始編程之路。

總之﹐作為數據庫﹐ADP只是SQL Server的管理前端+Access開發環境,不是數據庫。 MDB是即可做真正的數據庫﹐又可以只做開發工具﹐不做數據庫。所以我認為用Access MDB做開發工具是好過ADP的﹐其不僅具有一般開發工具的功能﹐且具有更靈活強大的數據調試及用戶管理功能。

[此贴子已经被作者于2005-8-26 14:58:39编辑过]


作者: lwwvb    时间: 2005-8-27 04:53
1. 有些存儲過程及ADO查詢不知為何無法返回記錄﹐但MDB的通過查詢卻可以。>>>>我未遇过这种情况,很可能你是没有注意到TSQL与JET SQL的语法有些区别.很多人都会犯这种错.2. MDB可以連接各種數據源﹐統一管理比較方便﹐Refresh Link 又很容易。>>>>无可否认,ADP只能连接SQL 2K,如果要链接其它数据源,就要在代码中做, 这是ADP的弱点.3. 安全方面,因為我是在發布時﹐沒有表與查詢在MDB中(有也不會保存密碼)﹐連接語句都在代碼里﹐并且加了密﹐而且會根據不同用戶使用不同的用戶名與密碼訪問服務器, 所以安全可靠。>>>> 话说来,真正安全的数据库是3层或N层构架的数据库.ADP和MDB也是属于两层结构.>>>>密码保存在哪其实没有太大关系.一个MD5加密已经使密码面相全非了.>>>>另外,我不喜欢用MDB+ODBC+SQL 2K的一个原因是,ODBC很容易坏,我朋友发生过一次,我也发生过N次.都是很奇怪的,要重装系统才行解决.4. MDB可以使用工作群組加強前端的管理。>>>>这点,其实自己写一个更好的模块,也可以很好的做到这点.而且自己编写可以随心所欲.5. 我不用臨時表﹐一般用數組保存臨時數據。>>>>临时表毕竟与数组是有区别的.临时表可以与其它表一些做查询,数组不行.6. MDB使大家容易相互交流學習。使無數門外漢因此開始編程之路。>>>>MDB可以说是一块基石,但是我认为,MDB为什么容易交流学习,主要是简单,一个文件就可以运行.资料又多.当然,要更上一层楼,应该更上一步,向ADP进发.總之﹐作為數據庫﹐ADP只是SQL Server的管理前端+Access開發環境,不是數據庫。>>>>ADP的方式是ACCESS是前台,SQL 2K是后台.嘿嘿,不要忘记.MDB+ODBC+SQL 2K的方式,其实不过也是一样. MDB是即可做真正的數據庫﹐又可以只做開發工具﹐不做數據庫。所以我認為用Access MDB做開發工具是好過ADP的﹐其不僅具有一般開發工具的功能﹐且具有更靈活強大的數據調試及用戶管理功能。>>>>那么ADP也是真正的数据库哦.就算没有SQL 2K,也可以做开发工具.MDB中的DATAWINDOWS和ADP的DATAWINDOWS也是一样的用哦.>>>>有一点,现代的数据库开发工具,都是拆分为前台+后台的方式,象VB,DELPHI,.NET等. 其实开发工具+数据库二合为一的东西已经过时了,就如VFP一样.听说它的开发速度很高.但是局限性很大.VFP如果要用SQL 2K做数据库后台,也要用ODBC的方式.>>>>有一点意味着,软件方面,数据库和开发工具是分离了.数据库是做数据库的东西,开发工具是做开发工具的东西.二合为一,只是小,并不一定是好.
作者: chajiangliang    时间: 2005-8-27 06:14
數據庫是與開發工具分離了﹐ADP本身并不能建表﹐它不是數據庫。MDB即可象ADP一樣管理SQL 2000又可以有本地表。這是MDB與ADP的本質差別﹐當然對于只有MSDE的人﹐ADP是很好的前端工具﹐如果已有SQL2000﹐再用ADP就沒什么意義了。說到底在真正的數據庫已改為SQL2000等高端服務器時﹐ADP 與MDB 沒有什么區別﹐主要是用它簡單的VBA罷了。請教以下存儲過程為什么不能返回值:Alter PROCEDURE dbo.Identi

AS SELECT   IDENTITY (int, 1, 1) AS AA,*

INTO         #tempA

FROM           ABCselect * from #tempA另請教以下兩種ODBC的區別﹐我連接表與通過查詢用第一種做連接﹐代碼中的用Provider =SQLOLEDB;Data source=172.000.000. 210;user id=sunpo;password=pwd; initial catalog=molding.1.ODBC;DRIVER=SQL Server;SERVER=172.000.000.210;UID=SunPoWD=Pwd;DATABASE=ABC2.ODBC;DSN=molding;UID=sunpoWD=pwd;DATABASE=molding;代碼中用ADO連接應該不會有問題吧﹐至于ODBC﹐我是不太懂﹐主要是做個連接表管理數據(做排序﹐刪除等好方便).
作者: hgt    时间: 2005-8-31 04:46
存储过程没有定义返回变量,就不能返回值。ODBC连接SQL2000时,除了 select 取数据,其他写入的SQL语句,都翻译成调用SQL2000系统的存储过程执行,一行一行的追加,一行一行的更新,一行一行的删除。一行调用两个存储过程,等得我发火。以后都不用ODBC了。
作者: chajiangliang    时间: 2005-8-31 20:08
請教﹕如何使以下存儲過程返回值, 為什么臨時表需要?Alter PROCEDURE dbo.Identi

AS

SELECT   IDENTITY (int, 1, 1) AS AA,*

INTO         #tempA

FROM            sales
作者: lwwvb    时间: 2005-9-1 00:50
你上面的这个东西是用来干什么的?而且,你是想把数据返回客户端吧,对不对?
作者: chajiangliang    时间: 2005-9-1 23:43
是想返回客戶端﹐在Query Analyze中是可以得到值的﹐但在ADP中就不行。有時不一定是臨時表﹐也一樣無法返回﹐用ADO也不行﹐但MDB中的通過查詢就可以。不知所以然﹐煩請指點.謝謝!
作者: lwwvb    时间: 2005-9-2 06:12
嘿嘿,你的ADO还是菜了点.存储过程改为这样:Alter PROCEDURE dbo.Identi

ASbeginSELECT   IDENTITY (int, 1, 1) AS AA,*

INTO         #tempA

FROM           ABCselect * from #tempAendADO求#tempA的内容  Dim r As Recordset

  



  Set r = GetTSQLProc(".....")    ''''执行存储过程,返回记录集到r

  



  Set r = r.NextRecordset()



  Debug.Print r.GetString()      ''''可以看到#tempA的内容[em05]
作者: chajiangliang    时间: 2005-9-2 18:28
謝謝指點.ADO 使用了 .nextRecord 是可以返回數據(不用增加begin end)﹐ 但我的ACCESS 2000 ADP中 點擊修改后的存儲過程(增加begin end)仍然無法返回數據。另請指點 為什么要用.nextRecord? 不用他為什么會報錯? 是否真的存在兩個記錄集?
作者: lwwvb    时间: 2005-9-2 18:54
.nextRecord是求下一个记录集。当你的存储过程有N个select语句时,你就要用到这个求得下一个,下两个记录集...不用.nextrecord不是报错,而是你的第一个select语句的是不会返回记录的,它的记录集是关闭的。还有一点,当你双击ADP的存储过程时,只是默认显示第一个记录集。如果你在SQL 2K的查询分析器去运行存储过程,就会发现N个记录集。最后一点,如果真的是想提高自己,请放弃ACCESS。向delphi或.net发展。
作者: chajiangliang    时间: 2005-9-2 20:50
謝謝!我當時沒有看查询分析器的Messages, 只是發現通過查詢可以﹐而存儲過程及ADO(當然就沒用.nextrecordset)都不行﹐索性就用在MDB中用通過查詢算了。現在我的MDB在轉ADP或其他開發工具時就又解決了一個基本問題了。Access的數據庫應用開發功能上有很多方面方便過VB , Delphi,及.net. 但就是感覺控件少了些﹐而且調用了API 窗體效果又很不穩定. Access如不解決這些問題﹐我肯定要向其他開發工具發展。現在我的方法是用總結我VBA中的經驗, 盡可能將現有的程序都轉為類﹐為我向任何其他面向對象的開發工具轉移打下基礎。轉類工作我已完成過半, 并已有部分轉為了vb.net。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3