程序员人生 网站导航

MicrosoftAccess秘密技巧和陷阱

栏目:access时间:2014-01-23 15:55:03

  不正确地调用Windows应用程序接口可能会产生一些意想不到的副作用以及潜在地对一个应用程序的代码及数据段的破坏正确地使用一个空的位指针在MicrosoftAccess中是十分必要的

  当对表格和报表进行操作时MicrosoftAccess有一个无正式文本的特性这个特性允许你从设计视窗性质sheetwindow中进行过程调用调用的方法是同时按下shift和F
  Microsoft AccessBasic提供了一个丰富的开发环境这个开发环境给你足够的灵活性和对MicrosoftWindows应用程序接口的控制同时保护你使你免遭用高级或低级语言开发环境开发时所碰到的各种麻烦不过许多优化有效数据和模块化方面只能是应用程序设计者才能使用开发者应致力于谨慎地使用算法除了一般的程序设计概念还有一些特别的存储空间的管理技术正确使用这些技术可以提高应用程序的执行速度减少应用程序所要好的存储资源提高速度和减少代码量

  你可以用几种技巧来提高你的编码速度但是却找不到有效的算法的替代者接下来的几点建议可以提高你的编码速度同时又减少你的应用程序消耗的存储空间

  使用整形数据类型进行数学运算

  即使MicrosoftAccess会使用一个联合处理器来处理浮点型算术整型数算术也总是要快一些当你的计算不含有小数尽量使用整型或长整型而不是变量或双整型整型除法同样也要比浮点除法要快在使用其他一些有效的数据类型时会警告没有任何东西可以替换有效的运算法则

  避免使用过程调用

  避免在循环体中使用子程序或函数调用每一次调用都因额外的工作和时间而给编码增大了负担每一次调用都要求把函数的局部变量和参数压栈而栈的大小是固定的不能随便加大并且同时还要于MicrosoftAccess共享

  谨慎使用不定长数据类型

  不定长数据类型提供了更大的灵活性比如说允许正确处理空值和自动处理溢出另外这种数据类型比传统的数据类型要大并消耗更多的存储空间前面还曾经提到过不定长数据类型的变量在数学计算中比较慢

  用变量存放经常使用的属性

  对变量进行查找和设置都比对属性进行这些操作要快如果你要得到或查阅一个属性值许多次那么把这个属性分配给一个变量并用这个变量来代替属性那么你的代码将要运行快得多例如在一个循环中你查阅某表格中得一个控制的属性那么在循环外把属性分配给一个变量然后在循环中用查询一个变量来代替查阅一个属性的方法要比较快

  预载表格

  当你的应用程序启动并且把它们的可见属性设置位false如果你安装了你所有的表格那么你的应用程序的性能会让你感觉挺快当你需要显示一个表格时你只需要把该表格的可见属性设置为true这要比安装一个表格要快得多需要记住的是为你安装的每个表格你都要从应用程序的全局堆中消耗存储空间

  AccessBasic中的陷阱

  在AccessBasic中经常碰到的陷阱是对动态连接库(DLLS)中的外部过程的调用当你提供程序给你的用户调用外部动态链接库时将出现使用警告否则你将得到一条错误信息试图用相同的函数定义安装模块

  使用唯一的别名

  在AccessBasic中如果你知道入口点(动态链接库中函数的名字)你可以调用动态链接库中的外部函数不过使用这一方法的限制性在于你只能声明外部函数一次如果你安装了调用了你的模块调用的相同的Windows应用程序接口你不会得到一个不为人所知的错误试图用相同的函数定义安装模块

  你尝试安装的模块要么是包含有相同的函数名要么是包含在已存在的模块中有的过程名删除这些过程在EDIT菜单中使用FIND命令找到重复的过程名要解决这一问题你需要使用一种叫做别名使用的技术这种技术允许你给你的过程一个独一无二的名字但是你选择的别名也有可能不是独一无二的所以要使你取的名字唯一你可以用初始值和下划线优先声明你所有从动态链接库中调用的过程比如声明getActiveWindow为Declarebcb_GetActiveWindowLib Kernel Alias GetActiveWindow ()AsInteger如何传递一个空指针给动态链接库一个空的位指针是有效的或是为一些动态链接库要求具有参数要指定一个空值使用&当你的函数调用一个过程并传递一个表达式&&指定一个位的空指针在函数声明中一个ASANY参数指示AccessBasic对那个参数不进行类型检查同时把值传递到被调用的函数下面的编码示范了一个正确的方法告诉你如何声明一个给动态链接库中的过程传递一个空指针参数的AccessBasic函数这段声明了WriteProfileString应用程序接口函数这个函数来自于外部Windows动态链接库kernelDeclareFunctionWriteProfileString Lib Kernel (ByVallpApplicationNameAs Any ByVal lpKeyName As Any ByVal lpStringAsAny)接下来的函数调用了一个外部过程位每个参数指定一个空值这将使WriteProfileString充满它的内部    

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