谈ADO访问不同数据库的差别

zhab2003

zhab2003

2016-02-19 17:50

今天图老师小编给大家展示的是谈ADO访问不同数据库的差别,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

   Microsoft公司提供了统一的数据访问接口ActiveX Data Object,简称ADO。但实际应用编程中,访问不同的数据库,如Access、SQL Server或VFP,会存在一些“细微”差别,常常有这样的情况,用ADO对象访问某一数据库的程序都调试通过了,但用同样的程序访问其他数据库就存在这样或那样的问题,反之也一样。这种差别就笔者来看好像没什么意义,因为都是一个公司的产品;虽然这种差别不多,但要搞清它的来龙去脉,足以使用户忙乎一阵子,a无端增加了用户的负担。下面,本文就谈谈有关SELECT语句在访问不同数据库方面的一些差别。

   在SQL Server、Access、VFP三个数据库中分别有以下的这样一个表名都为“Employee”的数据表。如图1所示。


图1

   访问日期型字段的差别

   在大多数情况下用SELECT语句分别去访问这三个数据库的这张表,没有什么区别,即你若编写了访问SQL Server数据库的SELECT语句,同样可用于访问Access数据库或VFP数据库,只要将连接的数据源改一改即可。但你若要对“出生年月”这一日期型字段进行查询的话,问题就来了,例如要查询1980年1月1日至1985年12月31日的员工资料,访问SQL Server中的数据表的语句是:

   Select * from employee where 出生年月 between '1980-01-01' and '1985-12-31'

   如果想当然地用这条语句去访问Access数据库那就大错特错了,必须加上函数DateValue(),正确的写法如下:

   Select * from employee where 出生年月between DateValue('1980-01-01')and DateValue('1985-12-31')

   如果要访问VFP日期型字段又必须采用以下这种写法:

   select * from employee where 出生年月 between {^1980-01-01} and {^1985-12-31}

   以上是SELECT语句对于访问不同数据库的日期型字段的差别,不了解这种差别,你会被搞得晕头转向,不知错在哪里。

   统计方面的差别

   对上例的Employee数据表,按部门统计总工资和人数,就用VB来编写一段统计和显示的代码,若已经建立了连接对象Conn,记录集对象RS,并已连接到某一数据源,具体代码如下所示:

   打开连接对象Conn '可打开SQL Server、Access、VFP数据源

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

   conn.CursorLocation = adUseClient '建立游标至客户端

   ……

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

   rs.Open "select 部门, sum(工资), count(*) from employee group by 部门", conn

   Set DataGrid1.DataSource = rs

   '将Rs绑定到DataGrid1控件并显示

   ……

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

   可以看到分别访问SQL Server、Access、VFP这三个不同的数据库中的Employee表所产生的统计表的字段名各不相同,(如图2、图3、图4)。对SQL Server中的数据表统计不产生字段名;对Access中的数据表统计产生了诸如“Expr1001”、“Expr1002”等的统计字段名,而对VFP 中的数据表统计则产生“sum_工资”、“cnt”的统计字段名。这虽然不是很大的问题,也不会像上例那样如果写错日期型字段的格式,程序会终止运行,但毕竟有所不同,知道了这些由来可以在编程中避免这些“细微”的差别所带来的诸多烦恼。


图2

图3

图4

  要解决这一问题,使访问不同的数据库有统一的代码和统一的显示界面,那就在写SELECT语句时一定要在统计字段后面加上as 列名,该列名可任取,如下例修改后的代码:

   ……

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

   rs.Open "select 部门, sum(工资) as 总工资, count(*) as 人数from employee group by 部门", conn

   ……
   修改后的代码执行后如图5所示,以后若想调用统计字段,只要调用“总工资”或“人数”即可。


图5

展开更多 50%)
分享

猜你喜欢

谈ADO访问不同数据库的差别

编程语言 网络编程
谈ADO访问不同数据库的差别

使用ADO.NET访问数据库

电脑网络
使用ADO.NET访问数据库

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

ado方式访问带密码数据库的方法

编程语言 网络编程
ado方式访问带密码数据库的方法

VC用ADO访问数据库全攻略

编程语言 网络编程
VC用ADO访问数据库全攻略

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

使用ADO多线程访问ACCESS数据库的开发

编程语言 网络编程
使用ADO多线程访问ACCESS数据库的开发

讲解MaxDB数据库和MySQL数据库的主要差别

编程语言 网络编程
讲解MaxDB数据库和MySQL数据库的主要差别

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

网站模型设计中的内涵和重点(二)

网站模型设计中的内涵和重点(二)

字符串多模式精确匹配(脏字/敏感词汇搜索算法)——TTMP算法之

字符串多模式精确匹配(脏字/敏感词汇搜索算法)——TTMP算法之
下拉加载更多内容 ↓