《视频解密》中文版(第四版) 第三章

第三章 色度空间

色度空间是使用数学方法表示一组颜色。三种最流行的表示颜色的模型是RGB(用于计算机图像);YIQ、YUV或YCbCr(用于视频系统);CMYK(用于彩色打印)。然而这三种模型中没有一种能直接反映色调、饱和度和亮度,然而经过用户简单的编程、处理,如在HIS和HSV模型中就会有所表现。

所有其他的色度空间通过照相机和扫描仪的RGB信息引申出来,RGB色度空间是所有其它色度空间的基础。


RGB色度空间

红、绿、兰(RGB)色度空间被广泛应用于计算机显示。红、绿、兰是三种基本色,这三种颜色按一定比例混合可以得到任何颜色。在三维直角坐标系中表示如图3.1。该立方体的对角线上的三原色相等,颜色从白到黑,表示的是不同灰度级。表3.1给出了100% RGB彩条信号的各数值,这个表常用于彩色视频测试。

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 图3.1 RGB色度立方体 

 


 

有效值

绿

品红

0~255

255

255

0

0

255

255

0

0

绿

0~255

255

255

255

255

0

0

0

0

0~255

255

0

255

0

255

0

255

0

表3.1 100% RGB彩条 

由于计算机的显示器采用红、绿、蓝三种元素来显示彩色,所以RGB色度表示法成为最流行的计算机图像表示的方法。选择RGB色度空间使得设计计算机显示系统架构变得简单,而且还可以利用现成的众多软件程序,所以RGB色度空间被使用好多年了。

然而,在实时图像应用领域使用GRB色度空间的效率并不高。合成任何颜色RGB三种元素必须使用相同大小的存储空间,这样一帧图像的缓存需要为每个基色开辟相同的空间,所以处理一副RGB图像的效率通常不高。例如,需要改变一个像素的亮度或色度,需要从视频缓存中读出三基色的值,计算得到当前亮度和色度,根据需要的亮度和色度,重新计算每个基色的值,然后写回到视频缓存中。如果一个系统直接存储的是像素的亮度和色度值,那么这种处理将会变得很快。

由于这样或那样的原因,许多标准视频采用一个亮度空间和两个色度空间,最常用的是YUV,YIQ和YCbCr色度空间。虽然它们互相联系,但仍有区别。

 

YUV色度空间

YUV色度空间是用于PAL制式(逐行倒相)和NTSC制式(美国国家电视标准委员会)和SECAM(赛康制)制式的复合彩色视频标准。黑白电视系统只使用亮度(Y)信息;色度信息(U和V)添加于亮度信号之外,使黑白电视仍能显示黑白信号,彩色电视可以解出彩色信号显示彩色图像。

GRB到YUV的转换方程如下( 为经过伽马校正的RGB信号,将在本章后面讨论):< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 < xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

由于 的取值范围为0~255,所以Y的取值范围为0~255,U的取值范围为0~ ,V的取值范围为0~ 。在NTSC或PAL数字编解码时这些方程系数通常会被简化使用。

8位YUV和 数据必须的取值范围必须在0~255之间,以防止数据的上溢或下溢导致数据循环问题。

如果(B’-Y)和(R’-Y)使用的全局范围,那没复合NTSC和PAL将会超出范围。实验表明,如果副载波超过20%的漂移,那么亮度信号(Y)将超过白色的最大值和黑色的最小值。尺度变换因子选择最大幅度的75%,100%彩条信号黄色和青色将超过最大的白色值。


YIQ色度空间

YIQ色度空间(第八章中将进一步讨论),从YUV衍生过来,可以用于NTSC符合彩色视频标准。(“I”代表同相分量,“Q”代表正交分量,这是在发送彩色信息时的调制手段。) 和YIQ的基本方程为:   

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 由于 的取值范围为0~255,所以Y的取值范围为0~255,I的取值范围为0~ ,Q的取值范围为0~ 。I和Q是U和V旋转 得到的。在NTSC数字编解码是这些方程的比例系数通常简化使用。

8位YUV和 数据必须的取值范围必须在0~255之间,以防止数据的上溢或下溢导致数据循环问题。


YCbCr色度空间

YCbCr色度空间是在ITU-R BT.601标准开发时提出来的,ITU-R BT.601是全球数字视频部件接口的标准(将在第四章中讨论)。YCbCr是YUV色度空间经过偏移、缩放变换得到的另一个版本。Y定义为一个8比特数字,范围为16~235,Cb和Cr被定义成范围为16~240的8比特数字。有几种YCbCr的格式,如4:4:4,4:2:2,4:1:1和4:2:0。


RGB-YCbCr方程:标清电视

R'G'B'和YCbCr(取值范围16~235)的基本转换方程为:

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 

当进行从YCbCr到 转换时, 的值的通常范围是16~235,偶尔也可能会是1~15和236~255之间的值,这是由于在视频处理和噪声干扰情况下Y和CbCr的值偶尔会在16~235和16~240之外的缘故。8位YCbCr和 数据必须的取值范围必须在0~255之间,以防止数据的上溢或下溢导致数据循环问题。

表3.2表示的是YCbCr 75%幅度的100%饱和度的彩条信号,用于彩色视频信号测试。

 


 

有效值

绿

品红

SDTV

Y

16~235

180

162

131

112

84

65

35

16

Cb

16~240

128

44

156

72

184

100

212

128

Cr

16~240

128

142

44

58

192

212

114

128

HDTV

Y

16~235

180

168

145

133

63

51

28

16

Cb

16~240

128

44

147

63

193

109

212

128

Cr

16~240

128

136

44

52

204

212

120

128












表3.2 75% YCbCr 彩条


计算机系统考虑(标清)

在计算机系统中, 数据通常的取值范围是0~255,下面的转换方程更适合应用:

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 

8位YCbCr和 数据必须的取值范围必须在0~255之间,以防止数据的上溢或下溢导致数据循环问题。


RGB-YCbCr方程:高清电视

R'G'B'和YCbCr(取值范围16~235)的基本转换方程为:

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 

当进行从YCbCr到 转换时, 的值的通常范围是16~235,偶尔也可能会是1~15和236~255之间的值,这是由于在视频处理和噪声干扰情况下Y和CbCr的值偶尔会在16~235和16~240之外的缘故。8位YCbCr和 数据必须的取值范围必须在0~255之间,以防止数据的上溢或下溢导致数据循环问题。

表3.2表示的是YCbCr 75%幅度的100%饱和度的彩条信号,用于彩色视频信号测试。


计算机系统考虑(高清)

在计算机系统中, 数据通常的取值范围是0~255,下面的转换方程更适合应用:

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客 

8位YCbCr和 数据必须的取值范围必须在0~255之间,以防止数据的上溢或下溢导致数据循环问题。


4:4:4 YCbCr格式

图3.2表示的是4:4:4格式YCbCr采样点的位置。每一个采样点都包含一个Y、Cb、Cr的值,每一个采样点在消费类应用领域为8比特数据,视频前端处理领域为10比特数据。所以每一个点需要24比特或30比特数据量。

 

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 图3.2 4:4:4采样点位置(隔行扫描图片的有效行)


