虚拟主机行业最新资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:站长资讯>-> 操作系统-> Windows 2003教程
microsoftaccess秘密、技巧和陷阱_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,空间150元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
MicrosoftAccess秘密、技巧和陷阱

布莱恩C.布莱克曼

系统支持工程师,MicrosoftAccessBasic

摘要

  这篇文章概括了当使用MicrosoftAccess时,通过使用AccessBasic可以增加应用程序的执行速度,减少编码量,同时也减少在为MicrosoftWindows应用程序接口编程时、在开发应用程序中遇到的问题的技术。谨慎地使用变量和它所占用的存储空间能有效地减少一个应用程序所消耗的资源,同时也全面提高了它的性能。

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

  当对表格和报表进行操作时,MicrosoftAccess有一个无正式文本的特性。这个特性允许你从设计视窗性质sheetwindow中进行过程调用,调用的方法时同时按下shift和F2键。

介绍

  MicrosoftAccessBasic提供了一个丰富的开发环境。这个开发环境给你足够的灵活性和对MicrosoftWindows应用程序接口的控制,同时保护你使你免遭用高级或低级语言开发环境开发时所碰到的各种麻烦。不过,许多优化、有效数据和模块化方面只能是应用程序设计者才能使用。开发者应致力于谨慎地使用算法。除了一般的程序设计概念,还有一些特别的存储空间的管理技术,正确使用这些技术可以提高应用程序的执行速度,减少应用程序所要好的存储资源。

提高速度和减少代码量

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

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

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

避免使用过程调用

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

谨慎使用不定长数据类型

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

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

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

预载表格

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

AccessBasic中的陷阱

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

使用唯一的别名

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

  你尝试安装的模块要么是包含有相同的函数名,要么是包含在已存在的模块中有的过程名。删除这些过程,在EDIT菜单中使用FIND命令找到重复的过程名,要解决这一问题,你需要使用一种叫做“别名使用“的技术。这种技术允许你给你的过程一个独一无二的名字。但是,你选择的别名也有可能不是独一无二的,所以要使你取的名字唯一,你可以用初始值和下划线优先声明你所有从动态链接库中调用的过程,比如,声明getActiveWindow为:

  Declarebcb_GetActiveWindowLib"Kernel"Alias"GetActiveWindow"()AsInteger.

如何传递一个空指针给动态链接库

  一个空的32位指针是有效的或是为一些动态链接库要求具有参数。要指定一个空值,使用0&。当你的函数调用一个过程并传递一个表达式0&,“&”指定一个32位的空指针,在函数声明中,一个ASANY参数指示AccessBasic对那个参数不进行类型检查,同时把值传递到被调用的函数。

  下面的编码示范了一个正确的方法,告诉你如何声明一个给动态链接库中的过程传递一个空指针参数的AccessBasic函数。这段声明了WriteProfileString应用程序接口函数。这个函数来自于外部Windows动态链接库“kernel”。

DeclareFunctionWriteProfileStringLib"Kernel"(ByVallpApplicationNameAsAny,ByVallpKeyNameAsAny,ByVallpStringAsAny)

  接下来的函数调用了一个外部过程,位每个参数指定一个空值。这将使WriteProfileString充满它的内部高速缓冲区,并且WIN.INI的任何变化写到磁盘上。

重要的

  对这个函数不正确的使用会引起一般性的保护故障或修改你的WIN.INI文件。

FunctionnFlushIniCache()
  nFlushIniCache=WriteProfileString(0&,0&,0&)
EndFunction

如何从动态链接库中传递和接收无符号整型数

  常常有这样一种情况,要从外部动态链接库调用的过程中返回一个两个字节长的无符号整型数。然而AccessBasic不支持这种数据类型。正确地计算这种数据类型需要把它从一个无符号整型数转换程AccessBasic长数据类型。

  AccessBasic整型数的范围使从-32768到32767。一个无符号整型数的范围是从0到65535。AccessBasic用最明显的一位来放置数值的符号位,所以当数值超过32767,第16位将被置成负数符号。要计算一个无符号整型数,你必须人工调整第16位。

  从无符号整型数转换到AccessBasic长整型数或从AccessBasic的长整型转换成无符号整型数有两种方法。第一种方法用到了最基本的数学运算(65535被无符号整型值加或减)。第二种方法使用Bitwise操作。实际上,算术方法和Bitwise方法工作起来效果一样,只不过,算术方法可能可读性更强一些,而Bitwise方法在执行时可能更快一些。

算术方法

  下面的lArithUintToInt(nUint)和lArithIntToUnint(lBytes)过程示范了如何使用转换无符号整型数的算术方法。第一个函数读进一个无符号整型数同时返回一个已经转变位长整型的值。第二个函数读入一个长整型值,然后返回一个转变成无符号整型的值。

FunctionlArithUintToInt(nUintAsInteger)
  IfnUint<0Then
    lArithUintToInt=nUint 65536
  Else
    lArithUintToInt=nUint
  EndIf
EndFunction

FunctionnArithIntToUnint(lBytesAsLong)
  IflBytes>32767Then
    nArithIntToUnint=lBytes-65536
  Else
    nArithIntToUnint=lBytes
  EndIf
EndFunction

