欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > 服务器教程 >

Access鲜为人知的秘密技巧和圈套

发表于2019-04-14 07:24| 次阅读| 来源网络整理| 作者session

摘要:Access鲜为人知的秘密技巧和圈套

Access鲜为人知的秘密技巧和圈套

  不正确地调用Windows运用程序接口能够会产生一些意想不到的副作用,以及潜在地对一个运用程序的代码及数据段的破坏。正确地利用一个空的32位指针在MicrosoftAccess中是非常必要的。
  
  当对表格和报表停止操作时,MicrosoftAccess有一个无正式文本的特性。这个特性容许你从设计视窗性质sheetwindow中停止过程调用,调用的方法是同时按下shift和F2键。
  
  MicrosoftAccessBasic提供了一个丰富的开发环境。这个开发环境给你足够的灵敏性和对MicrosoftWindows运用程序接口的控制,同时保护你使你免遭用高级或低级言语开发环境开发时所碰到的各种费事。不过,许多优化、有效数据和模块化方面只能是运用程序设计者能力利用。开发者应努力于审慎地利用算法。除了普通的程序设计概念,还有一些顺便的存储空间的治理技术,正确利用这些技术可能提高运用程序的执行速度,缩小运用程序所要好的存储资源,提高速度和缩小代码量。
  
  你可能用几种技巧来提高你的编码速度,然而却找不到有效的算法的替代者。接上去的几点建议可能提高你的编码速度同时又缩小你的运用程序耗费的存储空间。
  
  利用整形数据类型停止数学运算
  
  即使MicrosoftAccess会利用一个联结解决器来解决浮点型算术,整型数算术也总是要快一些。当你的计算不含有小数,尽量利用整型或长整型而不是变量或双整型。整型除法异样也要比浮点除法要快。在利用其余一些有效的数据类型时会警告:没有任何货色可能交流有效的运算法则。
  
  避免利用过程调用
  
  避免在循环体中利用子程序或函数调用。每一次调用都因额外的工作和工夫而给编码增大了累赘。每一次调用都要求把函数的部分变量和参数压栈,而栈的大小是固定的,不能随意加大,并且同时还要于MicrosoftAccess共享。
  
  审慎利用不定长数据类型
  
  不定长数据类型提供了更大的灵敏性,比如说容许正确解决空值和主动解决溢出。另外这种数据类型比传统的数据类型要大并耗费更多的存储空间。后面还曾经提到过,不定长数据类型的变量在数学计算中比较慢。
  
  用变量寄存常常利用的属性
  
  对变量停止查找和设置都比对属性停止这些操作要快。假设你要失去或查阅一个属性值许屡次,那么把这个属性分配给一个变量,并用这个变量来代替属性,那么你的代码将要运转快得多。例如,在一个循环中,你查阅某表格中得一个控制的属性,那么在循环外把属性分配给一个变量,然后在循环中用查询一个变量来代替查阅一个属性的方法要比较快。
  
  预载表格
  
  当你的运用程序启动并且把它们的可见属性设置位‘false’时,假设你装置了你一切的表格,那么你的运用程序的功能会让你感觉挺快。当你需求显示一个表格时,你只有要把该表格的可见属性设置为‘true’,这要比装置一个表格要快得多。需求记住的是,为你装置的每个表格,你都要从运用程序的全局堆中耗费存储空间。
  
  AccessBasic中的圈套
  
  在AccessBasic中常常碰到的圈套是对动态衔接库(DLLS)中的外部过程的调用。当你提供程序给你的用户,调用外部动态链接库时将出现利用警告;否则,你将失去一条谬误信息:试图用相反的函数定义装置模块。
  
  利用惟一的别名
  
  在AccessBasic中,假设你知道入口点(动态链接库中函数的名字),你可能调用动态链接库中的外部函数。不过,利用这一方法的限度性在于你只能申明外部函数一次。假设你装置了调用了你的模块调用的相反的Windows运用程序接口,你不会失去一个不为人所知的谬误:试图用相反的函数定义装置模块。
  
  你尝试装置的模块要么是蕴含有相反的函数名,要么是蕴含在已存在的模块中有的过程名。删除这些过程,在EDIT菜单中利用FIND命令找到反复的过程名,要处理这一成绩,你需求利用一种叫做“别名利用“的技术。这种技术容许你给你的过程一个唯一无二的名字。然而,你抉择的别名也有能够不是唯一无二的,所以要使你取的名字惟一,你可能用初始值和下划线优先申明你一切从动态链接库中调用的过程,比如,申明getActiveWindow为:Declarebcb_GetActiveWindowLibKernelAliasGetActiveWindow()AsInteger.如何传递一个空指针给动态链接库一个空的32位指针是有效的或是为一些动态链接库要求具备参数。要指定一个空值,利用0&。当你的函数调用一个过程并传递一个表达式0&,“&”指定一个32位的空指针,在函数申明中,一个ASANY参数批示AccessBasic对那个参数不停止类型反省,同时把值传递到被调用的函数。下面的编码示范了一个正确的方法,通知你如何申明一个给动态链接库中的过程传递一个空指针参数的AccessBasic函数。这段申明了WriteProfileString运用程序接口函数。这个函数来自于外部Windows动态链接库“kernel。DeclareFunctionWriteProfileStringLibKernel(ByVallpApplicationNameAsAny,ByVallpKeyNameAsAny,ByVallpStringAsAny)接上去的函数调用了一个外部过程,位每个参数指定一个空值。这将使WriteProfileString充满它的内部高速缓冲区,并且WIN.INI的任何变化写到磁盘上。重要的对这个函数不正确的利用会惹起普通性的保护缺点或修正你的WIN.INI文件。
  
  Functionn
  
  FlushIniCache()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)过程示范了如何利用转换无符号整型数的算术方法。第一个函数读进一个无符号整型数同时前往一个已经转变位长整型的值。第二个函数读入一个长整型值,然后前往一个转变成无符号整型的值。
  
  Function
  
  lArithUintToInt(nUintAsInteger)
  
  IfnUint<0Then
  
  lArithUintToInt=nUint+65536Else
  
  lArithUintToInt=nUintEndIfEndFunctionFunctionnArithIntToUnint(lBytesAsLong)
  
  IflBytes>32767Then
  
  nArithIntToUnint=lBytes-65536Else
  
  nArithIntToUnint=lBytes
  
  EndIf
  
  EndFunction
  
  按位操作方法
  
  下面的nBWUintToInt(lBytes)和lBWIntToUint(nUint)过程示范了如何利用Bitwise方法转换无符号整型数。第一个函数读进一个无符号整型数,然后前往一个已经转换成长整型的值。第二个函数读入一个长整型值,然后前往一个已经转换的无符号整型值。第二个函数中利用了揭示框的语句是为了防止当传递到函数的值大于64KB时会出现溢出信息。
  
  1010001111100000(-23584)
  
  AND1111111111111111(FFFF&)
  
  1010001111100000(41952)
  
  Thefunctionsfollow:
  
  Function
  
  lBWIntToUint(nUintAsInteger)lBWInt
  
  ToUint=nUintAnd&HFFFF&
  
  EndFunction
  
  FunctionnBWUintToInt(lBytesAsLong)DimnTempAsInteger
  
  IflBytes>65535Then
  
  MsgBoxYoupassedavaluelargerthan65535
  
  ExitFunction
  
  EndIf
  
  nTemp=lBytesAnd&H7FFFnBWUintToInt=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%n%fs&NewMacro&Enter
  
  Forms(szFormName).OnClose=NewMacroElse
  
  DoCmdSelectObjectA_MACRO,szCurrentValue,True
  
  SendKeys%dEndIfEndFunction参数szFormName,szControlName,szCurrentValue,和szReserved必须申明,即使你从不利用它们。当你的函数被调用时,这些参数总是要被传递的。假设它们没有被申明,那么MicrosoftAccess将不会调用你的函数。假设有一个参数被分配到Onclose事情上,那么后面的过程将打开一个宏,假设编辑控制是空,那么代码产生一个名为“NewMacro”的新宏,同时把编辑控制值设置为“NewMacro”。诚然,后面的例子并不是十分完美,但它确实阐明了要产生一个完美而有效的程序所必须的条件。