4:2:2 YCbCr格式

图3.3表示的是4:2:2格式YCbCr采样点的位置。每2个水平Y采样点,包含1个Cb和Cr采样点,每一个采样点在消费类应用领域为8比特数据,视频前端处理领域为10比特数据。所以每一个点需要16比特或20比特数据量,视频格式经常使用的方法如图3.4所示。

为了显示4:2:2格式的YCbCr数据,采用差值法将缺的Cb和Cr信号补全成为4:4:4格式的YCbCr数据。

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客 

图3.3 4:2:2YCbCr采样点位置(隔行扫描图片的有效行)

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客 

图3.4 4:2:2YCbCr帧缓存格式


4:1:1 YCbCr格式

图3.5表示的是4:1:1格式YCbCr(也被称为YUV12)采样点的位置,被应用于某些消费类视频和DV视频的压缩。每4个水平Y采样点,包含1个Cb和Cr采样点,每一个采样点为8比特数据,所以每一个点需要12比特数据量,视频格式经常使用的方法如图3.6所示。

为了显示4:1:1格式的YCbCr数据,采用差值法将缺的Cb和Cr信号补全成为4:4:4格式的YCbCr数据。

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客 

图3.5 4:1:1YCbCr采样点位置(隔行扫描图片的有效行)

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客 

图3.6 4:1:1YCbCr帧缓存格式


4:2:0 YCbCr格式

不像4:2:2方式只减少水平色度信号表示方式,4:2:0将亮度信号和色度信号之比编程2:1,Cb和Cr信号在水平和垂直方向同时减少。4:2:0方式一般用于视频压缩。

图3.7到3.11表示的是各种4:2:0格式YCbCr采样点的位置,表3.3列举出了各种YCbCr格式在数字视频领域的应用。

为了显示4:2:0格式的YCbCr数据,采用差值法产生新的Cb和Cr信号补成4:4:4格式的YCbCr数据。由于缺少所需色度值,MPGE解码器不能将4:2:0的YCbCr的数据转换成4:4:4的YCbCr数据。

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 

图3.7 4:2:0YCbCr采样点位置,应用于H.261,H.263和MPEG-1(逐行扫描图片的有效行或隔行扫描的一场)

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

图3.8 4:2:0YCbCr采样点位置,应用于MPGE-2,MPEG-4第二部分和H.264(逐行扫描图片的有效行或隔行扫描的一场)

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 图3.9 4:2:0YCbCr采样点位置,应用于MPGE-2,MPEG-4第二部分和H.264 (隔行扫描图片的有效行 ,顶场地一行为1)

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

图3.10 4:2:0YCbCr采样点位置,应用于MPGE-2,MPEG-4第二部分和H.264 (隔行扫描图片的有效行,顶场地一行为0)

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 图3.11 4:2:0YCbCr采样点位置,应用于576i和DV摄像机,(隔行扫描图片的有效行)

 


YCbCr格式

25Mbps DV

50Mbps DV

100Mbps DV

MPGE-1

MPEG-2,-4Part2,H.264

H.261,H.263

480-行DV

576-行DV

480-行DVCAM

576-行DVCAM

DV-7(DVCPRO)

DVCPRO 50

Digital Betacam

D-9(Digital S)

DVCPRO HD

D-9 HD

4:4:4 Co-Sited

 

 

 

 

 

 

 

 

 

 

 

 

4:2:2 Co-Sited

 

 

 

 

 

 

 

4:1:1 Co-Sited

 

 

 

 

 

 

 

 

 

 

4:2:0

 

 

 

 

 

 

 

 

 

 

4:2:0 Co-Sited

 

 

 

 

 

 

 

 

 

 

 

表3 YCbCr 在各种数字视频领域的应用


PhotoYCC色度空间

PhotoYCC(伊士曼·柯达公司的商标)色度空间应用于图像CD光盘,它的目标是开发一个与显示设备无关的色度空间。为了达到最佳的显示效率,这个色度空间建立在ITU-R BT.601和BT.709基础之上。

从RGB到PhotoYCC的编码过程假设采用的是符合CIE标准 光源,该图像采集系统的光谱灵敏度正比于BT.709规范选定的色彩匹配功能。不同于计算机显示系统,RGB的值可以取负值。PhotoYCC包含的色度超出了BT.709的色域;超出部分编码使用的是负值的色度值。


RGB到PhotoYCC

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 

作为一个例子,20%灰度值(R,G,B=0.2)将在PhotoCD磁盘上记录如下的值:

Y=79

C1=156

C2=137


PhotoYCC到RGB

由于PhotoYCC试图保留大动态范围的图片信息,PhotoYCC图片的解码需要选择适当的色度空间和动态范围以满足输出设备的显示。所以解码方程并不是编码方程的反过程。下面的方程产生的RGB信号比较适合CRT显示,假设编码图像和显示图像是统一和相关的。

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

HSI,HLS和HSV色度空间

HIS(色度、饱和度、亮度)和HSV(色度、饱和度、值)色度空间开发于人造色,用于人类视觉系统感知和解释颜色。它们用于手动指定颜色,也用于现在很少使用的视觉颜色制定和Pantone配色系统。这些色度空间只限于有兴趣的历史探讨。HLS(色度,亮度,饱和度)类似于HIS;单词lightness和intensity意义相同。

HIS和HSV的不同之处是计算亮度分量的方法(I或V),这决定了亮度信号(I或V)和色度信号的动态取值范围。HIS色度空间最佳应用环境是卷积、均衡、直方图等传统的图像处理领域,由于I对R、G、B依赖程度相同,所以这些操作亮度值的计算相当方便。由于HSV的饱和度有更大的动态范围,HSV色度空间适合于色度和饱和度操作(颜色变换或色度调整)。

图3.12是HSV色度空间单六角锥体模型。六角锥的最高点V=1,亮度最大值。六角锥的底点V=0,代表黑色。H通过与垂直轴(V)的垂直平面里与S角度来度量,H相差 的点是互补色,红色是 。S的值用斜率表示,范围从0(在V轴的原点)到1(六角锥的边界)。在V=0的点S可以取0~1之间的任何值。在S= 0时,V= 1代表白色。在S=0时,V的中间值代表灰色。注意,当S=0时,H可取任何值。从艺术的角度看,V=1,S=1时,任何颜色都是纯色(它的颜色取决于H值)。在V值不变时,增加白色分量将降低S分量值;S值不变时,增加黑色分量将降低V分量值。通过降低S和V分量将改变色调。表3.4列举出了,75%幅度的HSV100%饱和度的各彩条信号的值。

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 图3.12 HSV色度空间的单六角锥模型

 


 

有效范围

绿

品红

H

-

-

S

0~1

0

1

1

1

1

1

1

0

V

0~1

0.75

0.75

0.75

0.75

0.75

0.75

0.75

0

表3.3 75% HSV彩条信号

 

