415.8%23.1为啥会计算错误

zh919919 2012-07-26 02:59:17
415.8%23.1 结果应该为0 ,但是打印的结果为23.099999999999987

事实415.8/23.1的结果应该是18,能够被整除才对。这是为啥呢?
...全文
58 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zh919919 2012-07-31
  • 打赏
  • 举报
回复
楼上的你真行,这帖子你都能翻出来,分给你了。话说谁想知道如何小数取模再回下帖吧
lyyzms 2012-07-31
  • 打赏
  • 举报
回复
对啊,就是从小数点开始的
zh919919 2012-07-26
  • 打赏
  • 举报
回复
记错了,原来是从小数点开始算
Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf 第I部分 语言结构和环境 第1章 visual studio 2010 3 1.1 visual studio 2010:从express到ultimate的各种版本 4 1.2 visual basic的关键字和语法 7 1.2.1 控制台应用程序 10 1.2.2 从项目模板上创建项目 11 1.2.3 solution explorer窗口 13 1.2.4 项目属性 14 1.2.5 assembly information屏幕 15 1.2.6 编译设置 16 1.2.7 调试属性 20 1.2.8 引用 21 1.2.9 资源 23 1.2.10 设置 24 1.2.11 其他项目属性选项卡 26 1.3 provb_vs2010项目 27 1.3.1 在代码中设置窗体属性 29 1.3.2 visual studio的其他组件 37 1.4 增强示例应用程序的功能 37 1.4.1 定制代码 39 1.4.2 构建应用程序 43 1.4.3 重用第一个windows窗体 50 1.5 visual studio 2010中的特色功能 51 1.5.1 构建配置 51 1.5.2 任务列表 53 1.5.3 command窗口 54 1.5.4 server explorer 54 1.5.5 在visual studio 2010中记录和使用宏 55 1.5.6 类图 57 1.5.7 应用程序生命周期管理 58 1.5.8 性能工具 60 1.6 小结 62 第2章 对象和visual basic 63 2.1 面向对象的术语 64 2.1.1 对象、类和实例 64 2.1.2 对象的组成 65 2.1.3 system.object 68 2.2 使用visual basic类型 68 2.2.1 值类型和引用类型 69 2.2.2 基本类型 71 2.3 命令:条件语句 72 2.3.1 if then 73 2.3.2 比较运算符 73 2.3.3 select case 75 2.4 值类型(结构) 75 2.4.1 布尔类型 76 2.4.2 整数类型 77 2.4.3 无符号类型 78 2.4.4 小数类型 78 2.4.5 char和byte类型 81 2.4.6 datetime类型 81 2.5 引用类型(类) 82 2.5.1 object类 82 2.5.2 string类 83 2.5.3 xml字面量 87 2.5.4 dbnull类和isdbnull()函数 89 2.6 参数传递 89 2.7 变量的作用域 91 2.8 使用对象 92 2.8.1 对象的声明和实例化 92 2.8.2 对象引用 93 2.8.3 取消对象的引用 93 2.8.4 前期绑定与后期绑定 94 2.9 数据类型转换 95 2.10 创建类 100 2.10.1 类 100 2.10.2 事件的处理 110 2.10.3 处理多个事件 111 2.10.4 withevents关键字 111 2.10.5 触发事件 111 2.10.6 声明和触发定制事件 112 2.10.7 用withevents关键字接收事件 113 2.10.8 用addhandler接收事件 115 2.10.9 构造函数方法 116 2.10.10 终止和清除 117 2.11 高级概念 118 2.11.1 重载方法 119 2.11.2 重载构造函数方法 121 2.11.3 共享方法、变量和事件 122 2.11.4 运算符重载 127 2.11.5 委托 129 2.11.6 类和组件 133 2.11.7 lambda表达式 134 2.12 小结 135 第3章 定制对象 137 3.1 继承 138 3.1.1 继承的实现 139 3.1.2 继承的层次 157 3.1.3 与基类、类及对象交互 159 3.1.4 构造函数 164 3.1.5 protected作用域 169 3.1.6 事件与继承 171 3.1.7 共享方法 174 3.1.8 共享事件 176 3.1.9 创建抽象基类 176 3.2 多接口 178 3.2.1 对象接口 178 3.2.2 辅助接口 180 3.3 抽象性 185 3.4 封装性 188 3.5 多态性 190 3.5.1 方法签名 190 3.5.2 实现多态性 191 3.6 进一步讨论继承 200 3.7 小结 211 第4章 公共语言运行库 213 4.1 .net应用程序的组成元素 214 4.1.1 模块 214 4.1.2 程序集 215 4.1.3 类型 215 4.2 版本化与部署 216 4.2.1 对版本化更好的支持 216 4.2.2 major.minor.build.revision版本介绍 217 4.2.3 更好的部署 217 4.3 跨语言集成 218 4.3.1 通用类型系统 218 4.3.2 元数据 219 4.3.3 对元数据更好的支持 219 4.3.4 属性 220 4.3.5 reflection api 222 4.4 il反汇编程序 222 4.5 内存管理 223 4.5.1 传统的垃圾回收机制 223 4.5.2 更快地为对象分配内存 230 4.5.3 垃圾回收器的优化 231 4.6 名称空间 232 4.6.1 名称空间的概念 233 4.6.2 名称空间与引用 236 4.6.3 常用的名称空间 237 4.6.4 导入名称空间并指定别名 239 4.6.5 为名称空间指定别名 240 4.6.6 在asp.net中引用名称空间 241 4.7 创建自己的名称空间 241 4.8 my关键字 244 4.8.1 my.application名称空间 244 4.8.2 my.computer名称空间 248 4.8.3 my.forms名称空间 251 4.8.4 my.resources名称空间 251 4.8.5 my.user名称空间 251 4.8.6 my.webservices名称空间 251 4.9 扩展my名称空间 252 4.10 小结 254 第5章 用visual basic进行声明式编程 255 5.1 声明式编程与visual basic 256 5.2 使用xaml创建窗口 257 5.3 xaml语法 260 5.3.1 xaml语言基础 261 5.3.2 使用xaml声明工作流 264 5.4 小结 265 第6章 异常处理和调试 267 6.1 visual studio 2010 team system的新增内容:历史调试 267 6.2 与visual basic 6兼容的注意事项 268 6.3 .net中的异常处理 268 6.4 结构化异常处理的关键字 269 6.4.1 try、catch和finally关键字 270 6.4.2 throw关键字 271 6.4.3 抛出新的异常 272 6.4.4 exit try语句 273 6.4.5 嵌套的try结构 274 6.4.6 异常属性的使用 275 6.4.7 message属性 276 6.4.8 innerexception和targetsite属性 276 6.5 与visual basic 6样式的错误处理交互操作 280 6.6 记录错误 281 6.6.1 事件日志 281 6.6.2 事件、方法和属性 282 6.6.3 写入跟踪文件 284 6.7 小结 286 第7章 测试驱动的开发 287 7.1 测试的内容和方式 288 7.2 visual studio中的tdd工具 290 7.3 单元测试过程 291 7.3.1 创建测试程序 291 7.3.2 运行测试程序 294 7.3.3 测试数据访问代码 295 7.3.4 使用generate from usage特性 302 7.4 其他visual studio版本 306 7.5 第三方测试框架 306 7.6 小结 307 第ii部分 业务对象和数据访问第8章 数组、集合和泛型 311 8.1 数组 312 8.1.1 多维数组 313 8.1.2 ubound函数 314 8.1.3 redim语句 314 8.1.4 preserve关键字 315 8.2 集合 315 8.2.1 循环语句 317 8.2.2 装箱 319 8.3 泛型 320 8.3.1 泛型的使用 321 8.3.2 nullable类型 322 8.3.3 泛型类型 323 8.3.4 泛型方法 326 8.4 创建泛型 327 8.4.1 泛型类型 328 8.4.2 泛型方法 334 8.4.3 约束 335 8.4.4 泛型和后期绑定 338 8.4.5 协变和逆变 339 8.5 小结 340 第9章 在vb中使用xml 341 9.1 xml简介 342 9.2 xml序列化 343 9.3 system.xml文档支持 348 9.4 xml流样式分析程序 348 9.4.1 写入xml流 349 9.4.2 读取xml流 352 9.4.3 文档对象模型(dom) 360 9.5 xslt转换 364 9.5.1 使用xslt转换不同的xml标准 367 9.5.2 system.xml.xsl中定义的其他类和接口 370 9.6 asp.net中的xml 370 9.6.1 xmldatasource服务器控件 370 9.6.2 xmldatasource控件的名称空间问题 374 9.6.3 xml服务器控件 375 9.7 linq to xml 376 9.8 linq to xml帮助对象 376 9.8.1 xdocument对象 377 9.8.2 xelement对象 377 9.8.3 xnamespace对象 378 9.8.4 xattribute对象 380 9.9 visual basic和xml字面量 381 9.10 使用linq查询xml文档 382 9.10.1 查询静态的xml文档 382 9.10.2 查询动态的xml文档 384 9.11 处理xml文档 385 9.11.1 读取xml文档 385 9.11.2 写入xml文档 386 9.12 vb中的lambda表达式 387 9.13 小结 389 第10章 ado.net和linq 391 10.1 ado.net的体系结构 392 10.2 ado.net的基本功能 393 10.2.1 ado.net的常见任务 393 10.2.2 ado.net的基本名称空间和类 398 10.2.3 ado.net组件 399 10.3 .net数据提供程序 400 10.3.1 connection对象 400 10.3.2 command对象 401 10.3.3 通过command对象使用存储过程 402 10.3.4 datareader对象 405 10.3.5 命令的异步执行 407 10.3.6 dataadapter对象 409 10.3.7 sql server .net数据提供程序 413 10.3.8 ole db .net数据提供程序 413 10.4 dataset组件 413 10.4.1 datatablecollection对象 414 10.4.2 datarelationcollection对象 414 10.4.3 extendedproperties属性 414 10.4.4 创建和使用dataset对象 415 10.4.5 ado.net的datatable对象 417 10.4.6 dataset和datatable对象的高级ado.net特性 418 10.5 使用通用提供程序模型 420 10.6 ado.net中的连接池 422 10.7 transactions类和system.transactions名称空间 423 10.7.1 创建事务 423 10.7.2 创建资源管理器 425 10.8 linq to sql 425 10.9 linq to sql和visual basic 426 10.9.1 用linq to sql提取数据:创建控制台应用程序 426 10.9.2 o/r设计器 427 10.9.3 创建product对象 428 10.10 对象到linq对象的映射 429 10.10.1 datacontext对象 430 10.10.2 table(tentity)对象 432 10.11 查询数据库 433 10.11.1 使用查询表达式 433 10.11.2 查询表达式详述 433 10.11.3 用表达式过滤 434 10.11.4 联接 434 10.11.5 数据项的组合 435 10.12 存储过程 437 10.13 更新数据库 438 10.14 小结 440 第11章 使用entity framework访问数据 441 11.1 对象关系映射 441 11.2 entity framework体系结构 442 11.2.1 概念模型 443 11.2.2 存储模型 446 11.2.3 映射模型 447 11.2.4 linq to entities 448 11.2.5 objectcontext 449 11.3 把对象映射到实体上 451 11.3.1 简单映射 451 11.3.2 对多个对象使用一个表 453 11.3.3 对一个对象使用多个表 455 11.4 从模型中生成数据库 457 11.5 小结 460 第12章 使用sql server 461 12.1 sql server compact 462 12.1.1 连接sql server compactedition数据库 463 12.1.2 同步数据 466 12.2 sql server内置的xml功能 472 12.3 sql server中的clr集成 474 12.3.1 决定使用t-sql还是vb 475 12.3.2 创建用户定义的类型 475 12.3.3 创建存储过程 487 12.3.4 在sql server中使用web服务 493 12.3.5 sql server 2008特性 498 12.4 wcf数据服务 499 12.4.1 rest 499 12.4.2 atom和json 499 12.4.3 使用wcf数据服务提供数据 500 12.4.4 wcf数据服务的客户端库 504 12.5 小结 508 第13章 服务(xml/wcf) 509 13.1 服务 510 13.1.1 网络角度 510 13.1.2 应用程序的发展 510 13.1.3 合并网络和应用程序开发 510 13.1.4 web服务基础 511 13.1.5 存在的问题 512 13.1.6 其他技术 512 13.1.7 web服务 513 13.1.8 组合起来 514 13.1.9 wcf服务的构成 514 13.2 向soa迈出一大步 515 13.2.1 wcf的功能 516 13.2.2 协定和元数据 516 13.2.3 使用ws-*协议 517 13.3 建立wcf服务 518 13.4 建立wcf使用者应用程序 524 13.4.1 添加服务引用 525 13.4.2 查看引用 526 13.4.3 配置文件的修改 529 13.4.4 编写使用者应用程序的代码 531 13.5 使用数据协定 533 13.6 名称空间 535 13.6.1 建立主机应用程序 535 13.6.2 建立使用者应用程序 536 13.6.3 查看hellocustomerservice的wsdl和架构 538 13.7 小结 540 第iii部分 智能客户端应用程序第14章 windows窗体 543 14.1 system.windows.forms名称空间 543 14.2 窗体的使用 544 14.2.1 设置启动窗体 544 14.2.2 通过sub main显示窗体 545 14.2.3 application类的更多内容 545 14.2.4 窗体的启动位置 545 14.2.5 窗体边框 545 14.2.6 始终置顶——topmost属性 546 14.2.7 附属窗体 546 14.2.8 改变窗体的透明度 547 14.2.9 可视化继承 549 14.2.10 滚动窗体 549 14.2.11 mdi窗体 549 14.2.12 vb 2010中的mdi样例 550 14.2.13 对话框窗体 551 14.2.14 运行时的窗体 553 14.2.15 默认的窗体实例 554 14.3 控件 554 14.3.1 以tab键切换控件的顺序 554 14.3.2 所有控件的属性 555 14.3.3 动态调整控件的大小和布局 555 14.3.4 flowlayoutpanel控件 557 14.3.5 tablelayoutpanel控件 558 14.3.6 panel和groupbox容器控件 559 14.3.7 扩展的provider控件 560 14.3.8 数据输入的高级功能 562 14.3.9 验证数据输入 564 14.3.10 工具栏与toolstrip控件 565 14.3.11 菜单 568 14.3.12 通用对话框 569 14.3.13 拖放操作 571 14.3.14 标准windows窗体控件小结 573 14.3.15 处理相关控件组 575 14.3.16 在运行时添加控件 576 14.4 其他编程技巧 577 14.5 小结 577 第15章 windows窗体的高级功能 579 15.1 在可视化控件中封装逻辑 579 15.2 在windows窗体中开发自定义的控件 580 15.2.1 继承现有的控件 580 15.2.2 构建复合控件 580 15.2.3 从头编写控件 581 15.3 继承现有的控件 581 15.3.1 基本步骤 581 15.3.2 给派生的控件添加代码 581 15.3.3 其他有用的特性 584 15.3.4 为派生的控件自定义事件 585 15.3.5 限制选中项数的checkedlistbox 586 15.4 control与usercontrol基类 589 15.4.1 control类 589 15.4.2 usercontrol类 589 15.5 复合控件 590 15.5.1 创建复合的user-control 591 15.5.2 改变控件的大小 591 15.5.3 提供子控件的属性 592 15.5.4 一个具体的例子 592 15.6 从头构建控件 595 15.7 给工具箱中的控件添加图标 600 15.8 在控件中嵌入其他控件 601 15.9 小结 602 第16章 集成wpf和windows 窗体的用户控件 605 16.1 集成库 606 16.2 在windows窗体中包含wpf控件 607 16.2.1 创建wpf控件库 608 16.2.2 windows窗体应用程序 610 16.3 在wpf中包含windows 窗体控件 616 16.4 集成的限制 621 16.5 小结 622 第17章 wpf桌面应用程序 623 17.1 内容、位置、原因、方式——wpf策略 624 17.2 光栅图形和矢量图形 625 17.3 下一个windows项目应使用wpf吗 625 17.4 创建wpf应用程序 626 17.4.1 实现定制的wpf应用程序 627 17.4.2 定制用户界面 639 17.4.3 定制按钮 647 17.4.4 wpf用户控件 651 17.5 小结 672 第18章 expression blend 3 675 18.1 了解blend 676 18.2 sketchflow 682 18.2.1 第一个sketchflow 682 18.2.2 sketchflow player 685 18.2.3 归档sketchflow 686 18.3 小结 686 第19章 silverlight 687 19.1 什么是silverlight 687 19.1.1 smooth streaming特性 688 19.1.2 业界标准视频 688 19.1.3 数字版权管理 688 19.2 启动silverlight项目 688 19.2.1 silverlight应用程序 689 19.2.2 silverlight导航应用程序 689 19.2.3 silverlight类库 690 19.3 silverlight解决方案 691 19.3.1 web应用程序 691 19.3.2 应用程序库缓存 691 19.3.3 silverlight应用程序 692 19.4 控件 695 19.5 给silverlight项目添加项 702 19.5.1 silverlight用户控件 703 19.5.2 silverlight应用程序类 703 19.5.3 silverlight页面 703 19.5.4 silverlight子窗口 703 19.5.5 silverlight模板控件 703 19.5.6 silverlight资源字典 704 19.6 浏览器之外的silverlight 704 19.7 小结 705 第iv部分 internet应用程序技术 第20章 silverlight和服务 709 20.1 服务和silverlight 709 20.1.1 asmx web服务 709 20.1.2 wcf服务 712 20.1.3 ado.net数据服务 716 20.2 model-view-viewmodel 725 20.2.1 分割 725 20.2.2 model 725 20.2.3 view 728 20.2.4 viewmodel 729 20.3 小结 729 第21章 使用asp.net 731 21.1 asp.net的历史 731 21.2 asp.net的重要特性 732 21.2.1 开发效率 732 21.2.2 性能和可伸缩性 732 21.2.3 本地化 732 21.2.4 健康监控 733 21.2.5 易于访问数据 733 21.2.6 管理和维护 733 21.3 visual studio对asp.net 的支持 733 21.3.1 web site和web application项目 733 21.3.2 asp.net应用程序文件夹 734 21.3.3 web服务器选项 735 21.4 用web窗体构建asp.net应用程序 735 21.5 数据驱动的应用程序 746 21.5.1 使用sqldatasource控件绑定数据 746 21.5.2 使用linqdatasource控件绑定数据 754 21.5.3 使用objectdastasource控件绑定数据 757 21.6 小结 759 第22章 asp.net的高级功能 761 22.1 母版页 761 22.1.1 创建母版页 762 22.1.2 创建内容页 765 22.1.3 为母版页提供默认内容 767 22.2 导航 767 22.2.1 使用sitemappath服务器控件 769 22.2.2 menu服务器控件 770 22.3 使用asp.net的提供程序模型 771 22.4 成员和角色管理 776 22.5 配置文件属性 781 22.6 microsoft ajax(asp.net ajax) 783 22.6.1 理解对ajax的需求 783 22.6.2 microsoft ajax 的实现 784 22.6.3 updatepanel控件和客户端服务调用 785 22.6.4 示例项目 785 22.6.5 添加updatepanel控件 789 22.6.6 使用客户端服务调用和客户端模板 790 22.7 小结 795 第23章 asp.net mvc 797 23.1 mvc和asp.net 798 23.2 构建asp.net mvc应用程序 798 23.2.1 创建项目 798 23.2.2 控制器和操作 800 23.2.3 添加模型 802 23.2.4 视图 804 23.2.5 路由 807 23.2.6 搭框架和crud操作 808 23.2.7 验证 815 23.3 小结 817 第24章 sharepoint 2010开发 819 24.1 简介 819 24.1.1 sharepoint foundation 2010 820 24.1.2 sharepoint server 2010 820 24.1.3 sharepoint的术语 820 24.1.4 sharepoint开发环境 821 24.2 feature和solution framework 821 24.2.1 feature 821 24.2.2 solution framework 829 24.3 用于sharepoint开发的visual studio工具 833 24.4 sharepoint 2010对象模型 839 24.4.1 服务器对象模型 840 24.4.2 客户端对象模型 843 24.5 构建web 部件 845 24.6 小结 851 第v部分 库和专业主题技术 第25章 visual studio tools foroffice 855 25.1 vsto的各个版本 856 25.1.1 office的自动化功能和vsto 856 25.1.2 免pia部署 856 25.1.3 vsto项目类型 857 25.2 office业务应用程序的体系结构 858 25.3 使用vba和vsto 859 25.4 创建文档模板(word) 864 25.4.1 给文档添加内容 866 25.4.2 添加ribbon和操作窗格 867 25.4.3 激活操作窗格 870 25.4.4 更新内容控件 872 25.5 创建office插件(excel) 875 25.6 outlook form regions 881 25.7 小结 889 第26章 windows workflow foundation 891 26.1 应用程序中的工作流 891 26.2 建立工作流 892 26.2.1 用windows workflowfoundation添加工作流 892 26.2.2 一个简单的工作流 894 26.2.3 标准活动 897 26.2.4 一个不太简单的工作流 899 26.2.5 建立定制活动 907 26.2.6 动态加载工作流 911 26.3 重新构建工作流设计器 912 26.4 小结 915 第27章 本地化 917 27.1 文化和区域 917 27.1.1 理解文化类型 918 27.1.2 线程 919 27.1.3 在asp.net中声明全局文化 921 27.1.4 在asp.net中使用文化设置 922 27.2 转换数值和操作 923 27.2.1 理解日期之间的区别 923 27.2.2 理解数字和货币的区别 925 27.2.3 理解排序字符串的区别 927 27.3 asp.net资源文件 929 27.3.1 使用本地资源 929 27.3.2 全局资源 933 27.4 windows窗体中的资源文件 935 27.5 小结 938 第28章 与com的交互操作 939 28.1 理解com 940 28.2 com和.net的交互 940 28.2.1 传统的组件 941 28.2.2 .net应用程序 942 28.2.3 调试 945 28.2.4 直接使用tlbimp 945 28.2.5 后期绑定 946 28.3 activex控件 950 28.3.1 传统的activex控件 950 28.3.2 另一个.net应用程序 952 28.3.3 再次调试 954 28.4 在com应用程序中使用.net组件 954 28.4.1 .net组件 954 28.4.2 regasm 956 28.4.3 tlbexp 957 28.5 p/invoke 957 28.6 小结 957 第29章 网络编程 959 29.1 协议、地址和端口 959 29.1.1 地址与计算机名 961 29.1.2 端口:指定应用程序 961 29.1.3 防火墙:不离不弃 962 29.2 system.net名称空间 963 29.2.1 web请求与响应 963 29.2.2 使用webclient简化常用的web请求 969 29.3 套接字 970 29.3.1 构建应用程序 971 29.3.2 创建conversation窗口 973 29.3.3 发送消息 980 29.3.4 关闭应用程序 984 29.4 在应用程序中使用internetexplorer 988 29.5 小结 991 第30章 应用程序服务 993 30.1 给应用程序服务使用iis 993 30.2 windows服务 993 30.3 windows服务的特性 994 30.4 与windows服务交互 995 30.5 创建windows服务 996 30.5.1 用于windows服务的.net framework类 996 30.5.2 其他类型的windows服务 998 30.6 在vb中创建windows服务 998 30.7 创建文件监视器服务 1000 30.7.1 创建windows服务的解决方案 1000 30.7.2 给服务添加.net组件 1000 30.7.3 安装服务 1003 30.7.4 启动服务 1004 30.7.5 卸载服务 1005 30.8 与服务通信 1005 30.8.1 servicecontroller类 1006 30.8.2 把servicecontroller集成到例子中 1007 30.8.3 servicecontroller的更多内容 1008 30.9 定制命令 1008 30.10 给服务传递字符串 1010 30.11 调试服务 1010 30.12 小结 1012 第31章 程序集和反射 1013 31.1 程序集 1013 31.2 清单 1014 31.2.1 程序集标识部分 1016 31.2.2 引用的程序集 1018 31.3 程序集与部署 1018 31.3.1 应用程序私有的程序集 1018 31.3.2 共享程序集 1019 31.4 版本化问题 1020 31.4.1 应用程序隔离 1020 31.4.2 并行执行 1020 31.4.3 自描述 1021 31.4.4 版本策略 1021 31.4.5 配置文件 1022 31.5 反射基础 1025 31.5.1 assembly类 1026 31.5.2 获得当前加载的程序集 1026 31.5.3 type类 1027 31.6 程序集的动态加载 1028 31.6.1 assembly类的loadfrom方法 1028 31.6.2 动态加载示例 1029 31.6.3 传入程序集 1030 31.7 小结 1031 第32章 .net framework中的安全性 1033 32.1 安全的概念与定义 1034 32.2 system.security.permissions名称空间中的权限 1035 32.2.1 代码访问权限 1037 32.2.2 身份权限 1038 32.2.3 基于角色的权限 1038 32.3 管理代码访问权限集合 1041 32.4 用户访问控制 1043 32.5 定义应用程序的uac设置 1043 32.5.1 安全性工具 1045 32.5.2 使用securityexception类处理异常 1046 32.6 加密基础 1047 32.7 小结 1060 第33章 使用任务和线程进行并行编程 1061 33.1 启动并行任务 1061 33.1.1 system.threading.tasks.parallel类 1062 33.1.2 parallel.invoke 1062 33.2 把串行代码转换为并行代码 1066 33.2.1 检测热点 1067 33.2.2 测试并行执行获得的速度提升 1069 33.2.3 理解并行和并发执行 1070 33.3 并行循环 1071 33.3.1 parallel.for 1071 33.3.2 parallel.foreach 1076 33.3.3 退出并行循环 1081 33.4 指定希望的并行度 1086 33.4.1 paralleloptions 1086 33.4.2 理解硬件线程和逻辑核心 1087 33.5 创建和管理任务 1088 33.5.1 system.threading.tasks.task 1089 33.5.2 理解任务的生命周期 1090 33.5.3 使用任务并行化代码 1091 33.5.4 从任务中返回值 1099 33.5.5 为并发和并行准备代码 1102 33.5.6 理解并发集合特性 1103 33.5.7 把linq转换为plinq 1106 33.6 小结 1108 第34章 部署 1109 34.1 应用程序部署 1110 34.1.1 .net中的部署很简单 1110 34.1.2 xcopy部署 1110 34.1.3 使用windows installer 1110 34.1.4 clickonce部署 1111 34.2 选择framework版本 1111 34.3 visual studio部署项目 1112 34.3.1 项目模板 1112 34.3.2 创建部署项目 1113 34.4 修改部署项目 1117 34.4.1 项目属性 1117 34.4.2 file system编辑器 1119 34.4.3 registry编辑器 1122 34.4.4 file types编辑器 1124 34.4.5 user interface编辑器 1125 34.4.6 custom actions编辑器 1127 34.4.7 launch conditions编辑器 1129 34.4.8 构建 1132 34.5 windows应用程序的internet部署 1132 34.5.1 “无接触”部署 1132 34.5.2 clickonce部署 1133 34.6 iis web部署工具 1140 34.7 小结 1142 第vi部分 附 录 附录 a vb编译器 1145 附录 b visual basic powerpacks tools 1161 附录 c workflow 2008 1173 附录 d 企业服务 1193 附录 e 云的编程 1215
STM32F10xxx rev7v3参考手册. 南京万利提供的原始翻译文档. 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本. 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 1 文中的缩写 16 1.1 寄存器描述表中使用的缩写列表 16 1.2 术语表 16 1.3 可用的外设 16 2 存储器和总线构架 17 2.1 系统构架 17 2.2 存储器组织 18 2.3 存储器映像 19 2.3.1 嵌入式SRAM 20 2.3.2 位段 20 2.3.3 嵌入式闪存 21 2.4 启动配置 23 3 CRC计算单元(CRC) 25 3.1 CRC简介 25 3.2 CRC主要特性 25 3.3 CRC功能描述 25 3.4 CRC寄存器 26 3.4.1 数据寄存器(CRC_DR) 26 3.4.2 独立数据寄存器(CRC_IDR) 26 3.4.3 控制寄存器(CRC_CR) 27 3.4.4 CRC寄存器映像 27 4 电源控制(PWR) 28 4.1 电源 28 4.1.1 独立的A/D转换器供电和参考电压 28 4.1.2 电池备份区域 29 4.1.3 电压调节器 29 4.2 电源管理器 29 4.2.1 上电复位(POR)和掉电复位(PDR) 29 4.2.2 可编程电压监测器(PVD) 30 4.3 低功耗模式 30 4.3.1 降低系统时钟 31 4.3.2 外部时钟的控制 31 4.3.3 睡眠模式 31 4.3.4 停止模式 32 4.3.5 待机模式 33 4.3.6 低功耗模式下的自动唤醒(AWU) 34 4.4 电源控制寄存器 35 4.4.1 电源控制寄存器(PWR_CR) 35 4.4.2 电源控制/状态寄存器 36 4.4.3 PWR寄存器地址映像 37 5 备份寄存器(BKP) 38 5.1 BKP简介 38 5.2 BKP特性 38 目录 STM32F10xxx参考手册 3/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 5.3 BKP功能描述 38 5.3.1 侵入检测 38 5.3.2 RTC校准 39 5.4 BKP寄存器描述 39 5.4.1 备份数据寄存器x(BKP_DRx) (x = 1 … 10) 39 5.4.2 RTC时钟校准寄存器(BKP_RTCCR) 39 5.4.3 备份控制寄存器(BKP_CR) 40 5.4.4 备份控制/状态寄存器(BKP_CSR) 40 5.4.5 BKP寄存器映像 42 6 复位和时钟控制(RCC) 45 6.1 复位 45 6.1.1 系统复位 45 6.1.2 电源复位 45 6.1.3 备份域复位 46 6.2 时钟 46 6.2.1 HSE时钟 48 6.2.2 HSI时钟 48 6.2.3 PLL 49 6.2.4 LSE时钟 49 6.2.5 LSI时钟 49 6.2.6 系统时钟(SYSCLK)选择 50 6.2.7 时钟安全系统(CSS) 50 6.2.8 RTC时钟 50 6.2.9 看门狗时钟 50 6.2.10 时钟输出 50 6.3 RCC寄存器描述 51 6.3.1 时钟控制寄存器(RCC_CR) 51 6.3.2 时钟配置寄存器(RCC_CFGR) 52 6.3.3 时钟中断寄存器 (RCC_CIR) 54 6.3.4 APB2外设复位寄存器 (RCC_APB2RSTR) 56 6.3.5 APB1外设复位寄存器 (RCC_APB1RSTR) 58 6.3.6 AHB外设时钟使能寄存器 (RCC_AHBENR) 60 6.3.7 APB2外设时钟使能寄存器(RCC_APB2ENR) 61 6.3.8 APB1外设时钟使能寄存器(RCC_APB1ENR) 62 6.3.9 备份域控制寄存器 (RCC_BDCR) 65 6.3.10 控制/状态寄存器 (RCC_CSR) 66 6.3.11 RCC寄存器地址映像 68 7 通用和复用功能I/O(GPIO和AFIO) 69 7.1 GPIO功能描述 69 7.1.1 通用I/O(GPIO) 70 7.1.2 单独的位设置或位清除 71 7.1.3 外部中断/唤醒线 71 7.1.4 复用功能(AF) 71 7.1.5 软件重新映射I/O复用功能 71 7.1.6 GPIO锁定机制 71 7.1.7 输入配置 71 7.1.8 输出配置 72 7.1.9 复用功能配置 73 7.1.10 模拟输入配置 73 目录 STM32F10xxx参考手册 4/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 7.2 GPIO寄存器描述 75 7.2.1 端口配置低寄存器(GPIOx_CRL) (x=A..E) 75 7.2.2 端口配置高寄存器(GPIOx_CRH) (x=A..E) 75 7.2.3 端口输入数据寄存器(GPIOx_IDR) (x=A..E) 76 7.2.4 端口输出数据寄存器(GPIOx_ODR) (x=A..E) 76 7.2.5 端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E) 77 7.2.6 端口位清除寄存器(GPIOx_BRR) (x=A..E) 77 7.2.7 端口配置锁定寄存器(GPIOx_LCKR) (x=A..E) 77 7.3 复用功能I/O和调试配置(AFIO) 78 7.3.1 把OSC32_IN/OSC32_OUT作为GPIO 端口PC14/PC15 78 7.3.2 把OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1 78 7.3.3 CAN复用功能重映射 79 7.3.4 JTAG/SWD复用功能重映射 79 7.3.5 ADC复用功能重映射 80 7.3.6 定时器复用功能重映射 80 7.3.7 USART复用功能重映射 81 7.3.8 I2C 1 复用功能重映射 82 7.3.9 SPI 1复用功能重映射 82 7.4 AFIO寄存器描述 83 7.4.1 事件控制寄存器(AFIO_EVCR) 83 7.4.2 复用重映射和调试I/O配置寄存器(AFIO_MAPR) 83 7.4.3 外部中断配置寄存器1(AFIO_EXTICR1) 86 7.4.4 外部中断配置寄存器2(AFIO_EXTICR2) 86 7.4.5 外部中断配置寄存器3(AFIO_EXTICR3) 87 7.4.6 外部中断配置寄存器4(AFIO_EXTICR4) 87 7.5 GPIO 和AFIO寄存器地址映象 88 8 中断和事件 89 8.1 嵌套向量中断控制器 89 8.1.1 系统嘀嗒(SysTick)校准值寄存器 89 8.1.2 中断和异常向量 89 8.2 外部中断/事件控制器(EXTI) 91 8.2.1 主要特性 91 8.2.2 框图 92 8.2.3 唤醒事件管理 92 8.2.4 功能说明 92 8.2.5 外部中断/事件线路映像 94 8.3 EXTI 寄存器描述 95 8.3.1 中断屏蔽寄存器(EXTI_IMR) 95 8.3.2 事件屏蔽寄存器(EXTI_EMR) 95 8.3.3 上升沿触发选择寄存器(EXTI_RTSR) 96 8.3.4 下降沿触发选择寄存器(EXTI_FTSR) 96 8.3.5 软件中断事件寄存器(EXTI_SWIER) 97 8.3.6 挂起寄存器(EXTI_PR) 97 8.3.7 外部中断/事件寄存器映像 98 9 DMA 控制器(DMA) 99 9.1 DMA简介 99 9.2 DMA主要特性 99 9.3 功能描述 100 目录 STM32F10xxx参考手册 5/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 9.3.1 DMA处理 100 9.3.2 仲裁器 100 9.3.3 DMA 通道 101 9.3.4 可编程的数据传输宽度,对齐方式和数据大小端 102 9.3.5 错误管理 103 9.3.6 中断 103 9.3.7 DMA请求映像 104 9.4 DMA寄存器 107 9.4.1 DMA中断状态寄存器(DMA_ISR) 107 9.4.2 DMA中断标志清除寄存器(DMA_IFCR) 108 9.4.3 DMA通道x配置寄存器(DMA_CCRx)(x = 1…7) 108 9.4.4 DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7) 110 9.4.5 DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7) 110 9.4.6 DMA通道x存储器地址寄存器(DMA_CPARx)(x = 1…7) 110 9.4.7 DMA寄存器映像 111 10 模拟/数字转换(ADC) 113 10.1 ADC介绍 113 10.2 ADC主要特征 113 10.3 ADC功能描述 114 10.3.1 ADC开关控制 115 10.3.2 ADC时钟 115 10.3.3 通道选择 115 10.3.4 单次转换模式 115 10.3.5 连续转换模式 116 10.3.6 时序图 116 10.3.7 模拟看门狗 116 10.3.8 扫描模式 117 10.3.9 注入通道管理 117 10.3.10 间断模式 118 10.4 校准 119 10.5 数据对齐 119 10.6 可编程的通道采样时间 120 10.7 外部触发转换 120 10.8 DMA请求 121 10.9 双ADC模式 121 10.9.1 同步注入模式 122 10.9.2 同步规则模式 123 10.9.3 快速交替模式 123 10.9.4 慢速交替模式 124 10.9.5 交替触发模式 124 10.9.6 独立模式 125 10.9.7 混合的规则/注入同步模式 125 10.9.8 混合的同步规则+交替触发模式 125 10.9.9 混合同步注入+交替模式 126 10.10 温度传感器 126 10.11 ADC中断 127 10.12 ADC寄存器描述 128 10.12.1 ADC状态寄存器(ADC_SR) 128 目录 STM32F10xxx参考手册 6/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 10.12.2 ADC控制寄存器1(ADC_CR1) 129 10.12.3 ADC控制寄存器2(ADC_CR2) 131 10.12.4 ADC采样时间寄存器1(ADC_SMPR1) 133 10.12.5 ADC采样时间寄存器2(ADC_SMPR2) 133 10.12.6 ADC注入通道数据偏移寄存器x (ADC_JOFRx)(x=1..4) 134 10.12.7 ADC看门狗高阀值寄存器(ADC_HTR) 134 10.12.8 ADC看门狗低阀值寄存器(ADC_LRT) 134 10.12.9 ADC规则序列寄存器1(ADC_SQR1) 135 10.12.10 ADC规则序列寄存器2(ADC_SQR2) 135 10.12.11 ADC规则序列寄存器3(ADC_SQR3) 136 10.12.12 ADC注入序列寄存器(ADC_JSQR) 136 10.12.13 ADC 注入数据寄存器x (ADC_JDRx) (x= 1..4) 137 10.12.14 ADC规则数据寄存器(ADC_DR) 137 10.12.15 ADC寄存器地址映像 138 11 数字/模拟转换(DAC) 140 11.1 DAC简介 140 11.2 DAC主要特征 140 11.3 DAC功能描述 141 11.3.1 使能DAC通道 141 11.3.2 使能DAC输出缓存 141 11.3.3 DAC数据格式 142 11.3.4 DAC转换 142 11.3.5 DAC输出电压 143 11.3.6 选择DAC触发 143 11.3.7 DMA请求 144 11.3.8 噪声生成 144 11.3.9 三角波生成 145 11.4 双DAC通道转换 145 11.4.1 无波形生成的独立触发 145 11.4.2 带相同LFSR生成的独立触发 146 11.4.3 带不同LFSR生成的独立触发 146 11.4.4 带相同三角波生成的独立触发 146 11.4.5 带不同三角波生成的独立触发 146 11.4.6 同时软件启动 147 11.4.7 不带波形生成的同时触发 147 11.4.8 带相同LFSR生成的同时触发 147 11.4.9 带不同LFSR生成的同时触发 147 11.4.10 带相同三角波生成的同时触发 147 11.4.11 带不同三角波生成的同时触发 148 11.5 DAC寄存器 149 11.5.1 DAC控制寄存器(DAC_CR) 149 11.5.2 DAC软件触发寄存器(DAC_SWTRIGR) 151 11.5.3 DAC通道1的12位右对齐数据保持寄存器(DAC_DHR12R1) 152 11.5.4 DAC通道1的12位左对齐数据保持寄存器(DAC_DHR12L1) 152 11.5.5 DAC通道1的8位右对齐数据保持寄存器(DAC_DHR8R1) 152 11.5.6 DAC通道2的12位右对齐数据保持寄存器(DAC_DHR12R2) 153 11.5.7 DAC通道2的12位左对齐数据保持寄存器(DAC_DHR12L2) 153 11.5.8 DAC通道2的8位右对齐数据保持寄存器(DAC_DHR8R2) 153 11.5.9 双DAC的12位右对齐数据保持寄存器(DAC_DHR12RD) 154 11.5.10 双DAC的12位左对齐数据保持寄存器(DAC_DHR12LD) 154 目录 STM32F10xxx参考手册 7/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 11.5.11 双DAC的8位右对齐数据保持寄存器(DAC_DHR8RD) 154 11.5.12 DAC通道1数据输出寄存器(DAC_DOR1) 155 11.5.13 DAC通道2数据输出寄存器(DAC_DOR2) 155 11.5.14 DAC寄存器映像 156 12 高级控制定时器(TIM1和TIM8) 157 12.1 TIM1和TIM8简介 157 12.2 TIM1和TIM8主要特性 157 12.3 TIM1和TIM8功能描述 158 12.3.1 时基单元 158 12.3.2 计数器模式 160 12.3.3 重复计数器 167 12.3.4 时钟选择 168 12.3.5 捕获/比较通道 171 12.3.6 输入捕获模式 173 12.3.7 PWM输入模式 174 12.3.8 强置输出模式 174 12.3.9 输出比较模式 175 12.3.10 PWM模式 176 12.3.11 互补输出和死区插入 178 12.3.12 使用刹车功能 179 12.3.13 在外部事件时清除OCxREF信号 180 12.3.14 产生六步PWM输出 181 12.3.15 单脉冲模式 182 12.3.16 编码器接口模式 183 12.3.17 定时器输入异或功能 185 12.3.18 与霍尔传感器的接口 185 12.3.19 TIMx定时器和外部触发的同步 187 12.3.20 定时器同步 190 12.3.21 调试模式 190 12.4 TIM1和TIM8寄存器描述 191 12.4.1 控制寄存器1(TIMx_CR1) 191 12.4.2 控制寄存器2(TIMx_CR2) 192 12.4.3 从模式控制寄存器(TIMx_SMCR) 193 12.4.4 DMA/中断使能寄存器(TIMx_DIER) 195 12.4.5 状态寄存器(TIMx_SR) 196 12.4.6 事件产生寄存器(TIMx_EGR) 197 12.4.7 捕获/比较模式寄存器1(TIMx_CCMR1) 198 12.4.8 捕获/比较模式寄存器2(TIMx_CCMR2) 200 12.4.9 捕获/比较使能寄存器(TIMx_CCER) 202 12.4.10 计数器(TIMx_CNT) 203 12.4.11 预分频器(TIMx_PSC) 204 12.4.12 自动重装载寄存器(TIMx_ARR) 204 12.4.13 重复计数寄存器(TIMx_RCR) 204 12.4.14 捕获/比较寄存器1(TIMx_CCR1) 205 12.4.15 捕获/比较寄存器2(TIMx_CCR2) 205 12.4.16 捕获/比较寄存器3(TIMx_CCR3) 205 12.4.17 捕获/比较寄存器(TIMx_CCR4) 206 12.4.18 刹车和死区寄存器(TIMx_BDTR) 206 12.4.19 DMA控制寄存器(TIMx_DCR) 208 12.4.20 连续模式的DMA地址(TIMx_DMAR) 208 目录 STM32F10xxx参考手册 8/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 12.4.21 TIM1和TIM8寄存器图 209 13 通用定时器(TIMx) 211 13.1 TIMx简介 211 13.2 TIMx主要功能 211 13.3 TIMx功能描述 212 13.3.1 时基单元 212 13.3.2 计数器模式 213 13.3.3 时钟选择 221 13.3.4 捕获/比较通道 223 13.3.5 输入捕获模式 225 13.3.6 PWM输入模式 225 13.3.7 强置输出模式 226 13.3.8 输出比较模式 226 13.3.9 PWM 模式 227 13.3.10 单脉冲模式 229 13.3.11 在外部事件时清除OCxREF信号 231 13.3.12 编码器接口模式 231 13.3.13 定时器输入异或功能 233 13.3.14 定时器和外部触发的同步 233 13.3.15 定时器同步 235 13.3.16 调试模式 239 13.4 TIMx寄存器描述 240 13.4.1 控制寄存器1(TIMx_CR1) 240 13.4.2 控制寄存器2(TIMx_CR2) 241 13.4.3 从模式控制寄存器(TIMx_SMCR) 242 13.4.4 DMA/中断使能寄存器(TIMx_DIER) 243 13.4.5 状态寄存器(TIMx_SR) 244 13.4.6 事件产生寄存器(TIMx_EGR) 245 13.4.7 捕获/比较模式寄存器1(TIMx_CCMR1) 246 13.4.8 捕获/比较模式寄存器2(TIMx_CCMR2) 249 13.4.9 捕获/比较使能寄存器(TIMx_CCER) 251 13.4.10 计数器(TIMx_CNT) 252 13.4.11 预分频器(TIMx_PSC) 252 13.4.12 自动重装载寄存器(TIMx_ARR) 252 13.4.13 捕获/比较寄存器1(TIMx_CCR1) 252 13.4.14 捕获/比较寄存器2(TIMx_CCR2) 253 13.4.15 捕获/比较寄存器3(TIMx_CCR3) 253 13.4.16 捕获/比较寄存器4(TIMx_CCR4) 253 13.4.17 DMA控制寄存器(TIMx_DCR) 254 13.4.18 连续模式的DMA地址(TIMx_DMAR) 254 13.4.19 TIMx寄存器图 255 14 基本定时器(TIM6和TIM7) 257 14.1 TIM6和TIM7简介 257 14.2 TIM6和TIM7的主要特性 257 14.3 TIM6和TIM7的功能 258 14.3.1 时基单元 258 14.3.2 计数模式 259 14.3.3 时钟源 261 14.3.4 调试模式 262 目录 STM32F10xxx参考手册 9/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 14.4 TIM6和TIM7寄存器 262 14.4.1 控制寄存器1(TIMx_CR1) 262 14.4.2 控制寄存器2(TIMx_CR2) 263 14.4.3 DMA/中断使能寄存器(TIMx_DIER) 263 14.4.4 状态寄存器(TIMx_SR) 264 14.4.5 事件产生寄存器(TIMx_EGR) 264 14.4.6 计数器(TIMx_CNT) 264 14.4.7 预分频器(TIMx_PSC) 265 14.4.8 自动重装载寄存器(TIMx_ARR) 265 14.4.9 TIM6和TIM7寄存器图 266 15 实时时钟(RTC) 267 15.1 RTC简介 267 15.2 主要特性 267 15.3 功能描述 267 15.3.1 概述 267 15.3.2 复位过程 268 15.3.3 读RTC寄存器 268 15.3.4 配置RTC寄存器 269 15.3.5 RTC标志的设置 269 15.4 RTC寄存器描述 270 15.4.1 RTC控制寄存器高位(RTC_CRH) 270 15.4.2 RTC控制寄存器低位(RTC_CRL) 270 15.4.3 RTC预分频装载寄存器(RTC_PRLH/RTC_PRLL) 271 15.4.4 RTC预分频器余数寄存器(RTC_DIVH / RTC_DIVL) 272 15.4.5 RTC计数器寄存器 (RTC_CNTH / RTC_CNTL) 272 15.4.6 RTC闹钟寄存器(RTC_ALRH/RTC_ALRL) 273 15.4.7 RTC寄存器映像 275 16 独立看门狗(IWDG) 276 16.1 简介 276 16.2 IWDG主要性能 276 16.3 IWDG功能描述 276 16.3.1 硬件看门狗 276 16.3.2 寄存器访问保护 276 16.3.3 调试模式 276 16.4 IWDG寄存器描述 277 16.4.1 键寄存器(IWDG_KR) 277 16.4.2 预分频寄存器(IWDG_PR) 278 16.4.3 重装载寄存器(IWDG_RLR) 278 16.4.4 状态寄存器(IWDG_SR) 279 16.4.5 IWDG寄存器映像 279 17 窗口看门狗(WWDG) 280 17.1 WWDG简介 280 17.2 WWDG主要特性 280 17.3 WWDG功能描述 280 17.4 如何编写看门狗超时程序 281 17.5 调试模式 282 17.6 寄存器描述 282 目录 STM32F10xxx参考手册 10/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 17.6.1 控制寄存器(WWDG_CR) 282 17.6.2 配置寄存器(WWDG_CFR) 283 17.6.3 状态寄存器(WWDG_SR) 283 17.6.4 WWDG寄存器映像 284 18 灵活的静态存储器控制器(FSMC) 285 18.1 FSMC功能描述 285 18.2 框图 285 18.3 AHB接口 286 18.3.1 支持的存储器和操作 286 18.4 外部设备地址映像 287 18.4.1 NOR和PSRAM地址映像 288 18.4.2 NAND和PC卡地址映像 288 18.5 NOR闪存和PSRAM控制器 289 18.5.1 外部存储器接口信号 290 18.5.2 支持的存储器及其操作 291 18.5.3 时序规则 291 18.5.4 NOR闪存和PSRAM时序图 291 18.5.5 同步的成组读 304 18.5.6 NOR闪存和PSRAM控制器寄存器 308 18.6 NAND闪存和PC卡控制器 313 18.6.1 外部存储器接口信号 313 18.6.2 NAND闪存/PC卡支持的存储器及其操作 314 18.6.3 NAND闪存、ATA和PC卡时序图 314 18.6.4 NAND闪存操作 315 18.6.5 NAND闪存预等待功能 316 18.6.6 NAND闪存的纠错码ECC计算(NAND闪存) 317 18.6.7 NAND闪存和PC卡控制器寄存器 317 18.7 FSMC寄存器地址映象 324 19 SDIO接口(SDIO) 325 19.1 SDIO主要功能 325 19.2 SDIO总线拓扑 325 19.3 SDIO功能描述 328 19.3.1 SDIO适配器 329 19.3.2 SDIO AHB接口 336 19.4 卡功能描述 336 19.4.1 卡识别模式 336 19.4.2 卡复位 336 19.4.3 操作电压范围确认 337 19.4.4 卡识别过程 337 19.4.5 写数据块 338 19.4.6 读数据块 338 19.4.7 数据流操作,数据流写入和数据流读出(只适用于多媒体卡) 338 19.4.8 擦除:成组擦除和扇区擦除 339 19.4.9 宽总线选择和解除选择 340 19.4.10 保护管理 340 19.4.11 卡状态寄存器 342 19.4.12 SD状态寄存器 344 19.4.13 SD I/O模式 347 目录 STM32F10xxx参考手册 11/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 19.4.14 命令与响应 348 19.5 响应格式 350 19.5.1 R1(普通响应命令) 351 19.5.2 R1b 351 19.5.3 R2(CID、CSD寄存器) 351 19.5.4 R3(OCR寄存器) 351 19.5.5 R4(快速I/O) 352 19.5.6 R4b 352 19.5.7 R5(中断请求) 352 19.5.8 R6(中断请求) 353 19.6 SDIO I/O卡特定的操作 353 19.6.1 使用SDIO_D2信号线的SDIO I/O读等待操作 353 19.6.2 使用停止SDIO_CK的SDIO读等待操作 353 19.6.3 SDIO暂停/恢复操作 354 19.6.4 SDIO中断 354 19.7 CE-ATA特定操作 354 19.7.1 命令完成指示关闭 354 19.7.2 命令完成指示使能 354 19.7.3 CE-ATA中断 354 19.7.4 中止CMD61 354 19.8 硬件流控制 354 19.9 SDIO寄存器 355 19.9.1 SDIO电源控制寄存器(SDIO_POWER) 355 19.9.2 SDIO时钟控制寄存器(SDIO_CLKCR) 355 19.9.3 SDIO参数寄存器(SDIO_ARG) 356 19.9.4 SDIO命令寄存器(SDIO_CMD) 356 19.9.5 SDIO命令响应寄存器(SDIO_RESPCMD) 357 19.9.6 SDIO响应1..4寄存器(SDIO_RESPx) 357 19.9.7 SDIO数据定时器寄存器(SDIO_DTIMER) 358 19.9.8 SDIO数据长度寄存器(SDIO_DLEN) 358 19.9.9 SDIO数据控制寄存器(SDIO_DCTRL) 358 19.9.10 SDIO数据计数器寄存器(SDIO_DCOUNT) 360 19.9.11 SDIO状态寄存器(SDIO_STA) 360 19.9.12 SDIO清除中断寄存器(SDIO_ICR) 361 19.9.13 SDIO中断屏蔽寄存器(SDIO_MASK) 362 19.9.14 SDIO FIFO计数器寄存器(SDIO_FIFOCNT) 364 19.9.15 SDIO数据FIFO寄存器(SDIO_FIFO) 364 19.9.16 SDIO寄存器映像 365 20 USB全速设备接口(USB) 366 20.1 USB简介 366 20.2 USB主要特征 366 20.3 USB功能描述 367 20.3.1 USB功能模块描述 368 20.4 编程中需要考虑的问题 369 20.4.1 通用USB设备编程 369 20.4.2 系统复位和上电复位 369 20.4.3 双缓冲端点 372 20.4.4 同步传输 373 20.4.5 挂起/恢复事件 374 目录 STM32F10xxx参考手册 12/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 20.5 USB寄存器描述 375 20.5.1 通用寄存器 375 20.5.2 端点寄存器 380 20.5.3 缓冲区描述表 382 20.5.4 USB寄存器映像 385 21 控制器局域网(bxCAN) 387 21.1 bxCAN简介 387 21.2 bxCAN主要特点 387 21.2.1 总体描述 388 21.3 bxCAN工作模式 389 21.3.1 初始化模式 390 21.3.2 正常模式 390 21.3.3 睡眠模式(低功耗) 390 21.3.4 测试模式 390 21.3.5 静默模式 390 21.3.6 环回模式 391 21.3.7 环回静默模式 391 21.4 bxCAN功能描述 392 21.4.1 发送处理 392 21.4.2 时间触发通信模式 393 21.4.3 接收管理 393 21.4.4 标识符过滤 395 21.4.5 报文存储 398 21.4.6 出错管理 399 21.4.7 位时间特性 400 21.5 bxCAN中断 402 21.6 CAN 寄存器描述 403 21.6.1 寄存器访问保护 403 21.6.2 控制和状态寄存器 403 21.6.3 邮箱寄存器 411 21.6.4 CAN过滤器寄存器 415 21.6.5 bxCAN寄存器列表 419 22 串行外设接口(SPI) 422 22.1 SPI简介 422 22.2 SPI和I2S主要特征 422 22.2.1 SPI特征 422 22.2.2 I2S功能 423 22.3 SPI功能描述 424 22.3.1 概述 424 22.3.2 SPI从模式 426 22.3.3 SPI主模式 427 22.3.4 单工通信 428 22.3.5 状态标志 428 22.3.6 CRC计算 429 22.3.7 利用DMA的SPI通信 429 22.3.8 错误标志 430 22.3.9 关闭SPI 430 22.3.10 SPI中断 430 目录 STM32F10xxx参考手册 13/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 22.4 I2S功能描述 431 22.4.1 I2S功能描述 431 22.4.2 支持的音频协议 432 22.4.3 时钟发生器 437 22.4.4 I2S主模式 438 22.4.5 I2S从模式 439 22.4.6 状态标志位 440 22.4.7 错误标志位 441 22.4.8 I2S中断 441 22.4.9 DMA功能 441 22.5 SPI和I2S寄存器描述 442 22.5.1 SPI控制寄存器1(SPI_CR1)(I2S模式下不使用) 442 22.5.2 SPI控制寄存器2(SPI_CR2) 443 22.5.3 SPI 状态寄存器(SPI_SR) 444 22.5.4 SPI 数据寄存器(SPI_DR) 445 22.5.5 SPI CRC多项式寄存器(SPI_CRCPR) 446 22.5.6 SPI Rx CRC寄存器(SPI_RXCRCR) 446 22.5.7 SPI Tx CRC寄存器(SPI_TXCRCR) 446 22.5.8 SPI_I2S配置寄存器(SPI_I2S_CFGR) 447 22.5.9 SPI_I2S预分频寄存器(SPI_I2SPR) 448 22.5.10 SPI 寄存器地址映象 449 23 I2C接口 450 23.1 I2C简介 450 23.2 I2C主要特点 450 23.3 I2C功能描述 451 23.3.1 模式选择 451 23.3.2 I2C从模式 452 23.3.3 I2C主模式 454 23.3.4 错误条件 456 23.3.5 SDA/SCL线控制 457 23.3.6 SMBus 457 23.3.7 DMA请求 459 23.3.8 包错误校验(PEC) 460 23.4 I2C中断请求 461 23.5 I2C调试模式 462 23.6 I2C寄存器描述 462 23.6.1 控制寄存器1(I2C_CR1) 462 23.6.2 控制寄存器2(I2C_CR2) 464 23.6.3 自身地址寄存器1(I2C_OAR1) 465 23.6.4 自身地址寄存器2(I2C_OAR2) 465 23.6.5 数据寄存器(I2C_DR) 465 23.6.6 状态寄存器1(I2C_SR1) 466 23.6.7 状态寄存器2 (I2C_SR2) 468 23.6.8 时钟控制寄存器(I2C_CCR) 469 23.6.9 TRISE寄存器(I2C_TRISE) 470 23.6.10 I2C寄存器地址映象 471 24 通用同步异步收发器(USART) 472 24.1 USART介绍 472 24.2 USART主要特性 472 目录 STM32F10xxx参考手册 14/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 24.3 USART功能概述 473 24.3.1 USART 特性描述 474 24.3.2 发送器 475 24.3.3 接收器 477 24.3.4 分数波特率的产生 480 24.3.5 多处理器通信 481 24.3.6 校验控制 482 24.3.7 LIN(局域互联网)模式 483 24.3.8 USART 同步模式 485 24.3.9 单线半双工通信 487 24.3.10 智能卡 487 24.3.11 IrDA SIR ENDEC 功能块 488 24.3.12 利用DMA连续通信 490 24.3.13 硬件流控制 491 24.4 USART中断请求 492 24.5 USART模式配置 493 24.6 USART寄存器描述 494 24.6.1 状态寄存器(USART_SR) 494 24.6.2 数据寄存器(USART_DR) 495 24.6.3 波特比率寄存器(USART_BRR) 496 24.6.4 控制寄存器1(USART_CR1) 496 24.6.5 控制寄存器2(USART_CR2) 498 24.6.6 控制寄存器3(USART_CR3) 499 24.6.7 保护时间和预分频寄存器(USART_GTPR) 501 24.6.8 USART寄存器地址映象 502 25 器件电子签名 503 25.1 存储器容量寄存器 503 25.1.1 闪存容量寄存器 503 25.2 产品唯一身份标识寄存器(96位) 503 26 调试支持(DBG) 505 26.1 概况 505 26.2 ARM参考文献 506 26.3 SWJ调试端口(serial wire and JTAG) 506 26.3.1 JTAG-DP和SW-DP切换的机制 507 26.4 引脚分布和调试端口脚 507 26.4.1 SWJ调试端口脚 507 26.4.2 灵活的SWJ-DP脚分配 507 26.4.3 JTAG脚上的内部上拉和下拉 508 26.4.4 利用串行接口并释放不用的调试脚作为普通I/O口 508 26.5 STM32F10xxx JTAG TAP 连接 509 26.6 ID 代码和锁定机制 509 26.6.1 微控制器设备ID编码 509 26.6.2 边界扫描TAP 510 26.6.3 Cortex-M3 TAP 510 26.6.4 Cortex-M3 JEDEC-106 ID代码 511 26.7 JTAG调试端口 511 26.8 SW调试端口 512 目录 STM32F10xxx参考手册 15/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 26.8.1 SW协议介绍 512 26.8.2 SW协议序列 512 26.8.3 SW-DP状态机(Reset, idle states, ID code) 513 26.8.4 DP和AP读/写访问 513 26.8.5 SW-DP寄存器 513 26.8.6 SW-AP寄存器 514 26.9 对于JTAG-DP或SWDP都有效的AHB-AP (AHB 访问端口) 514 26.10 内核调试 515 26.11 调试器主机在系统复位下的连接能力 515 26.12 FPB (Flash patch breakpoint) 515 26.13 DWT(data watchpoint trigger) 516 26.14 ITM (instrumentation trace macrocell) 516 26.14.1 概述 516 26.14.2 时间戳包,同步和溢出包 516 26.15 MCU调试模块(MCUDBG) 517 26.15.1 低功耗模式的调试支持 517 26.15.2 支持定时器、看门狗、bxCAN和I2C的调试 518 26.15.3 调试MCU配置寄存器 518 26.16 TPIU
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
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
目录 第1章 PHP的介绍及环境搭建 2 1.1 PHP简介 2 1.1.1 PHP语言的发展简史 2 1.1.2 PHP的发展现状与未来展望 3 1.1.3 PHP语言的优势 3 1.1.4 相关资源及自学提示 4 1.2 PHP的应用范围及案例 5 1.2.1 PHP可以做什么 5 1.2.2 PHP擅长的几个领域及产品介绍 5 1.2.3 PHP不适合做什么 6 1.2.4 其他案例 6 1.3 PHP的Hello, world预览 6 1.3.1 第一个PHP程序Hello, world 6 1.3.2 学习PHP应该准备哪些软件 8 1.3.3 相关知识领域的介绍 9 1.4 程序运行环境的搭建 10 1.4.1 Apache简介 10 1.4.2 安装Apache与PHP 10 1.4.3 使用phpinfo()确认Apache与PHP 1.4.3 的安装成功 12 1.4.4 Apache的启动与关闭 12 1.4.5 Apache的配置文件httpd.conf与 1.4.5 .htaccess的简介 13 1.4.6 PHP的配置文件php.ini的简介 13 1.4.7 PHP常用参数的配置 14 1.5 几种综合网络服务器系统的安装 14 1.5.1 XAMPP 14 1.5.2 WAMP 16 1.5.3 Appserv 17 1.5.4 EasyPHP 18 1.5.5 VertrigoServ 19 1.6 几种开发工具的介绍 20 1.6.1 Vi及Vim 20 1.6.2 Eclipse+PHPEclipse插件 21 1.6.3 UltraEdit 21 1.6.4 EditPlus 22 1.6.5 支持PHP的IDE环境 22 1.7 小结 23 第2章 PHP的基础语法 24 2.1 语言构成与工作原理 24 2.2 常量与变量 25 2.2.1 常量的定义 25 2.2.2 变量的定义 26 2.2.3 变量的作用域 27 2.2.4 动态变量 29 2.3 运算符和关键字 29 2.4 流程控制语法 30 2.4.1 程序控制语句的简介 30 2.4.2 条件控制语句 30 2.4.3 循环控制语句 33 2.4.4 转移控制语句 35 2.5 表达式 36 2.5.1 简单的表达式例子 36 2.5.2 表达式的分类 36 2.5.3 算术操作表达式 36 2.5.4 字符串操作表达式 38 2.5.5 逻辑操作表达式 38 2.5.6 比较操作表达式 39 2.5.7 位操作表达式 40 2.5.8 运算符的优先级 41 2.6 特殊的全局变量的介绍 42 2.7 文件包含 42 2.7.1 使用require和require_once语句 2.7.1 进行文件包含 42 2.7.2 使用include与include_once语句 2.7.2 进行文件包含 44 2.8 小结 45 第3章 PHP的数据类型与操作 46 3.1 数据类型的介绍 46 3.1.1 标量数据类型 46 3.1.2 合成数据类型 49 3.1.3 特殊的数据类型 50 3.1.4 数据类型的获得与验证 51 3.2 数据类型间的转换 52 3.2.1 转换成整型 52 3.2.2 转换成浮点型 54 3.2.3 转换成字符串型 55 3.2.4 转换成布尔型 55 3.2.5 转换成数组 56 3.2.6 转换成对象 56 3.2.7 使用函数进行数据类型的强制 3.2.7 转换 57 3.3 小结 57 第4章 函数处理与数据引用 58 4.1 函数的定义与使用 58 4.1.1 函数的调用 58 4.1.2 用户自定义函数的编写 58 4.2 PHP常用函数 59 4.2.1 获得日期时间信息的函数getdate 60 4.2.2 获得当前时间的函数 4.2.2 gettimeofday 61 4.2.3 日期验证函数checkdate 61 4.2.4 格式化本地时间日期的函数date 62 4.2.5 获得本地化时间戳的函数mktime 64 4.2.6 输出控制函数flush 65 4.2.7 变量检测函数isset与变量释放 4.2.7 函数unset 66 4.2.8 随机函数rand与srand 66 4.3 关于引用的解释 67 4.3.1 对变量的引用 67 4.3.2 对函数的引用 68 4.3.3 引用的释放 68 4.4 小结 69 第5章 PHP中类的应用 70 5.1 PHP中OOP的应用 70 5.1.1 类简介 70 5.1.2 类的信息封装 71 5.1.3 静态类 71 5.2 创建一个简单类 71 5.3 PHP5与PHP4的差异 72 5.4 定义属性和方法 72 5.4.1 属性与方法的定义 72 5.4.2 传统的构造函数 73 5.4.3 PHP类中的一些特殊方法 74 5.5 类的引用、扩展与继承 75 5.5.1 类的引用 75 5.5.2 类的扩展与继承 76 5.6 操作与调用 77 5.6.1 静态类的调用 77 5.6.2 实例类型的判断方法instanceof 78 5.6.3 对象的克隆 78 5.7 一些设计观念 80 5.7.1 策略模式(Strategy Pattern) 81 5.7.2 单例模式(Singleton Pattern) 81 5.7.3 工厂模式(Factory Pattern) 83 5.8 接口与抽象类 86 5.8.1 接口的定义 86 5.8.2 单一接口的实现 87 5.8.3 多重接口的实现 87 5.8.4 抽象类 88 5.9 小结 90 第6章 文件系统与文本数据操作 91 6.1 PHP中目录操作详解 91 6.1.1 打开目录 91 6.1.2 关闭目录 91 6.1.3 读取目录中的文件 92 6.1.4 创建目录 92 6.1.5 删除目录 93 6.2 PHP中文件操作详解 93 6.2.1 打开文件 93 6.2.2 关闭文件 94 6.2.3 读取文件 94 6.2.4 写入文件 95 6.2.5 删除文件 96 6.2.6 复制文件 96 6.3 本地文件的操作实例——小型留言本 96 6.3.1 留言发表模块 96 6.3.2 浏览模块 98 6.4 远程文件的操作实例 99 6.5 文件的上传与下载 99 6.5.1 文件的上传 99 6.5.2 文件的下载 100 6.6 小结 101 第7章 字符的处理与正则表达式 102 7.1 字符类型的特殊性 102 7.2 字符的显示与格式化 102 7.2.1 字符的显示 102 7.2.2 字符的格式化 103 7.3 常见的操作 104 7.3.1 字符串重复操作——str_repeat 104 7.3.2 字符串替换操作——str_replace 7.3.2 和str_ireplace 104 7.3.3 字符串分解操作——str_split 106 7.3.4 字符串单词数的计算函数—— 7.3.4 str_word_count 107 7.3.5 字符串查找操作——strstr 108 7.3.6 获得字符串的长度——strlen 108 7.3.7 获得字符串的子串——substr 109 7.4 正则表达式简介 109 7.5 正则表达式与字符操作的综合应用 110 7.5.1 获得与模式匹配的数组单元—— 7.5.1 preg_grep 110 7.5.2 进行全局正则表达式的匹配—— 7.5.2 preg_match_all 111 7.5.3 进行正则表达式的匹配——preg_ 7.5.3 match 113 7.5.4 转义正则表达式字符——preg_ 7.5.4 quote 113 7.5.5 执行正则表达式的搜索和替换 7.5.5 函数——preg_replace 114 7.5.6 通过回调函数执行正则表达式 7.5.6 的搜索和替换——preg_replace_ 7.5.6 callback 114 7.5.7 用正则表达式进行字符串分割 7.5.7 ——preg_split 115 7.6 字符操作的注意事项 117 7.7 小结 118 第8章 数组操作与数据结构算法 119 8.1 一维数组与多维数组 119 8.1.1 一维数组简介 119 8.1.2 多维数组简介 119 8.2 常用的数组操作 120 8.2.1 数组的创建与调用 120 8.2.2 数组的更新 121 8.2.3 数组元素的遍历 122 8.3 数组索引与键值的操作技巧 123 8.4 数组的排序 125 8.4.1 递增排序——sort 125 8.4.2 递减排序——rsort 125 8.4.3 数组排序——array_multisort 126 8.5 几种数组的应用实例 127 8.5.1 顺序查找 127 8.5.2 二分法查找 128 8.5.3 使用array_search函数进行查找 129 8.5.4 线性表的入栈与出栈 129 8.5.5 数组的合并 131 8.5.6 数组的拆分 133 8.5.7 随机排序 134 8.6 小结 135 第9章 PHP程序调试 136 9.1 PHP中的错误类型 136 9.1.1 语法错误 136 9.1.2 语义错误 137 9.1.3 逻辑错误 137 9.1.4 注释错误 137 9.1.5 运行时的错误 138 9.2 PHP程序调试策略 138 9.2.1 PHP的错误级别 138 9.2.2 打开PHP的错误报告 140 9.2.3 使用print进行程序调试 140 9.3 使用PHPEclipse进行PHP程序调试 141 9.3.1 使用Eclipse编写PHP程序的 9.3.1 好处 141 9.3.2 PHPEclipse的安装与启动 141 9.3.3 PHPEclipse的使用 142 9.3.4 PHPEclipse的语法错误强调功能 144 9.3.5 PHPEclipse的调试界面 144 9.3.6 使用PHPEclipse调试PHP代码 9.3.6 的常见问题 148 9.4 错误的处理 149 9.4.1 错误的隐藏 149 9.4.2 错误信息的定制 150 9.4.3 超时错误的处理 151 9.5 小结 152 第10章 PHP中的异常处理 153 10.1 异常处理的原理 153 10.2 PHP中的异常处理 154 10.2.1 异常类Exception 154 10.2.2 异常抛出关键字throw 155 10.2.3 异常捕获语句try-catch 156 10.2.4 异常处理函数设置set_exception 10.2.4 _handler 157 10.2.5 完整的异常信息 158 10.3 扩展的异常处理类 160 10.4 异常的传递与重掷 163 10.5 小结 165 第11章 PHP与表单 166 11.1 HTML表单简介 166 11.1.1 表单标签form 166 11.1.2 输入标签input与文本框 167 11.1.3 按钮 168 11.1.4 单选框与复选框 169 11.1.5 多行文本域标签textarea 171 11.1.6 下拉框与列表框标签select 172 11.2 表单数据的接收 173 11.2.1 GET方法 173 11.2.2 POST方法 176 11.3 常用表单数据的验证方法 177 11.3.1 姓名验证 177 11.3.2 日期验证 177 11.3.3 E-mail地址验证 178 11.3.4 密码字段的验证 178 11.3.5 改进的用户信息输入程序 178 11.4 URL编码解码函数 181 11.4.1 编码字符串——urlencode 181 11.4.2 解码字符串——urldecode 181 11.5 小结 182 第12章 PHP与JavaScript交互 183 12.1 JavaScript简介 183 12.2 JavaScript的数据类型 183 12.3 JavaScript程序设计基础 184 12.3.1 在HTML中嵌入JavaScript 184 12.3.2 变量 185 12.3.3 注释 185 12.3.4 函数的定义与调用 186 12.3.5 条件语句 186 12.3.6 循环语句 189 12.3.7 对象 191 12.3.8 事件 192 12.4 PHP动态生成JavaScript代码 193 12.4.1 多行输出 193 12.4.2 单行输出 194 12.4.3 PHP动态生成JavaScript的 12.4.3 实例——进度条 194 12.5 在JavaScript中调用PHP程序 196 12.5.1 页面的跳转 196 12.5.2 隐性调用PHP程序 196 12.6 JavaScript和PHP的综合实例——表单 12.6 验证 197 12.6.1 表单设计 197 12.6.2 JavaScript代码设计 199 12.6.3 PHP代码设计 200 12.6.4 代码的运行 201 12.7 小结 202 第2篇 PHP与数据库 第13章 关系型数据库的基础知识 204 13.1 关系型数据库与关系型数据库系统的 13.1 介绍 204 13.2 关系型数据库系统的结构与运行过程 205 13.2.1 关系型数据库系统的层次结构 205 13.2.2 关系型数据库系统的运行过程 206 13.3 常用的关系型数据库的介绍 206 13.3.1 MySQL 206 13.3.2 ORACLE 207 13.3.3 SYBASE 207 13.3.4 DB2 207 13.3.5 SQL Server 207 13.4 SQL语言简介 207 13.5 常见的数据库设计问题 208 13.6 关系型数据库的设计原则 209 13.6.1 第一范式(1NF) 209 13.6.2 第二范式(2NF) 209 13.6.3 第三范式(3NF) 210 13.7 数据库设计的方法与步骤 210 13.7.1 需求分析 211 13.7.2 概念设计的E-R方法 214 13.7.3 数据库的逻辑设计方法 215 13.7.4 物理设计阶段 218 13.7.5 数据库的实施阶段 218 13.7.6 数据库的运行和维护阶段 218 13.8 小结 218 第14章 MySQL的安装与操作 219 14.1 MySQL数据库的介绍 219 14.2 安装与配置 219 14.2.1 下载MySQL 219 14.2.2 MySQL的安装 220 14.2.3 MySQL的配置 221 14.2.4 MySQL的启动与关闭 222 14.3 如何创建一个数据库与表 223 14.3.1 登录与退出MySQL的命令行 14.3.1 管理模式 223 14.3.2 MySQL的数据库操作 224 14.3.3 表的创建 225 14.4 数据类型的介绍 228 14.5 索引与唯一值的介绍 229 14.6 数据的操作 230 14.6.1 表的修改 230 14.6.2 表的删除 231 14.6.3 数据的查询 231 14.6.4 数据的插入 236 14.6.5 数据的更新 238 14.6.6 数据的删除 239 14.7 小结 239 第15章 MySQL与PHP的应用 240 15.1 PHP结合数据库应用的优势 240 15.2 Web数据库的工作原理 240 15.3 使用PHP操作MySQL数据库 240 15.3.1 数据库服务器的连接与断开 241 15.3.2 选择数据库 242 15.3.3 执行SQL语句 242 15.3.4 获得查询结果集中的记录数 243 15.3.5 获得结果集中的某一条记录 244 15.3.6 逐行获取结果集中的每一条 15.3.6 记录 245 15.3.7 结果集的分页 248 15.3.8 用户动态添加记录 249 15.3.9 用户动态更新记录 251 15.3.10 用户动态删除记录 253 15.4 使用PHP获取MySQL数据库的信息 255 15.4.1 获取数据库的信息 255 15.4.2 获取表的信息 256 15.4.3 获取列的数目 256 15.4.4 获取列的名称 257 15.4.5 获取列的数据类型 257 15.4.6 获取列的长度 257 15.4.7 获取列的标志 257 15.4.8 一个完整的查看表中各列属性 15.4.8 的实例 258 15.5 常见问题与解决方案 259 15.6 小结 261 第16章 数据库中的程序逻辑 262 16.1 数据库程序逻辑与PHP程序逻辑的分体 16.1 设计原则 262 16.2 数据库中的程序逻辑与数据的关系 262 16.3 存储过程的设计 263 16.3.1 定界符重定义 263 16.3.2 存储过程的创建与调用 264 16.3.3 存储过程的参数 265 16.3.4 复合语句 267 16.3.5 变量 268 16.3.6 条件语句 269 16.3.7 循环语句 271 16.3.8 游标 273 16.3.9 存储过程的删除 275 16.4 触发器的设计 275 16.4.1 触发器的创建与触发 275 16.4.2 触发器的删除 276 16.5 PHP与存储过程、触发器 277 16.5.1 PHP调用存储过程 277 16.5.2 PHP调用触发器 277 16.6 小结 279 第17章 Session与Cookie 280 17.1 Session与Cookie简介 280 17.2 PHP中Session的实现 280 17.2.1 开始使用Session 280 17.2.2 Session预定义数组 281 17.2.3 Session的检测与注销 281 17.2.4 PHP中Session处理的定制 282 17.3 Session应用实例——登录验证 286 17.3.1 数据库设计 286 17.3.2 HTML表单的设计 287 17.3.3 验证页面的编写 287 17.3.4 欢迎页面的编写 288 17.3.5 注销页面的编写 288 17.3.6 代码的运行 289 17.3.7 代码的改进 289 17.4 PHP中Cookie的实现 290 17.4.1 Cookie语法格式 290 17.4.2 Cookie预定义数组 290 17.4.3 创建一个Cookie 291 17.4.4 创建一个有时间限制的Cookie 291 17.4.5 创建一个有范围限制的Cookie 292 17.4.6 删除Cookie 292 17.4.7 浏览器重定向 292 17.4.8 Cookie的常见问题 293 17.5 Cookie应用实例——登录验证 293 17.5.1 HTML表单的设计 293 17.5.2 验证页面的编写 294 17.5.3 欢迎页面的编写 295 17.5.4 代码的运行 296 17.6 Cookie与Session的比较 296 17.7 小结 297 第18章 MySQL与PHP的应用实例 第18章 ——留言本 298 18.1 留言本实例的系统分析 298 18.1.1 系统简介 298 18.1.2 系统模型设计 298 18.1.3 数据库设计 299 18.1.4 公共功能设计 299 18.2 使用MySQL与PHP创建一个留言本 300 18.2.1 查看留言功能 301 18.2.2 发表留言功能 304 18.2.3 管理员身份验证功能 305 18.2.4 管理首页设计 307 18.2.5 留言回复功能 309 18.2.6 留言删除功能 311 18.2.7 留言回复删除功能 311 18.2.8 留言审批功能 312 18.2.9 退出管理员登录功能 312 18.3 小结 313 第19章 PostgreSQL与PHP的应用 314 19.1 PostgreSQL简介 314 19.2 PostgreSQL的安装 314 19.2.1 PostgreSQL的下载 314 19.2.2 PostgreSQL的安装 315 19.2.3 PostgreSQL服务的启动与停止 316 19.3 PostgreSQL的基本操作 317 19.3.1 pgAdmin Ⅲ的启动 317 19.3.2 服务器的连接 317 19.3.3 创建一个新数据库 318 19.3.4 创建一个表 318 19.3.5 对表中数据的操作 320 19.3.6 SQL语句的执行 320 19.4 使用PHP存取PostgreSQL数据库 321 19.4.1 使用PHP的PostgreSQL扩展 321 19.4.2 数据库的连接与关闭 322 19.4.3 执行SQL语句 322 19.4.4 获得查询结果集中的记录数 323 19.4.5 逐行获取结果集中的每一条 19.4.5 记录 324 19.4.6 数据的插入、更新和删除 326 19.4.7 执行动态SQL语句 330 19.4.8 information_schema 331 19.5 小结 333 第20章 SQL Server与PHP的应用 334 20.1 SQL Server简介 334 20.2 SQL Server的安装 334 20.2.1 SQL Server的安装 335 20.2.2 SQL Server企业管理器 336 20.3 SQL Server的基本操作 336 20.3.1 创建一个数据库 336 20.3.2 创建一个表 337 20.3.3 对表中数据的操作 338 20.3.4 SQL语句的执行 338 20.4 使用PHP存取SQL Server数据库 338 20.4.1 使用PHP的mssql扩展 339 20.4.2 数据库的连接与关闭 339 20.4.3 执行SQL语句 340 20.4.4 获得查询结果集中的记录数 341 20.4.5 逐行获取结果集中的每一条 20.4.5 记录 342 20.5 小结 344 第21章 Oracle与PHP的应用 345 21.1 Oracle简介 345 21.2 Oracle的安装 345 21.2.1 Oracle的安装 345 21.2.2 Oracle企业管理器 347 21.3 Oracle的基本操作 348 21.3.1 创建一个表 348 21.3.2 对表中数据的操作 350 21.3.3 SQL语句的执行 350 21.4 使用PHP存取Oracle数据库 351 21.4.1 使用PHP的oci8扩展 351 21.4.2 数据库的连接与关闭 352 21.4.3 执行SQL语句 353 21.4.4 逐行获取结果集中的每一条 21.4.4 记录 354 21.5 小结 355 第22章 不同数据库的差异 356 22.1 ANSI SQL及常见关系型数据库的SQL 22.1 扩展 356 22.1.1 ANSI SQL 356 22.1.2 MySQL对ANSI SQL的扩充 357 22.1.3 SQL Server的T-SQL 358 22.1.4 Oracle的PL/SQL 359 22.2 PHP数据库应用的差异 360 22.2.1 MySQL与PHP的应用 360 22.2.2 PostgreSQL与PHP的应用 361 22.2.3 SQL Server与PHP的应用 361 22.2.4 Oracle与PHP的应用 362 22.2.5 SQLite与PHP的应用 363 22.2.6 Access与PHP的应用 363 22.2.7 ODBC与PHP的应用 364 22.3 小结 365 第3篇 PHP的高级应用 第23章 PEAR、PECL的应用 368 23.1 PEAR与PECL的介绍 368 23.2 PEAR的安装 368 23.3 PEAR的安装与使用 372 23.3.1 查看已安装的PEAR包 372 23.3.2 查看PEAR包的详细信息 373 23.3.3 安装一个PEAR包 373 23.3.4 PEAR包的升级 374 23.3.5 PEAR包的使用 375 23.4 常用的PEAR类库实例 375 23.4.1 使用DB类库进行数据库查询 375 23.4.2 使用Auth_HTTP类库进行身份 23.4.2 校验 378 23.4.3 使用HTML_Template_IT类库 23.4.3 进行模板替换 379 23.5 PECL的安装与使用 381 23.6 PECL扩展应用实例——Zip 381 23.6.1 Zip扩展的安装 381 23.6.2 一个Zip扩展的应用实例 382 23.7 小结 382 第24章 ADOdb的应用 383 24.1 ADOdb介绍 383 24.1.1 ADOdb的优势 383 24.1.2 ADOdb的适用场合 383 24.2 ADOdb类库的安装与配置 384 24.2.1 ADOdb的下载与安装 384 24.2.2 ADOdb的第一个测试程序 384 24.3 ADOdb的常用数据库操作 386 24.3.1 连接数据库 386 24.3.2 数据的插入、更新与删除 389 24.3.3 数据查询 390 24.3.4 记录分页的实现 391 24.3.5 多个数据库的连接方法 393 24.4 ADOdb的程序调试 395 24.5 小结 396 第25章 FPDF类库的应用 397 25.1 FPDF简介 397 25.2 FPDF的安装与配置 397 25.3 FPDF创建PDF文档 397 25.3.1 FPDF创建Hello World 397 25.3.2 在PDF中插入图片 399 25.3.3 页眉与页脚 400 25.3.4 绘制表格 401 25.4 为FPDF增加中文支持 403 25.5 FPDF的实际应用 404 25.5.1 为文章系统创建PDF页面 405 25.5.2 动态生成企业产品名录 407 25.6 小结 408 第26章 PHP的缓存与静态化应用 409 26.1 为什么要静态化 409 26.2 大型应用的缓存机制与静态化 412 26.2.1 缓存机制 412 26.2.2 静态化机制 413 26.3 PHP如何实现静态化 413 26.3.1 根据模板生成静态页面 413 26.3.2 数据库与静态页的关系 415 26.3.3 静态页内容的修改 417 26.3.4 模板的替换 418 26.3.5 静态页上的动态操作 419 26.3.6 静态页面文件的目录 420 26.4 小结 423 第27章 PHP与XML格式操作 424 27.1 XML简介 424 27.2 简单的XML操作 425 27.2.1 创建一个SimpleXML对象 425 27.2.2 读取SimpleXML对象中的XML 27.2.2 数据 427 27.2.3 XML数据的修改 432 27.2.4 标准化XML数据 432 27.2.5 XML数据的存储 432 27.3 XML文档的动态创建 433 27.4 XML应用实例——留言本 435 27.4.1 XML文件结构设计 435 27.4.2 提交页面的编写 435 27.4.3 显示页面的编写 437 27.5 小结 438 第28章 Smarty类库 439 28.1 Smarty简介 439 28.2 Smarty的安装与配置 440 28.2.1 Smarty的安装 440 28.2.2 Smarty的配置 440 28.3 Smarty程序设计 441 28.3.1 简单的Smarty程序设计 441 28.3.2 模板对象属性的定义 442 28.3.3 Smarty程序编写的一般步骤 443 28.4 Smarty模板设计 444 28.4.1 模板中的变量 444 28.4.2 变量的修饰 444 28.4.3 区域循环方法 445 28.4.4 模板中的条件判断 449 28.4.5 外部文件的载入 450 28.5 Smarty的实际应用——多模板网站 451 28.5.1 模板的设计 452 28.5.2 页面实现 453 28.6 小结 453 第29章 Zend Framework框架 454 29.1 Zend Framework的安装 454 29.2 dispatch程序的编写 455 29.3 controller程序的编写 456 29.3.1 首页controller的编写 456 29.3.2 其他页面controller的编写 457 29.4 视图文件的调用 458 29.4.1 普通文件的直接调用 458 29.4.2 模板文件的调用 459 29.5 用户输入的验证与过滤 460 29.5.1 字符串的验证与过滤 460 29.5.2 数组的验证与过滤 462 29.6 Zend Framework应用实例——留言本 463 29.7 小结 466 第30章 PHP与图像操作 467 30.1 PHP图像函数库简介 467 30.2 GD库的配置 467 30.3 一个简单的图像创建程序 468 30.4 GD库的应用实例 470 30.4.1 使用GD库创建图片缩略图 470 30.4.2 使用GD库生成验证码 472 30.4.3 使用GD库下载远程图片 474 30.4.4 使用GD库为页面增加水印 474 30.5 小结 476 第31章 Jpgraph创建统计图 477 31.1 Jpgraph简介 477 31.2 Jpgraph的安装与配置 477 31.2.1 Jpgraph的安装 477 31.2.2 Jpgraph的配置 478 31.3 Jpgraph绘制统计图的实例 478 31.3.1 简单的X-Y坐标图 478 31.3.2 改进的X-Y坐标图 481 31.3.3 柱形图 484 31.3.4 饼图 485 31.3.5 3D饼图 486 31.4 Jpgraph应用实例——工厂销量查询 31.4 系统 487 31.5 小结 491 第32章 PHP访问LDAP 492 32.1 LDAP简介 492 32.2 LDAP服务器的安装与配置 492 32.2.1 OpenLDAP的安装 493 32.2.2 OpenLDAP的配置 493 32.2.3 OpenLDAP的启动与关闭 495 32.2.4 OpenLDAP的数据操作 496 32.2.5 phpLDAPadmin简介 497 32.3 PHP中LDAP扩展的配置 497 32.4 PHP与LDAP的相关操作 498 32.4.1 连接LDAP服务器 498 32.4.2 绑定LDAP服务器 498 32.4.3 断开LDAP服务器 499 32.4.4 查询LDAP目录内容 499 32.4.5 获得查询结果中的值 501 32.4.6 计算查询结果中的记录数 502 32.4.7 向LDAP添加一条新记录 503 32.4.8 更新LDAP中的一条记录 503 32.4.9 从LDAP中删除一条记录 504 32.4.10 错误处理 504 32.5 使用LDAP验证用户身份 505 32.6 小结 506 第33章 PHP与邮件系统 507 33.1 PHP邮件发送功能的配置 507 33.1.1 PHP中SMTP功能的配置 507 33.1.2 建立自己的SMTP服务器 508 33.2 PHP中的mail函数 509 33.2.1 简单的邮件发送方法 509 33.2.2 发送HTML格式文本 510 33.2.3 发送带附件的邮件 511 33.3 一个简单的邮件发送类 513 33.3.1 邮件发送类的创建 513 33.3.2 邮件发送系统的实现 515 33.4 小结 517 第34章 PHP加速器 518 34.1 Zend Optimizer 518 34.1.1 Zend Optimizer的安装 518 34.1.2 Zend Optimizer的配置 519 34.2 PHP Accelerator 520 34.2.1 PHP Accelerator的安装 520 34.2.2 PHP Accelerator的配置 521 34.3 Turck MMCache 522 34.3.1 Turck MMCache的安装 522 34.3.2 Turck MMCache的配置 522 34.4 eAccelerator 523 34.5 小结 523 第4篇 PHP与实际项目 第35章 用PHP构建CMS 526 35.1 了解CMS的需求 526 35.2 数据库设计 526 35.3 关键技术的实现 529 35.3.1 数据库连接的公用代码 530 35.3.2 网站开关的设计 530 35.3.3 模板更换机制 530 35.3.4 HTML编码转换 531 35.4 页面代码设计 531 35.4.1 首页的实现 532 35.4.2 注册页面的实现 536 35.4.3 分类文章列表页面与文章显示页面 35.4.3 的实现 538 35.4.4 投稿页面与添加新文章页面的实现 541 35.4.5 文章管理页面的实现 544 35.4.6 文章类别管理页面的实现 548 35.4.7 网站信息配置页面的实现 553 35.4.8 网站模板管理页面的实现 557 35.4.9 退出登录页面的实现 560 35.5 小结 561 第36章 用PHP构建搜索引擎 562 36.1 PHP对数据库数据的搜索 562 36.1.1 数据库的创建 562 36.1.2 搜索页面的设计 562 36.1.3 内容显示页面的设计 564 36.1.4 系统集成的调度策略 565 36.2 PHP对文本文件的搜索 566 36.3 PHP对现有搜索引擎的调用 567 36.4 小结 569 第37章 PHP与企业OA系统 570 37.1 了解OA的需求 570 37.2 数据库设计 571 37.3 关键技术的实现 572 37.3.1 根据登录用户的权限进入不同的 37.3.1 页面 572 37.3.2 项目与任务状态的级联更新 573 37.4 页面代码的设计 574 37.4.1 公共数据库连接代码 574 37.4.2 登录页面的设计 574 37.4.3 管理员、经理项目列表页面的设计 576 37.4.4 创建新项目页面的设计 579 37.4.5 项目修改页面的设计 582 37.4.6 普通员工任务列表页面的设计 588 37.4.7 新账号分配页面的设计 591 37.4.8 账号权限设置页面的设计 594 37.4.9 过期项目统计页面的设计 597 37.4.10 经理项目分配情况统计页面的 37.4.10 设计 600 37.4.11 员工任务分配情况统计页面的 37.4.11 设计 601 37.4.12 公司项目运营情况统计页面的 37.4.12 设计 602 37.5 小结 605 第38章 PHP与流程管理系统 606 38.1 流程管理系统的需求 606 38.2 数据库设计 607 38.3 关键技术的实现 609 38.3.1 使用触发器来记录请求更新日志 609 38.3.2 根据角色的不同对请求进行不同的 38.3.2 操作 609 38.4 页面代码的实现 610 38.4.1 设备维修请求列表页面的实现 610 38.4.2 提交新的设备维修请求页面的 38.4.2 实现 612 38.4.3 需要执行操作的请求列表页面的 38.4.3 实现 614 38.4.4 对请求执行操作页面的实现 617 38.4.5 操作日志列表页面的实现 624 38.5 小结 626 第39章 PHP与资源管理系统 627 39.1 资源管理系统的需求 627 39.2 数据库设计 627 39.3 关键技术的实现 630 39.3.1 使用SQL计算奖金额度 630 39.3.2 使用触发器来限制奖金额度 631 39.3.3 使用存储过程从其他数据表获取 39.3.3 数据 632 39.3.4 自动生成PHP代码控制网站开关 632 39.3.5 使用Jpgraph生成统计图 633 39.4 各功能模块的具体实现 634 39.4.1 用户权限认证的实现 634 39.4.2 订单输入模块的实现 636 39.4.3 库存管理模块的实现 640 39.4.4 账目管理模块的实现 645 39.4.5 员工奖金计算模块的实现 650 39.4.6 年度统计模块的实现 654 39.5 小结 656 第40章 多国语言的处理策略 657 40.1 对字符编码与GB2312、GBK和UTF-8 40.1 的理解 657 40.1.1 GB2312与GBK 657 40.1.2 Unicode、UCS与UTF-8 657 40.1.3 网页编码的实现 658 40.2 GLS设计思想简介 659 40.3 客户端语言选项的设置与获取 659 40.3.1 客户端语言选项的设置 659 40.3.2 使用PHP获取客户端语言选项 660 40.4 一个简单的带有多国语言支持的应用 660 40.4.1 数据库设计 660 40.4.2 页面代码的开发 661 40.4.3 语言设置页面的开发 665 40.4.4 语言配置文件选取页面的开发 666 40.4.5 语言配置文件的设计 667 40.5 小结 670 第41章 PHP在门户网站中的应用 671 41.1 门户网站的特点 671 41.2 静态缓存和动态缓存 671 41.2.1 静态缓存与动态缓存的简介 672 41.2.2 一个对系统实现静态缓存的例子 672 41.2.3 一个对系统实现动态缓存的例子 674 41.3 门户网站中的交互设计 677 41.3.1 什么是交互设计 677 41.3.2 一个不好的交互设计例子 677 41.3.3 改进的交互设计例子 679 41.4 负载均衡技术简介 682 41.4.1 常用的负载均衡技术 682 41.4.2 常用的负载均衡算法 683 41.5 一个使用用户排队机制解决网站大访问 41.5 量的例子 683 41.6 小结 686 第5篇 支持Web的系统 和网络维护 第42章 硬件安全与故障修复 688 42.1 服务器安全策略 688 42.2 操作系统的选择 688 42.2.1 Windows操作系统 688 42.2.2 UNIX与类UNIX操作系统 689 42.3 防火墙的应用 690 42.3.1 防火墙的简介 690 42.3.2 防火墙部署的简介 690 42.3.3 防火墙部署的实例 691 42.4 常见故障的处理 693 42.4.1 主板故障 693 42.4.2 内存故障 694 42.4.3 操作系统故障 695 42.4.4 网络故障 695 42.5 灾难的数据恢复 696 42.5.1 数据恢复技术简介 696 42.5.2 FinalData简介 696 42.6 小结 697 第43章 常见的程序漏洞和防护措施 698 43.1 允许用户任意设置全局变量漏洞 698 43.1.1 对非传入变量进行赋值的攻击方法 698 43.1.2 被包含文件中的变量 699 43.1.3 漏洞的防护措施 699 43.2 越过表单限制漏洞 700 43.2.1 一个向服务器提交非法数据的例子 700 43.2.2 漏洞的防护措施 702 43.3 文件上传漏洞 702 43.3.1 一个简单的文件上传页面 702 43.3.2 漏洞防护措施 703 43.4 根据错误信息攻击服务器漏洞 703 43.5 SQL注入漏洞 704 43.5.1 SQL注入攻击的一般方法 704 43.5.2 漏洞防护措施 706 43.6 远程文件包含漏洞 706 43.7 小结 707 第44章 数据的备份策略 708 44.1 mysqldump工具介绍 708 44.1.1 单一数据库的导出 708 44.1.2 多个数据库的导出 710 44.2 MySQL数据库文件的备份与恢复 710 44.2.1 MySQL的数据存储结构 711 44.2.2 数据库文件的备份和恢复操作 711 44.3 MySQL数据表的备份与恢复 712 44.3.1 数据表的备份 712 44.3.2 数据表的恢复 712 44.4 对数据库进行定时备份的设定方法 713 44.4.1 数据库备份脚本的编写 713 44.4.2 添加计划任务 714 44.5 MySQL数据库双机热备份的实现方法 715 44.5.1 双机热备份的工作原理 715 44.5.2 主服务器的配置 715 44.5.3 从服务器的配置 716 44.5.4 服务器的状态检测 717 44.6 小结 718 第45章 服务器安全协议与用户身份 第45章 验证 719 45.1 SSL与HTTPS简介 719 45.2 OpenSSL与mod_ssl模块的安装与配置 719 45.2.1 OpenSSL的安装与配置 719 45.2.2 mod_ssl模块的配置 720 45.3 服务器证书的生成与使用 721 45.3.1 证书的生成 721 45.3.2 在Apache服务器上配置使用服务 45.3.2 器证书 722 45.4 使用证书进行客户端用户的身份验证 723 45.4.1 证书的生成 723 45.4.2 Apache服务器的配置 725 45.4.3 客户端证书的导入 725 45.5 小结 726 第46章 日志记录的分析 727 46.1 Apache服务器的日志 727 46.1.1 访问日志的格式 727 46.1.2 错误日志的格式 728 46.1.3 日志的定制 729 46.2 Web日志分析的作用 730 46.3 Web日志分析工具介绍 731 46.3.1 AWStats工具介绍 731 46.3.2 Webalizer工具介绍 734 46.4 使用PHP来查看访问日志并对日志进行 46.4 简单分析 735 46.5 小结 737 第6篇 PHP的扩展应用 第47章 PHP与网络客户端 740 47.1 PHP访问远程Web页面 740 47.1.1 fsockopen函数 740 47.1.2 一个远程提交数据的实例 740 47.2 PHP访问FTP服务器 742 47.2.1 连接和断开FTP服务器 742 47.2.2 登录FTP服务器 743 47.2.3 获取文件列表 743 47.2.4 文件的上传、下载和删除 744 47.2.5 目录的创建和删除 746 47.3 PHP的命令行模式 746 47.3.1 PHP命令行程序的简介 746 47.3.2 执行参数的获取 747 47.3.3 一个使用命令行方式访问FTP的 47.3.3 实例 748 47.4 小结 751 第48章 PHP与XML-RPC、SOAP 752 48.1 XML-RPC简介 752 48.1.1 客户端请求的XML格式 752 48.1.2 服务器响应的XML格式 755 48.1.3 错误信息的XML格式 755 48.2 PHP与XML-RPC的结合实例 756 48.2.1 PHP的XML-RPC库的介绍 756 48.2.2 PHP服务器端页面的编写 757 48.2.3 PHP客户端页面的编写 758 48.3 SOAP简介 759 48.4 PHP的SOAP应用实例 759 48.4.1 SOAP扩展库的使用方法 759 48.4.2 服务器端的编写 760 48.4.3 客户端的编写 761 48.5 小结 761 第49章 PHP与Web Service 762 49.1 Web Service简介 762 49.2 WSDL、UDDI与Web Service 762 49.2.1 WSDL简介 762 49.2.2 UDDI简介 763 49.3 PHP与Web Service的交互操作 764 49.3.1 NuSOAP类库 764 49.3.2 PHP创建Web Service 765 49.3.3 PHP访问Web Service 767 49.4 小结 768 第50章 PHP与Ajax 769 50.1 Ajax简介 769 50.1.1 Ajax的工作原理 769 50.1.2 Ajax的优势与劣势 769 50.2 XMLHttpRequest的使用 770 50.2.1 Ajax的初始化 770 50.2.2 简单的服务器请求 771 50.2.3 HTML文件的读取 772 50.2.4 XML文件的读取 774 50.3 PHP与Ajax的交互 777 50.3.1 使用GET方式与PHP交互 777 50.3.2 使用POST方式与PHP交互 779 50.4 Ajax的应用实例 780 50.4.1 用户名唯一性验证的实现 781 50.4.2 动态列表框的实现 782 50.5 小结 784 第51章 PHP扩展的开发 785 51.1 PHP扩展开发的简介 785 51.2 使用VC++编写PHP扩展 785 51.2.1 PHP扩展开发的前期准备 786 51.2.2 PHP扩展代码模板的生成 787 51.2.3 模板代码的修改与编译 788 51.2.4 扩展模块的调用 790 51.3 一个扩展应用实例的开发——简单的 51.3 加密解密函数 791 51.3.1 加密函数的编写 791 51.3.2 解密函数的编写 792 51.3.3 测试代码的编写 793 51.4 小结 793

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