按位操作方法

  下面的nBWUintToInt(lBytes)和lBWIntToUint(nUint)过程示范了如何使用Bitwise方法转换无符号整型数。第一个函数读进一个无符号整型数,然后返回一个已经转换成长整型的值。第二个函数读入一个长整型值,然后返回一个已经转换的无符号整型值。第二个函数中使用了提示框的语句是为了防止当传递到函数的值大于64KB时会出现溢出信息。

    1010001111100000(-23584)
  AND1111111111111111(FFFF&)
    ----------------
    1010001111100000(41952)

Thefunctionsfollow:

FunctionlBWIntToUint(nUintAsInteger)
  lBWIntToUint=nUintAnd&HFFFF&
EndFunction

FunctionnBWUintToInt(lBytesAsLong)
  DimnTempAsInteger

  IflBytes>65535Then
    MsgBox"Youpassedavaluelargerthan65535"
    ExitFunction
  EndIf

  nTemp=lBytesAnd&H7FFF
  nBWUintToInt=nTempOr-(lBytesAnd&H8000)
EndFunction

注意:&HFFFF&要求“&”在16进制数的末尾。这样能保证32位的16进制数通过16位的值表示出来。

AccessBasic中的技巧

  在MicrosoftAccess中有一些以前无正式文本的特性,它们允许你指定过程,这个过程是从一个from或report的属性工作表窗中调用的。要进入最小窗口,只需要同时按下SHIFT和F2键。

BUILDERFORM函数

  如果在一个模块中一个函数的定义是以“BuilderrForm”开始同时包含一个类似于Onclose属性或事件标识符,按下SHIFT和F2键就可以调用这个过程。例如,当你在一个form的设计窗口中,而当前的光标落在属性窗口中的Onclose事件的编辑控制上,按下SHIFT和F2键将能调用BuilderFormOnclose函数。这使用于form和reports的大部分属性和所有事件。下面的代码将说明函数的格式:

FunctionBuilderFormOnClose(szFormNameAsString,szControlNameAsString,szCurrentValueAsString,szReservedAsString)

IfszCurrentValue=""Then
  DoCmdSelectObjectA_MACRO,"",True
  SendKeys"nfs"&"NewMacro"&"{Enter}"
  Forms(szFormName).OnClose="NewMacro"

Else
  DoCmdSelectObjectA_MACRO,szCurrentValue,True
  SendKeys"d"

EndIfEndFunction

参数szFormName,szControlName,szCurrentValue,和szReserved必须声明,即使你从不使用它们。当你的函数被调用时,这些参数总是要被传递的。如果它们没有被声明,那么MicrosoftAccess将不会调用你的函数。如果有一个参数被分配到Onclose事件上,那么前面的过程将打开一个宏,如果编辑控制是空,那么代码产生一个名为“NewMacro”的新宏,同时把编辑控制值设置为“NewMacro”。诚然,前面的例子并不是非常完美,但它的确说明了要产生一个完美而有效的程序所必须的条件。->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
文章页数:[1] 
相关主题
  • microsoft exchange 2000 server的internet配置_exchange server
  • microsoft smtp 服务器在第三方测试中可能显示为能够接受并中继电子邮件_exchange server
  • microsoft exchange server 2003的探讨_exchange server
  • microsoft exchange 2000 群集_exchange server
  • microsoft exchange 邮箱合并程序 (exmerge.exe) 信息_exchange server
  • Google

    热门文章
    ·轻松配置windows2003自带mail服务器_windows 2003
    ·windows server 2003全接触(1)_windows 2003
    ·远程如何修改windows 2003机器名_windows 2003
    ·在windows 2003中重置tcp/ip_windows 2003
    ·查看windows 2003系统日志的简单办法_windows 2003
    ·根治windows 2003操作系统登录及关机麻烦_windows 2003
    ·为windows 2003安全—层层设防_windows 2003
    ·windows2003系统优化大有玄机_windows 2003
    ·保障windows server 2003域控制器的安全性_windows 2003
    ·自己动手抠出2003中的iis6安装程序_windows 2003

    最新文章
    ·photoshop滤镜打造放射状炫彩背景特效_photoshop教程
    ·windows 2003 打sp1补丁无法安装的解决方法_windows 2003
    ·windows xp开机就打开小键盘解决办法_windows xp
    ·window2003 server的一些优化设置_windows 2003
    ·ado.net数据库连接_ado.net应用
    ·轻松架设windows 2003用户隔离ftp站点_windows 2003
    ·windows xp系统中如何实现批量命名_windows xp
    ·windows 2003服务器配置vpn实现各种网络环境vss协同开发_windows 2003
    ·解决w3wp.exe占用cpu和内存问题_windows 2003
    ·ado.net中的sql连接_ado.net应用

    相关主题
  • microsoft exchange 2000 server的internet配置_exchange server
  • microsoft smtp 服务器在第三方测试中可能显示为能够接受并中继电子邮件_exchange server
  • microsoft exchange server 2003的探讨_exchange server
  • microsoft exchange 2000 群集_exchange server
  • microsoft exchange 邮箱合并程序 (exmerge.exe) 信息_exchange server



  • 友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 一班在线
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机


    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
      打印  刷新  关闭
     


    联系我们  |  广告服务  |  免责声明  |  友情连接
    Copyright ?2005 - 2006 All Rights Reserved
    蜀ICP备05000045号