图3.13表示的是HIS色度空间的双六角锥模型。六角锥的最高点I=1,代表白色;最低点I=0,代表黑色。H通过与垂直轴(I)的垂直平面里与S角度来度量,H相差 的点是互补色,红色是 (考虑HSV模型,我们依照泰克公约改变兰色位于 )。S值范围从0到1表示从垂直轴I到六角锥的表面。除了S=1,I=0.5时,S=0时灰度可取任意值。表3.5列举了75%幅度的HSI100%饱和度的各彩条信号的值。

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 图3.13 HIS色度空间的双六角锥模型 


 

有效范围

绿

品红

H

-

-

S

0~1

0

1

1

1

1

1

1

0

I

0~1

0.75

0.375

0.375

0.375

0.375

0.375

0.375

0

表3.4 75% HSI彩条信号


三原色色度图

一个正常视力人类色域感知图如图3.14所示(1931年CIE观察者标准)。这张图的数学基础在1960年和1976年进行了完善;NTSC电视系统仍以1931年的标准为基础。

视觉颜色感知的度量是采用CIE规定的3种基本色的组合:波长700nm的红色,波长546.1nm的绿色和波长435.8nm的兰色。这些基本色以及有这些基本色的组合产生的其它纯色组成了图3.14中的边界曲线(叫做光谱轨迹)。

光谱轨迹的两端(红色和兰色)以一条直线连接,代表紫色,它是红色和兰色混合而成的。由整个边界线组成平面包含了所有的颜色,这些颜色可以通过混合三种基本色的不同组合产生。颜色越靠近边界线,饱和度越高;从边界线内部越靠近中部颜色越浅,中心为白色。图中的任何一点,表示唯一一种颜色,可以用x,y坐标表示。

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 图3.14 CIE 1931年标准色度图 

在CIE系统中,红、绿、兰的亮度被叫做三色刺激值,用大写的X,Y,Z表示,它们的值表示三基色的相对数量。

图3.14的坐标量有三激值推导得到:

坐标量x,y,z叫做色度坐标,它们加起来的值为1。z可以表示为x和y导出,所以只用x和y就可以表示所有颜色,色度图可以认为是2维的。

通常情况下,一个显示器定义三个(x,y)坐标量来定义它的三个基色。三个坐标点(x,y)所形成的封闭三角形,成为了者显示器可以显示的色度图。如图3.15所示,图中对NTSC、PAL和典型的油墨和染料色度进行了对比。注意任何3色装置都不能产生所有的颜色,这也是电视图像不能达到自然图像一样效果的缘故。

另外,由于纯白色不能获得或合成,显示器一般将某个坐标(x,y)定义成白色。白颜色定义从吸色器获取或者由三基色分量相同时产生的,所以会有阴影。1931年CIE标准色度图中不包含亮度信息,但可以用一条垂直与(x,y)平面的直线表示。饱和度越低的颜色,越接近于色度图的中部。

1953年指定的NTSC制式三原色分量和参考白色(CIE C标准光源)的色度值分别是:

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 由于不同的视频规范应用不同的三元基色和参考白色标准,当视频源和显示器的色度标准不匹配时,例如在高清电视上显示480i或480p的节目,或者在NTSC制式的电视上显示高清电视节目,显示器就会出现小的色差。这些小色差可以通过简单的3×3阵列乘法器解决,将在第7章中详细讨论。


RGB色度空间详述

当处理非RGB色度空间(如YIQ,YUV或YCbCr)信息时,必须注意,复合值产生的结果在RGB色度空间是无效的。无效是指RGB的各元素是在归一化的RGB之外,RGB要限制于(1,1,1)。

例如,对于GRG规范化的值(1,1,1),计算得到YCbCr的值是(235,128,128)。如果由Cr、Cb计算得到的YCbCr的值是(235,64,73),由此得到的RGB值为(0.6,1.29,0.56),这里绿色分量就超过限定值1了。

图3.16显示了归一化的RGB色度空间转换成YCbCr色度空间图。从图中可以看到许多Y、Cb,Cr计算得到的RGB值都是非法的;这些YCbCr值必须经过处理,使得在向RGB色度空间转换时得到有效的RGB值。

为获得最佳的结果,使用固定亮度和固定色度─Y固定时,Cb、Cr的最大值为色度无效之前的Cb、Cr值。色度常量的规则是从复合变量CbCr无效的地方开始向CbCr原点方向移动,直到由YCbCr计算得到的RGB无效为止。

当从非RGB色度空间向RGB色度空间转换时,考虑到数字电路的处理特性,必须注意色度空间转换时防止循环上溢或者下溢。8位精度的RGB值在小于0时设置为0,在大于255时设置为255。

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 图3.16 受限RGB色度空间转换成YCbCr色度空间三维图


伽马校正

大多数CRT显示器的传递函数与输入信号幅度的指数幂(指伽马)。高亮度信号将扩张,低亮度信号就收缩(见图3.17)。由于人眼对相同强度变化的亮度具有基本相同的敏感度,这对抑制噪声是有好处的。在伽马矫正在视频传输之前,传输到显示器的视频的亮度信号是一条近似的直线(图3.17的灰线),传输时还会降低噪声。

为了最大限度地减少图像的暗区噪声,现代的视频系统限制在黑色区域的增益曲线。这项技术限制了接近黑色区域的增益,其他区域的增益曲线保持了正切连续性。

虽然视频标准假设显示器的伽马指数为2.2,但对于CRT显示器的伽马指数更接近如2.5。这个指数对于在黑暗环境观看下更合适,在明亮环境中更适合使用的伽马指数是1.14(2.5/2.2)。通常会根据上述情况调整伽马曲线,使显示器视频看起来更接近于电影视觉。

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 图3.17 伽马效应


早期NTSC制式系统

最早期的NTSC系统假设显示器具有简单的传递特性,伽马系数设为2.2。RGB的各数值规范到0~1:

《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客
《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客
《视频解密》中文版(第四版) 第三章 - 生翼 - 生翼的博客

 虽然PAL和SECAM制式的伽马系数是2.8,但是现在[1/0.45]的伽马系数变成了通用的系数。所以上面的变换方程现在也用于PAL和SECAM制式的576i和576p视频系统。


非CRT显示器

对于像LCD、LCOS、DLP和等离子这种不是基于CRT的显示器,它们的显示传递函数和CRT显示器不同。为了使接口简单,这些电子设配设计成可以接收标准伽马校正的视频,然后再将视频进行补偿变换以适合它们显示。


恒定亮度问题

由于伽马校正和矩阵运算的顺序不正确,U和V(或Cb和Cr)信号就会影响亮度分量信号(Y)。当U和V信号的幅度超出有效范围时,将导致亮度信号的超出范围,从而视觉出错。这可能是由于U和V信号的带宽限制或者错误设置了U、V信号的增益。

对于低频谱颜色是没有问题的,但当颜色频谱高时,U、V分量将消失, 分量变小到至等于Y分量。


参考资料

