天天看點

access與SQL的差別和聯系

access與SQL的差別和聯系

         access是中小型資料庫,sql是大型的,當存儲容量達到一定程度的時候,就會明顯的感覺到他們的差別,主要是在存取速度上!

         access可以單獨的上傳下載下傳,操作它,本機不需要安裝access,而,sql的話,跟mysql相似,你必須在本機安裝sql才能在本機上操作資料庫,當然也可以通過連接配接操作網絡上的sql資料庫,操作他們必須用項對應的驅動

        Access是一種桌面資料庫,隻适合資料量少的應用,在處理少量資料和單機通路的資料庫時是很好的,效率也很高。但是它的同時通路用戶端不能多于4個。access資料庫有一定的極限,如果資料達到100M左右,很容易造成伺服器iis假死,或者消耗掉伺服器的記憶體導緻伺服器崩潰。

        SQL Server是基于伺服器端的中型的資料庫,可以适合大容量資料的應用,在功能上管理上也要比Access要強得多。在處理海量資料的效率,背景開發的靈活性,可擴充性等方面強大。因為現在資料庫都使用标準的SQL語言對資料庫進行管理,是以如果是标準SQL語言,兩者基本上都可以通用的。SQL Server還有更多的擴充,可以用存儲過程,資料庫大小無極限限制

      Access與語句SqlServer的語句文法差別

1、 Inser Into …..Select …From 語句:

在ACCESS中以下語句

INSERT INTO

PubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index) (SELECT 200201,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index FROM PubSubJectAcc WHERE PubSubJectAcc.co_type='03')

中後面"(select 200201******.co_Type='03')"中的小括号("(",")")必須去掉才能執行,如下:

INSERT INTO

PubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index) SELECT 200201,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index FROM PubSubJectAcc WHERE PubSubJectAcc.co_type='03'

在SQL SERVER 中都可以

2、 Inner Join 語句1

StrSql:='select a.user_id,a.user_opcode,b.copy_name from sysuser a inner join (syscopysuser c inner join syscopys b on c.copy_id=c.copy_id) on a.user_id=c.user_id where

a.user_opcode=''' +EdtUserOpCode.text+''' And copy_name='''+Tmpcopyname +'''';

應該改為

StrSql:='select a.user_id,a.user_opcode,b.copy_name from sysuser a inner join (syscopysuser c inner join syscopys b on c.copy_id=d.copy_id) on a.user_id=c.user_id where

a.user_opcode=''' +EdtUserOpCode.text+''' And copy_name='''+Tmpcopyname +'''';

該行代碼的檢索條件錯誤:應該把C.copy_id=C.Copy_id 改為c.copy_id=d.copy_id

注:兩種寫法都能在SQL-SERVER中運作,但c.copy_id=C.copy_id在ACCESS中不能運作

3、 Inner Join 語句2

StrSql:='select copy_year,copy_name,a.copy_id from SysCopys a inner join SysCopysUser b on a.curcopy_flag=1and a.copy_id=b.copy_id where b.user_id=' + '''' +TmpPubUserID+ '''';

改為

StrSql:='select copy_year,copy_name,a.copy_id from SysCopys a inner join SysCopysUser b on a.copy_id=b.copy_id wherea.curcopy_flag=''1'' and b.user_id=' + '''' +TmpPubUserID+ '''';

注:兩種寫法都能在SQL-SERVER中運作,但第一種在ACCESS中不能運作

4、 Inner Join語句3

SQl server 中可以執行以下語句

'SELECT distinct sysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sort From sysoption inner join sysroleoption ON sysoption.opti_id=sysroleoption.opti_idAND sysroleoption.role_id=:roleid'

但ACCESS中不能,隻能

'SELECT distinct sysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sort From sysoption inner join sysroleoption ON sysoption.opti_id=sysroleoption.opti_idWhere sysroleoption.role_id=:roleid'

5、 Update語句

Sql SerVer 中能執行但Access 中不能

'UPDATE sysuserrole SET sysuserrole.role_sort = (SELECT sysrole.role_sort FROM sysrole WHERE sysuserrole.role_id = sysrole.role_id and sysuserrole.user_id='01')'

6、 日期比較

SQL SERVER 中用

StrSql:='select copy_year,Start_month,Cur_month,Start_Flag,Start_date,End_date '

+'From SysCopys '

+'where copy_id='''+LoginCopyID+''' '

+'and start_date<='''+datetostr(LoginDate)+''' '

+'and end_date>='''+datetostr(LoginDate)+'''';

ACCESS中用

StrSql:='select copy_year,Start_month,Cur_month,Start_Flag,Start_date,End_date '

+'From SysCopys ' 

+'where copy_id='''+LoginCopyID+''' '

+'and start_date<=#'+datetostr(LoginDate)+'# '

+'and end_date>=#'+datetostr(LoginDate)+'#'

參考以上的第10個函數“GetDateStr”

7、 最大數值擷取語句

StrSql:='insert into sysRoleOption '

+'select '''+fidRoleId+''' as Role_ID,opti_id,'

+'convert(numeric,opti_id)-(convert(numeric,opti_parentid)*100)+'+ MaxOptiSort

+' as opti_Sort from sysoption where opti_parentid='''

+PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID

+''' and opti_bottom=''1'+'''';

改為

StrSql:='insert into sysRoleOption '

+'select '''+fidRoleId+''' as Role_ID,opti_id,'

+'opti_id-opti_parentid*100+'+ MaxOptiSort

+' as opti_sort from sysoption where opti_parentid='''

+PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID

+''' and opti_bottom=''1'+''''

注:兩種寫法都能在SQL-SERVER中運作,但第一種在ACCESS中不能運作