1、Benson, K. Blair, Television Engineering Handbook. McGraw-Hill, Inc., 1986.

2、Clarke, C.K.P., 1986, Colour Encoding and Decoding Techniques for Line-Locked Sampled PAL and NTSC Television Signals, BBC Research Department Report BBC RD1986/2.

3、Devereux, V. G., 1987, Limiting of YUV digital video signals, BBC Research Department Report BBC RD1987 22.

4、EIA Standard EIA–189–A, July 1976, Encoded Color Bar Signal.

5、Faroudja, Yves Charles, NTSC and Beyond. IEEE Transactions on Consumer Electronics, Vol. 34, No. 1, February 1988.

6、ITU-R  BT.470–6, 1998, Conventional Television Systems.

7、ITU-R BT.601–5, 1995, Studio Encoding Parameters of Digital Television for Standard 4:3 and Widescreen 16:9 Aspect Ratios.

8、ITU-R BT.709–5, 2002, Parameter Values for the HDTV Standards for Production and International Programme Exchange.

9、Photo CD Information Bulletin, Fully Utilizing Photo CD Images–PhotoYCC Color Encoding and Compression Schemes, May 1994, Eastman Kodak Company.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Access2000中文版高级编程 目录 第一部分 编程基础 1 第1章 宏与代码 3 1.1 何时使用代码代替宏 4 1.1.1 何时用宏 4 1.1.2 何时用代码 4 1.2 宏到代码的转换 5 1.2.1 使用DoCmd对象 5 1.2.2 与宏命令等价的代码 7 1.3 将现有宏转换为代码 8 1.4 小 结 12 第2章 使用VBA编写代码 13 2.1 编程初步 13 2.1.1 使用代码模块 14 2.1.2 声明变量 17 2.1.3 声明过程 21 2.1.4 控制程序流 27 2.1.5 代码注释 30 2.1.6 错误处理 30 2.1.7 本书的编程风格 31 2.2 VBA初步 31 2.2.1 对象基础 31 2.2.2 使用对象浏览器 32 2.3 使用对象编程 34 2.3.1 关键字Public 35 2.3.2 关键字Private 35 2.4 使用属性和方法 35 2.4.1 使用现有的属性 35 2.4.2 使用现有的方法 38 2.4.3 使用命名参数 38 2.4.4 将对象赋值给变量 39 2.5 使用集合 41 2.5.1 计算元素的数量 42 2.5.2 访问集合元素 42 2.5.3 对集合元素循环 43 2.6 定制窗体 44 2.6.1 编写定制的属性 45 2.6.2 编写值为对象的属性 48 2.6.3 编写定制的方法 48 2.7 编写类模块 49 2.7.1 创建外界支持的对象 49 2.7.2 创建类模块 50 2.7.3 使用类模块 52 2.8 小 结 54 第3章 做出选择:MDB或ADP,DAO或ADO 55 3.1 使用MDB还是ADP 55 3.1.1 两者各自用到的对象 56 3.2 使用DAO还是ADO 58 3.3 小 结 60 第4章 使用Access集合 61 4.1 创建定制的集合 61 4.1.1 定义新集合 62 4.1.2 添加集合元素 62 4.1.3 删除集合元素 63 4.2 比较定制的集合和数组 64 4.2.1 创建整数集合 64 4.2.2 创建整数数组 65 4.2.3 集合的高级用法 66 4.3 访问Access对象模型 66 4.3.1 使用Application对象 67 4.3.2 使用References集合 80 4.3.3 使用Forms和Reports集合 80 4.4 通过编程实现同一窗体的多个副本 83 4.4.1 支持多窗体实例 84 4.4.2 检查Employees窗体的代码 84 4.4.3 自动关闭Employees窗体 86 4.5 小 结 87 第5章 使用DAO 88 5.1 理解DAO 88 5.1.1 了解数据库的内部构造 89 5.1.2 DAO初步 90 5.1.3 进入数据库 90 5.1.4 检查数据库 92 5.1.5 检查表的属性 93 5.1.6 检查查询类型 94 5.2 使用DAO创建数据库 95 5.2.1 创建Database对象 96 5.2.2 复制表结构 99 5.2.3 使用Field对象 102 5.2.4 复制查询 102 5.2.5 复制关系 104 5.2.6 复制数据 106 5.3 使用事务加快处理速度 108 5.4 使用定制的属性 109 5.5 小 结 111 第6章 ActiveX数据库对象 112 6.1 查看对象模型 112 6.1.1 ADODB 2.1对象模型 114 6.1.2 ADOX 2.1 for DDL and Security对象模型 115 6.1.3 JRO 2.1对象模型 115 6.2 引用类型库 115 6.3 打开数据库的连接 118 6.3.1 与当前数据库连接 118 6.3.2 与另一个数据库连接 119 6.4 使用ADO创建记录集 120 6.4.1 打开简单的记录集 120 6.4.2 循环搜索和编辑记录集 122 6.4.3 创建永久记录集 124 6.4.4 使用RecordCount, BOF和EOF属性 125 6.4.5 检查记录集支持的操作 126 6.4.6 复制记录集 126 6.4.7 书签 126 6.5 使用ADO查询 127 6.5.1 创建新查询 127 6.5.2 创建参数查询 128 6.5.3 针对参数查询打开记录集 128 6.5.4 执行批量查询 129 6.5.5 修改现有的查询 130 6.5.6 删除查询 131 6.6 用ADO操作表 131 6.6.1 查看Tables集合 131 6.6.2 使用字段和索引创建新表 133 6.6.3 通过加入索引来修改现有表 136 6.7 小 结 136 第7章 使用VBA处理Access中的错误 138 7.1 Access中的错误消息 138 7.2 使用错误处理程序的不同方法 139 7.3 Access运行阶段时的错误处理 139 7.3.1 使用On Error命令 139 7.3.2 使用Exit Sub|Function命令 141 7.3.3 使用Resume, Resume Next和Resume LineLabel 141 7.4 使用ERR和 ERROR对象 145 7.4.1 Err对象的Clear方法 145 7.4.2 Err对象的Raise方法 146 7.5 使用Errors集合 149 7.6 创建用户定义的错误 154 7.7 使用定制的错误日志追踪错误 156 7.7.1 错误日志例程的声明节 156 7.7.2 调用错误日志的错误处理程序的示例 157 7.7.3 每个错误的跟踪信息 158 7.7.4 检查实际的错误日志代码 159 7.7.5 首先记录到后端,必要时记录到前端 162 7.7.6 使用错误处理程序更新后端 163 7.8 创建集中式错误处理例程 165 7.9 错误处理问题的最后回顾 171 7.9.1 注意环境开关 171 7.9.2 使用错误处理程序回卷事务 174 7.9.3 使用窗体的On Error事件 175 7.9.4 嵌套错误处理程序 177 7.9.5 错误处理的新选项 177 7.10 小 结 178 第二部分 操作和显示数据 179 第8章 用查询最大限度地利用数据 181 8.1 Access使用查询的位置 181 8.1.1 在窗体或报表的记录源属性中使用查询 182 8.1.2 设置用户使用查询的权限 183 8.1.3 使用命名约定和查询文档 185 8.2 运用选择查询:使用查询设计网格 187 8.2.1 表的联接 188 8.2.2 同一个表使用两次(自联接) 189 8.2.3 使用Access的自动查阅功能 191 8.3 运用操作查询:力量的源泉 193 8.3.1 生成表查询(SELECT INTO) 193 8.3.2 追加查询 194 8.3.3 更新查询(UPDATE..SET) 195 8.3.4 删除查询(DELETE) 195 8.4 使用高级的查询操作 195 8.4.1 总计查询 195 8.4.2 在单独或所有选项中使用联合查询 198 8.4.3 嵌套查询 198 8.4.4 子查询 200 8.4.5 产生关于对象的查询(DDL) 200 8.5 用VBA增强功能 200 8.5.1 用VBA创建更快的查询 200 8.5.2 窗体查询 201 8.5.3 生成临时的查询对象QueryDef 210 8.5.4 使用DoCmd对象的RunSQL方法 211 8.5.5 在VBA中实现参数查询 211 8.6 用查询产生报表与窗体 212 8.7 用查询解决问题 213 8.7.1 分组以获得百分比 213 8.7.2 查找并删除重复的记录 215 8.7.3 用组的嵌套彻底解决问题 217 8.7.4 区分新旧记录 217 8.7.5 在交叉表查询中使用“总计”行 220 8.8 查询过程的结构 224 8.8.1 定义查询 224 8.8.2 编译 224 8.8.3 准备执行计划(优化) 225 8.9 Jet的优化方法 225 8.9.1 应用Rushmore技术 225 8.9.2 检查群聚的基本索引 226 8.9.3 使用预读功能 228 8.9.4 用SetOption命令在注册表中设置Jet 228 8.10 优化技术 230 8.10.1 用表关系提高性能 230 8.10.2 添加索引 230 8.10.3 改变数据库结构以提高性能 231 8.10.4 优化联接性能 232 8.11 使用非常规的优化技术 232 8.11.1 性能调整的陷阱 232 8.11.2 诊断慢速查询 232 8.11.3 用查询设计网格以解决模糊字段的引用问题 233 8.12 使用分析器向导 233 8.12.1 表分析器向导 234 8.12.2 性能分析器向导 234 8.12.3 文档管理器 236 8.13 小 结 236 第9章 创建功能强大的窗体 237 9.1 增强窗体性能 237 9.1.1 增强窗体性能 237 9.2 使用Access 2000最新的窗体特性 238 9.2.1 使用窗体的记录集属性 238 9.2.2 使用Dirty事件 240 9.3 利用其他窗体特性 241 9.3.1 指定启动的Splash Screen窗体 241 9.3.2 使用窗体的背景属性 241 9.4 利用Openargs和tab属性重用窗体执行标准任务 244 9.5 增强选项卡窗体的性能 254 9.6 小 结 256 第10章 用控件扩展窗体的功能 257 10.1 为窗体中的字段设置查阅属性 257 10.2 充分利用组合框 259 10.2.1 使用组合框向导 259 10.2.2 在向导外对组合框编程 261 10.2.3 使用联合查询以显示一个或所有记录 263 10.2.4 在子窗体中使用SQL的UNION语句查询所有记录 266 10.2.5 在组合框控件外显示组合框的列 268 10.2.6 根据用户的输入添加新的组合框选项 271 10.3 使用本机的Access选项卡控件 273 10.3.1 本机的选项卡控件概述 273 10.3.2 创建并编辑新的选项卡控件 275 10.3.3 在选项卡控件中移动页 277 10.3.4 在选项卡页上添加控件 278 10.3.5 为选项卡控件编程 279 10.4 更改Access控件 280 10.4.1 在窗体设计的时候,更改Access控件 281 10.4.2 在运行的时候,使用VBA更改控件 281 10.5 对多重选择列表框编程 284 10.5.1 与多重选择有关的列表框属性 284 10.5.2 在多重选择列表框中使用VBA来操作选中项 285 10.6 使用子窗体、子报表向导 291 10.7 对控件提供电子表格的光标移动方式 292 10.7.1 研究问题 292 10.7.2 解决问题 293 10.8 用代码操纵控件 297 10.8.1 检查选项组菜单窗体的组成 297 10.8.2 ManipulatingControlsExample窗体 298 10.8.3 查看窗体后面的代码 299 10.9 小 结 304 第11章 创建强大的报表 305 11.1 对汇总、细节以及综合这二者的报表建立同一报表 305 11.2 用按窗体查询来创建同一报表的动态分组 312 11.3 复杂的特征:创建迂回报表 316 11.3.1 查看前面的报表 318 11.3.2 "列”页面的属性 318 11.3.3 报表之后的工作 320 11.4 用动态列创建交叉表查询的报表 320 11.4.1 报表使用的按窗体查询 321 11.4.2 报表使用的交叉表查询 323 11.4.3 DynamicColumnsExample报表 325 11.5 使用多项选择列表框选择多项打印主题 329 11.5.1 MultiSelectCategoryExample报表 329 11.5.2 多项选择列表框窗体 330 11.5.3 多项选择列表框窗体的程序清单 331 11.6 为选择分组依据项创建类似向导的界面 336 11.6.1 核心表:WizExReports和WizExElements 338 11.6.2 使用WizExReports窗体 339 11.6.3 为新报表使用组元素向导 348 11.7 动态格式化报表 350 11.7.1 DynamicFormattingExample报表 350 11.7.2 报表的条件格式化 352 11.8 小 结 356 第12章 处理数据访问页 358 12.1 为什么使用数据访问页 358 12.1.1 理解数据访问页的结构化方式 359 12.1.2 浏览控件 361 12.1.3 数据访问页与窗体和报表的比较 362 12.1.4 哪类用户需要数据访问页 364 12.2 省时的数据访问页向导 364 12.2.1 使用“自动创建数据页:纵栏式” 364 12.2.2 使用数据页向导 365 12.3 创建及完善简单的数据访问页 369 12.3.1 数据访问页的字段列表 369 12.3.2 添加超级链接 370 12.3.3 在数据访问页中使用表达式 374 12.3.4 使用绑定的组合框和列表框 375 12.3.5 使用主题格式化 378 12.3.6 数据访问页所使用的其他控件 378 12.4 分组的数据访问页:Web报表 380 12.4.1 创建基本页 380 12.4.2 在数据访问页中创建关系 380 12.4.3 升级分组级别 381 12.4.4 添加页眉节 382 12.4.5 在分区带显示的数据访问页中查看数据层次 383 12.4.6 使用组筛选控件的组合框 383 12.5 查找其他资源 385 12.6 小 结 385 第三部分 利用互操作性来扩展Access 387 第13章 用自动化功能和DDE驱动Office应用程序 389 13.1 理解自动化功能 389 13.2 检查Office产品的对象模型 390 13.3 应用自动化功能 391 13.3.1 在VBA中声明对象变量 392 13.3.2 使用CreateObject()函数 394 13.3.3 使用GetObject()函数 394 13.4 应用自动化功能从Access运行其他应用程序 395 13.4.1 在Access中调用Word 396 13.4.2 在Access中调用Excel 402 13.4.3 在Access中调用Microsoft Graph 404 13.4.4 在Access中调用Microsoft Project 407 13.5 使用自动化功能在Microsoft Project中驱动Access 410 13.6 应用自动化功能在Access中调用Outlook 415 13.6.1 创建Outlook邮件项目 416 13.6.2 在Access中创建Outlook任务项 417 13.6.3 从Access中向Outlook中输入联系人 419 13.6.4 从Access中删除Outlook中的联系人 423 13.6.5 从Access中创建Outlook日历条目 424 13.7 用DDE调用其他应用程序 425 13.7.1 理解Access中用到的DDE命令 426 13.7.2 用DDE执行复杂的Word示例 429 13.8 小 结 432 第14章 编程实现ActiveX控件功能 433 14.1 理解ActiveX Windows通用控件 433 14.1.1 使用TabStrip控件 434 14.1.2 使用Access选项卡和使用ActiveX TabStrip控件的区别 436 14.2 ImageList控件详述 438 14.2.1 在设计阶段添加图像 438 14.2.2 在运行阶段向ImageList控件中添加图像 441 14.3 用ListView控件仿效Windows 95的资源管理器 443 14.3.1 查看ListView控件的不同视图 443 14.3.2 查看ListView控件的主要属性组 444 14.3.3 人工设置ListView控件 445 14.3.4 使用VBA创建和填充ListView控件 446 14.4 应用ProgressBar控件显示任务的进程 448 14.4.1 使用SysCmd()显示Access进度条 448 14.4.2 使用ActiveX ProgressBar控件 450 14.5 使用Slider控件在运行阶段设置文本框尺寸 452 14.6 应用Microsoft Rich TextBox控件提供所见即所得的功能 455 14.6.1 Rich Textbox控件的属性 456 14.6.2 Microsoft Rich Textbox控件的代码 456 14.7 用StatusBar控件创建单独窗体的状态栏 459 14.7.1 StatusBar Panels集合的属性 460 14.7.2 在运行阶段设置StatusBar属性 461 14.8 用ToolBar控件丰富窗体上的工具栏 462 14.9 应用TreeView控件查看数据文件管理器的样式 465 14.10 小 结 469 第15章 使用API调用来扩展Access功能 470 15.1 理解动态链接库 471 15.1.1 执行链接 471 15.1.2 内存管理 471 15.1.3 常用的DLL 471 15.2 检查API调用的语法 471 15.3 查找API的声明 474 15.4 查看可能的API调用 475 15.4.1 使用API Viewer定位调用 475 15.4.2 剪切和粘贴API Viewer中的调用 476 15.4.3 在Win32api.txt文件中查找API调用 477 15.5 使用API调用的注意事项 479 15.5.1 从头开始创建自己的API声明 479 15.5.2 将16位API调用转换为32位API调用 479 15.6 API调用的例子 480 15.6.1 查找可执行应用程序的文件 481 15.6.2 查看所使用的窗体 481 15.6.3 在Access中连接和断开网络驱动器 486 15.6.4 显示当前用户和计算机名 492 15.7 在应用程序中显示相关的文件夹 494 15.8 使用Open File对话框的API调用 497 15.9 小 结 502 第16章 使用类模块和集合来扩展VBA的库功能 503 16.1 第一个方案 503 16.1.1 Bookmark Tracker的特性 504 16.1.2 Bookmark Tracker的基本对象 505 16.1.3 开始使用类模块 506 16.1.4 用Bookmark Tracker来包装 519 16.2 管理同一窗体的多个实例 519 16.2.1 查看特征集 519 16.2.2 打开相同窗体的副本所使用的窗体 520 16.2.3 检查隔离相同窗体的多个副本所使用的代码 521 16.3 小 结 524 第17章 创建向导和加载项 525 17.1 理解Access向导、生成器和加载项 525 17.2 查看向导和加载项的注册表条目 526 17.3 创建自己的加载项 528 17.3.1 使用Bookmark Tracker Wizard 529 17.3.2 在Access 2000中安装加载项 532 17.3.3 对Bookmark Tracker Wizard编程 535 17.3.4 结束向导 546 17.4 使用Access代码库 553 17.4.1 代码库的优缺点 553 17.4.2 考虑库数据库的位置 553 17.4.3 设置库的引用 554 17.4.4 在“对象浏览器”中查看库例程 555 17.4.5 库编码问题 555 17.5 小 结 557 第18章 使用VBA操作注册表 558 18.1 Windows注册表的历史 558 18.1.1 在应用程序中使用Windows注册表 559 18.1.2 组成注册表的部分 561 18.1.3 操作注册表的工具 562 18.2 使用VBA中的注册表命令 564 18.3 用注册表的API调用来执行任务 570 18.3.1 处理多个后端数据库 571 18.3.2 样本应用程序 571 18.3.3 使用实际代码 573 18.4 小 结 588 第19章 Access的Internet应用 589 19.1 Access的超级链接特征 589 19.1.1 操作未绑定的超级链接控件 590 19.1.2 维护数据库的超级链接基础 594 19.1.3 查看超级链接数据类型 594 19.1.4 使用IsHyperlink属性向界面添加超级链接 596 19.1.5 通过编程用Follow、FollowHyperlink以及HyperlinkPart方法使用超级链接……597 19.2 Access超级链接选项 601 19.3 向HTML文档导入和导出Access对象的简便方法 602 19.3.1 使用“导出”来导出到HTML 602 19.3.2 导入和链接HTML文件 605 19.4 发布为其他Web文件格式 607 19.5 小 结 608 第四部分 添加专业外观和分布应用程序 609 第20章 编程Office命令栏和Office助手 611 20.1 使用命令栏 611 20.1.1 "自定义”对话框的“工具栏”页 612 20.1.2 "自定义”对话框的“命令”页 613 20.1.3 "自定义”对话框的“选项”选项卡 614 20.1.4 通过用户界面创建工具栏 615 20.1.4 添加命令栏到窗体 620 20.2 通过VBA使用命令栏 621 20.2.1 检查命令栏对象模型 622 20.2.2 编程修改命令栏 622 20.3 使用Office助手 629 20.3.1 Office助手对象模型 631 20.3.2 使用Office助手作为窗体的帮助 631 20.4 FileSearch对象 639 20.4.1 使用简单的例子 640 20.4.2 使用FileSearch属性 641 20.4.3 使用PropertyTests集合 642 20.4.4 使用Property对象的复杂例子 644 20.5 小 结 647 第21章 应用程序安全性 648 21.1 保护应用程序安全的目的 648 21.1.1 保护敏感数据 649 21.1.2 保护开发人员的代码 649 21.2 Access 2000的安全性 649 21.2.1 system.mdw的模型和函数 649 21.2.2 共享级安全:数据库密码 650 21.2.3 用户级安全:Access真正的安全系统 651 21.2.4 用户和组 652 21.2.5 权限 652 21.2.6 我有权限吗 654 21.2.7 理解所有者 654 21.2.8 为添加的保护加密数据库 654 21.2.9 System.mdw文件 656 21.3 安全性用户界面 657 21.3.1 使用PID、SID、WID和密码 657 21.3.2 创建新用户 659 21.3.3 创建新工作组 660 21.3.4 删除用户和组 661 21.3.5 向组中添加用户 661 21.3.6 为用户帐号添加密码 662 21.3.7 从用户帐号中删除密码 662 21.3.8 设置对象权限 663 21.3.9 保护VBE中的模块 664 21.3.10 设置数据库权限 665 21.3.11 改变对象的所有者 665 21.3.12 加密数据库 667 21.3.13 创建工作组信息文件 667 21.3.14 手工保护数据库 668 21.3.15 设置哪些权限 670 21.3.16 取消数据库安全保护 671 21.4 Access安全性的便利工具 671 21.4.1 使用安全性向导 672 21.4.2 在Access中打印用户和组 672 21.4.3 读取安全性白皮书 672 21.4.4 使用其他安全性资源 673 21.5 避免Access安全性的常见陷阱 673 21.5.1 设计安全 673 21.5.2 用默认帐号创建对象 673 21.5.3 多用户环境中保护链接表 674 21.5.4 用所有者权限运行 674 21.5.5 同步复制环境的安全性 675 21.5.6 用Microsoft Office Developer发布安全的应用程序 675 21.5.7 创建.mde文件发布安全的应用程序 676 21.6 用代码管理安全性 676 21.6.1 使用DAO进行安全性编程 676 21.6.2 通过代码创建新用户 678 21.6.3 通过代码删除用户 679 21.6.4 通过代码设置数据库密码 680 21.6.5 通过代码创建组 681 21.6.6 通过代码删除组 682 21.6.7 通过代码添加用户到组 683 21.6.8 通过代码创建对象的所有者 685 21.6.9 通过代码为对象设置权限 686 21.6.10 通过代码检查权限 687 21.6.11 通过代码确定登录身份 689 21.6.12 拒绝用户创建数据库的能力 689 21.6.13 拒绝表和查询对象的创建 691 21.6.14 通过代码压缩、加密和解密数据库 692 21.6.15 通过代码禁用特殊键 692 21.7 使用安全的样本数据库:Chap21s.mdb 694 21.8 小 结 694 第五部分 管理数据库 697 第22章 处理多用户环境 699 22.1 多用户术语 699 22.2 Access多用户处理 700 22.2.1 默认记录锁定 701 22.2.2 默认打开模式:共享与独占 701 22.2.3 更新重试的次数 703 22.2.4 ODBC刷新间隔 703 22.2.5 刷新间隔 704 22.2.6 更新重试时间间隔 704 22.3 一两个数据库包容器:知道放置的位置 704 22.3.1 各组件去向概述 704 22.3.2 拆分数据库的优缺点 705 22.3.3 手工拆分数据库 707 22.3.4 使用数据库拆分器向导 707 22.4 内建锁定模式 708 22.4.1 使用记录与页级锁定 709 22.4.2 锁定所有记录 710 22.4.3 锁定编辑记录 710 22.4.4 使用“不锁定”锁定模式 711 22.4.5 在VBA中使用锁定模式 711 22.4.6 使用可选锁定方案 712 22.5 在VBA中使用非绑定窗体 713 22.5.1 为处理非绑定窗体创建例程 714 22.5.2 使用样本窗体的步骤 716 22.5.3 使用支持例程 718 22.5.4 处理DAO版本 720 22.5.5 设置样本应用程序的ADO版本 736 22.6 多用户错误处理编程 747 22.7 用ADO获取登录用户列表 751 22.8 小 结 753 第23章 数据库同步复制 755 23.1 数据库同步复制的概念 756 23.1.1 同步复制设计目标 756 23.1.2 典型的同步复制应用程序 757 23.2 Jet同步复制工具 757 23.2.1 公文包 757 23.2.2 Access菜单 759 22.2.3 Replication Manager 760 23.2.4 JRO编程 761 23.3 数据库转换为副本 761 23.4 同步副本 766 23.4.1 设计母版和副本 767 23.4.2 恢复设计母版 768 23.4.3 同步复制可视化 768 23.4.4 同步复制系统的列、表及其他问题 769 23.4.5 使用副本集 770 23.5 副本集拓扑 771 23.5.1 单连接列表 771 23.5.2 星型和中心拓扑 771 23.6 星型和中心自动同步 772 23.7 分布可同步复制的应用程序 774 23.7.1 使用可同步复制的和非可同步复制的对象 774 23.7.2 部分副本 775 23.8 同步复制后端和前端应用程序 778 23.9 处理同步复制冲突 779 23.9.1 数据冲突 779 23.9.2 使用Access冲突解决器 780 23.9.3 使用另一个冲突解决算法 782 23.9.4 各种同步复制冲突 785 23.10 复制同步器 786 23.10.1 同步阶段 791 23.10.2 直接和间接同步 791 23.10.3 预定和随选同步 791 23.10.4 在Internet上同步副本 792 23.10.5 处理计数字段 792 23.10.6 使用同步复制的只读属性 793 23.10.7 执行同步复制鉴别修正 794 23.10.8 使用最后的同步伙伴 794 23.10.9 对同步复制的数据库使用压缩工具 795 23.10.10 确定是否备份副本 795 23.11 副本集从Access 97升级为Access 2000 795 23.12 保护同步复制的应用程序 796 23.13 同步复制数据库使用MDE文件 796 23.14 创建成功的同步复制应用程序 796 23.15 小 结 797 第24章 应用程序移到客户/服务器 798 24.1 了解客户/服务器 798 24.1.1 客户/服务器术语解释 799 24.1.2 利用ODBC 799 24.1.3 客户/服务器中使用Access的原因 800 24.2 迁移到客户/服务器的考虑因素 801 24.2.1 数据量 801 24.2.2 数据库的使用和用处 803 24.2.3 数据库设计 803 24.2.4 同时使用及用户数量 803 24.2.5 备份与恢复 803 24.2.6 安全性 804 24.2.7 应用程序间的数据共享 804 24.2.8 网络传输 804 24.2.9 记录集合 805 24.2.10 选择合适的系统 805 24.3 制订客户/服务器计划 805 24.3.1 字段和表的名称 806 24.3.2 保留字 806 24.3.3 区分字母大小写 807 24.3.4 服务器上的查询处理 807 24.4 应用程序开发过程的注意事项 808 24.4.1 限定数据 809 24.4.2 使用组合框 809 24.4.3 使用Access特定函数和用户自定义函数 810 24.4.4 创建异构联接及交叉数据库联接 810 24.4.5 处理OLE对象 810 24.4.6 使用本地表获取静态信息 811 24.5 转换现有的应用程序 811 24.5.1 从设计合理的数据库开始 811 24.5.2 使用时间戳字段 812 24.5.3 清理查询 812 24.5.4 重做窗体 813 24.5.5 开发高级应用程序 814 24.5.6 利用当前的Access安全性 817 24.5.7 升迁Access数据库 817 24.5.8 使用升迁工具 821 24.6 分布客户/服务器解决方案 824 24.6.1 编程设置ODBC数据源 825 24.6.2 用服务器脚本重新创建SQL数据库 828 24.6.3 向SQL Server加载现有的数据 829 24.7 Access和SQL Server的注意事项 829 24.8 小 结 830 第25章 用ADPs开发SQL Server项目 831 25.1 项目文件结构 832 25.1.1 介绍OLE DB 832 25.1.2 链接到数据 832 25.1.3 数据链接和Access项目 833 25.1.4 数据链接和VBA代码 834 25.1.5 Microsoft数据引擎 837 25.1.6 SQL Server上的对象 837 25.2 创建过程 839 25.2.1 创建新项目 839 25.2.2 项目属性 842 25.2.3 确保项目安全 843 25.3 创建客户/服务器应用程序 844 25.3.1 使用表 845 25.3.2 对象的命名约定 847 25.3.3 SQL Server的数据类型 848 25.3.4 使用约束 850 25.3.5 使用触发器 856 25.3.6 优化数据访问 858 25.4 使用视图 859 25.5 使用存储过程 862 25.5.1 创建存储过程 863 25.5.2 比较存储过程和Access语法 866 25.6 小 结 868 第六部分 添加最终的交互 869 第26章 使用DAO的启动检查系统例程 871 26.1 执行启动系统检查 872 26.2 使用定制数据库属性 877 26.2.1 通过用户界面创建数据库属性 877 26.2.2 从VBA访问定制数据库属性 878 26.3 通知和记录用户退出应用程序 879 26.3.1 启动时让用户退出 880 26.3.2 在应用程序运行中记录用户退出 881 26.3.3 设置标志文件让用户退出后端 885 26.3.4 启动时测试链接表的链接 888 26.4 通过VBA链接和解除链接表 889 26.4.1 链接和解除链接位于应用程序文件夹中Jet后端的表 890 26.4.2 用OpenFile API调用查找Jet后端 894 26.5 测试和修复损坏的Jet后端数据库 897 26.6 检查并通知用户新版本的情况 904 26.7 小 结 907 第27章 使用ADO的启动检查系统例程 908 27.1 执行启动系统检查 909 27.2 采用ADO设置和检索系统的设置 914 27.3 在启动时测试链接表的连接 915 27.4 通过VBA和ADO链接表 917 27.5 测试和修复损坏的Jet后端数据库 921 27.6 使用ADO复制代码表 925 27.7 小 结 929 第28章 创建维护例程 930 28.1 创建导出对话框导出应用程序的表 930 28.1.1 实用工具的演示 930 28.1.2 查看组成导出实用工具的部件 931 28.1.3 查看创建导出实用工具的代码 935 28.2 根据需要压缩和修复后端 937 28.3 创建通用代码表编辑器 942 28.4 后端复制表到前端以获取更好的性能 944 28.4.1 创建复制表编辑器 945 28.4.2 复制半静态数据的启动例程 954 28.5 小 结 960 第七部分 附录 961 附录A 在Access 2000中调试代码 963 A.1 设置正确的模块选项以发挥最大的调试能力 963 A.2 利用立即窗口 967 A.2.1 从应用程序向立即窗口显示数据 967 A.2.2 在立即窗口中显示数据 968 A.2.3 在立即窗口中给变量和对象赋值 968 A.2.4 从立即窗口运行代码 969 A.3 终止程序运行 970 A.3.1 使用Stop语句 971 A.3.2 使用断点 971 A.3.3 使用Debug.Assert 972 A.4 单步调试 972 A.4.1 按行“逐语句”运行代码 972 A.4.2 用“逐过程”越过代码 973 A.4.3 用“跳出”命令离开例程 973 A.4.4 "运行到光标处”命令略过已检验的代码 973 A.5 查看过程调用顺序 973 A.6 程序运行期间监视表达式 974 A.6.1 本地窗口 975 A.6.2 用“快速监视”对话框快速监视 977 A.6.3 在监视窗口中添加和查看表达式 978 A.6.4 设置断点条件和编辑表达式 979 A.7 用条件编译命令控制代码 981 A.8 小 结 983 附录B ActiveX初步 984 B.1 使用ActiveX控件 984 B.1.1 Access附带的ActiveX控件 985 B.1.2 在窗体上放置ActiveX控件 985 B.1.3 设计期间设置ActiveX控件的属性 987 B.2 用日历控件计算天数 988 B.2.1 日历ActiveX控件的属性 989 B.2.2 用日历控件设计VBA 992 B.3 通过Common Dialog ActiveX控件使用标准界面 994 B.3.1 用Common Dialog 控件查找文件 996 B.3.2 用Common Dialog ActiveX控件改变默认的系统打印机 997 B.4 小 结 998 附录C Access 2000和Jet4的错误 999 附录D Microsoft Access LESZYNSKI命名约定 1076 D.1 命名约定初步 1077 D.2 Access对象类型 1078 D.3 对象名的结构 1079 D.3.1 什么是前缀 1079 D.3.2 什么是标记 1080 D.3.3 什么是基本名称 1080 D.3.4 什么是限定符 1080 D.3.5 什么是后缀 1081 D.4 创建数据库对象基本名称 1081 D.4.1 基本名称规则 1082 D.4.2 基本名称长度限制 1082 D.4.3 复合基本名称 1083 D.4.4 字段基本名称 1083 D.4.5 基本名称元素的顺序 1085 D.5 数据库对象的命名约定 1085 D.5.1 数据库窗口对象的标记 1086 D.5.2 窗体和报表控件对象的标记 1088 D.5.3 数据库对象的前缀 1091 D.5.4 使用菜单宏 1092 D.5.5 数据库对象名样例 1093 D.6 创建VBA对象基本名称 1093 D.6.1 VBA对象基本名称的规则 1094 D.6.2 VBA对象基本名称长度 1094 D.6.3 复合VBA 对象基本名称 1094 D.7 VBA对象的命名约定 1095 D.7.1 变量的标记 1095 D.7.2 变量的前缀 1100 D.7.3 常量命名 1101 D.7.4 过程的标记和前缀 1102 D.7.5 用宏代替VBA 1102 D.7.6 Visual Basic对象名示例 1103 D.8 创建自己的标记 1103 D.9 VBA编码约定 1105 D.9.1 编码注释 1105 D.9.2 处理错误 1105 D.10 标准缩写 1106 D.11 标准术语 1108 D.12 LNC的补充信息 1109 D.12.1 如何得到LNC 1109 D.12.2 发送反馈 1109 D.12.3 作者简介 1109 光盘使用约定 1111 配套光盘内容 1113

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值