《2022年MicrosoftAccess秘密技巧和陷阱access教程.docx》由会员分享,可在线阅读,更多相关《2022年MicrosoftAccess秘密技巧和陷阱access教程.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年MicrosoftAccess秘密技巧和陷阱access教程 不正确地调用Windows应用程序接口可能会产生一些意想不到的副作用,以及潜在地对一个应用程序的代码及数据段的破坏。正确地运用一个空的32位指针在MicrosoftAccess中是非常必要的。 当对表格和报表进行操作时,MicrosoftAccess有一个无正式文本的特性。这个特性允许你从设计视窗性质sheetwindow中进行过程调用,调用的方法是同时按下shift和F2键。Microsoft AccessBasic供应了一个丰富的开发环境。这个开发环境给你足够的敏捷性和对MicrosoftWindows应用程序接口的限
2、制,同时爱护你使你免遭用高级或低级语言开发环境开发时所遇到的各种麻烦。不过,很多优化、有效数据和模块化方面只能是应用程序设计者才能运用。开发者应致力于谨慎地运用算法。除了一般的程序设计概念,还有一些特殊的存储空间的管理技术,正确运用这些技术可以提高应用程序的执行速度,削减应用程序所要好的存储资源,提高速度和削减代码量。你可以用几种技巧来提高你的编码速度,但是却找不到有效的算法的替代者。接下来的几点建议可以提高你的编码速度同时又削减你的应用程序消耗的存储空间。运用整形数据类型进行数学运算即使MicrosoftAccess会运用一个联合处理器来处理浮点型算术,整型数算术也总是要快一些。当你的计算不
3、含有小数,尽量运用整型或长整型而不是变量或双整型。整型除法同样也要比浮点除法要快。在运用其他一些有效的数据类型时会警告:没有任何东西可以替换有效的运算法则。避开运用过程调用避开在循环体中运用子程序或函数调用。每一次调用都因额外的工作和时间而给编码增大了负担。每一次调用都要求把函数的局部变量和参数压栈,而栈的大小是固定的,不能随意加大,并且同时还要于MicrosoftAccess共享。谨慎运用不定长数据类型不定长数据类型供应了更大的敏捷性,比如说允许正确处理空值和自动处理溢出。另外这种数据类型比传统的数据类型要大并消耗更多的存储空间。前面还曾经提到过,不定长数据类型的变量在数学计算中比较慢。用变
4、量存放常常运用的属性对变量进行查找和设置都比对属性进行这些操作要快。假如你要得到或查阅一个属性值很多次,那么把这个属性安排给一个变量,并用这个变量来代替属性,那么你的代码将要运行快得多。例如,在一个循环中,你查阅某表格中得一个限制的属性,那么在循环外把属性安排给一个变量,然后在循环中用查询一个变量来代替查阅一个属性的方法要比较快。预载表格当你的应用程序启动并且把它们的可见属性设置位false时,假如你安装了你全部的表格,那么你的应用程序的性能会让你感觉挺快。当你须要显示一个表格时,你只须要把该表格的可见属性设置为true,这要比安装一个表格要快得多。须要记住的是,为你安装的每个表格,你都要从应
5、用程序的全局堆中消耗存储空间。AccessBasic中的陷阱在AccessBasic中常常遇到的陷阱是对动态连接库(DLLS)中的外部过程的调用。当你供应程序给你的用户,调用外部动态链接库时将出现运用警告;否则,你将得到一条错误信息:试图用相同的函数定义安装模块。运用唯一的别名在AccessBasic中,假如你知道入口点(动态链接库中函数的名字),你可以调用动态链接库中的外部函数。不过,运用这一方法的限制性在于你只能声明外部函数一次。假如你安装了调用了你的模块调用的相同的Windows应用程序接口,你不会得到一个不为人所知的错误:试图用相同的函数定义安装模块。你尝试安装的模块要么是包含有相同的
6、函数名,要么是包含在已存在的模块中有的过程名。删除这些过程,在EDIT菜单中运用FIND吩咐找到重复的过程名,要解决这一问题,你须要运用一种叫做“别名运用“的技术。这种技术允许你给你的过程一个独一无二的名字。但是,你选择的别名也有可能不是独一无二的,所以要使你取的名字唯一,你可以用初始值和下划线优先声明你全部从动态链接库中调用的过程,比如,声明getActiveWindow为:Declarebcb_GetActiveWindowLib Kernel Alias GetActiveWindow ()AsInteger.如何传递一个空指针给动态链接库一个空的32位指针是有效的或是为一些动态链接库要
7、求具有参数。要指定一个空值,运用0。当你的函数调用一个过程并传递一个表达式0,“”指定一个32位的空指针,在函数声明中,一个ASANY参数指示AccessBasic对那个参数不进行类型检查,同时把值传递到被调用的函数。下面的编码示范了一个正确的方法,告知你如何声明一个给动态链接库中的过程传递一个空指针参数的AccessBasic函数。这段声明白WriteProfileString应用程序接口函数。这个函数来自于外部Windows动态链接库“kernel。DeclareFunctionWriteProfileString Lib Kernel (ByVallpApplicationNameAs
8、Any, ByVal lpKeyName As Any, ByVal lpStringAsAny)接下来的函数调用了一个外部过程,位每个参数指定一个空值。这将使WriteProfileString充溢它的内部高速缓冲区,并且WIN.INI的任何改变写到磁盘上。重要的对这个函数不正确的运用会引起一般性的爱护故障或修改你的WIN.INI文件。FunctionnFlushIniCache()nFlushIniCache= WriteProfileString (0,0, 0)EndFunction如何从动态链接库中传递和接收无符号整型数经常有这样一种状况,要从外部动态链接库调用的过程中返回一个两个字
9、节长的无符号整型数。然而AccessBasic不支持这种数据类型。正确地计算这种数据类型须要把它从一个无符号整型数转换程AccessBasic长数据类型。AccessBasic整型数的范围使从-32768到32767。一个无符号整型数的范围是从0到65535。AccessBasic用最明显的一位来放置数值的符号位,所以当数值超过32767,第16位将被置成负数符号。要计算一个无符号整型数,你必需人工调整第16位。从无符号整型数转换到AccessBasic长整型数或从AccessBasic的长整型转换成无符号整型数有两种方法。第一种方法用到了最基本的数学运算(65535被无符号整型值加或减)。其
10、次种方法运用Bitwise操作。事实上,算术方法和Bitwise方法工作起来效果一样,只不过,算术方法可能可读性更强一些,而Bitwise方法在执行时可能更快一些。算术方法下面的lArithUintToInt(nUint)和lArithIntToUnint(lBytes)过程示范了如何运用转换无符号整型数的算术方法。第一个函数读进一个无符号整型数同时返回一个已经转变位长整型的值。其次个函数读入一个长整型值,然后返回一个转变成无符号整型的值。FunctionlArithUintToInt(nUint As Integer)If nUint < 0 ThenlArithUintToInt =
11、 nUint + 65536ElselArithUintToInt = nUintEnd IfEnd FunctionFunctionnArithIntToUnint(lBytes As Long)If lBytes > 32767 ThennArithIntToUnint = lBytes - 65536ElsenArithIntToUnint = lBytesEnd IfEnd Function按位操作方法下面的nBWUintToInt(lBytes)和lBWIntToUint(nUint)过程示范了如何运用Bitwise方法转换无符号整型数。第一个函数读进一个无符号整型数,然后返回
12、一个已经转换成长整型的值。其次个函数读入一个长整型值,然后返回一个已经转换的无符号整型值。其次个函数中运用了提示框的语句是为了防止当传递到函数的值大于64KB时会出现溢出信息。1010001111100000 (-23584)AND 1111111111111111 (FFFF)1010001111100000 (41952)The functionsfollow:FunctionlBWIntToUint(nUint As Integer)lBWIntToUint = nUintAndHFFFFEnd FunctionFunction nBWUintToInt(lBytes AsLong)Di
13、mnTemp As IntegerIf lBytes > 65535 ThenMsgBox You passed a value larger than 65535Exit FunctionEnd IfnTemp = lBytes And H7FFFnBWUintToInt=nTemp Or -(lBytes AndH8000)EndFunction留意:HFFFF要求“”在16进制数的末尾。这样能保证32位的16进制数通过16位的值表示出来。AccessBasic中的技巧在MicrosoftAccess中有一些以前无正式文本的特性,它们允许你指定过程,这个过程是从一个from或repo
14、rt的属性工作表窗中调用的。要进入最小窗口,只须要同时按下SHIFT和F2键。BUILDERFORM函数假如在一个模块中一个函数的定义是以“BuilderrForm起先同时包含一个类似于Onclose属性或事务标识符,按下SHIFT和F2键就可以调用这个过程。例如,当你在一个form的设计窗口中,而当前的光标落在属性窗口中的Onclose事务的编辑限制上,按下SHIFT和F2键将能调用BuilderFormOnclose函数。这运用于form和reports的大部分属性和全部事务。下面的代码将说明函数的格式:FunctionBuilderFormOnClose(szFormName As St
15、ring, szControlName AsString,szCurrentValue As String, szReserved As String)If szCurrentValue= ThenDoCmd SelectObject A_MACRO, , TrueSendKeys %n%fs New Macro EnterForms(szFormName).OnClose = New MacroElseDoCmd SelectObject A_MACRO, szCurrentValue, TrueSendKeys %dEnd IfEnd Function参数szFormName,szControlName,szCurrentValue,和szReserved必需声明,即使你从不运用它们。当你的函数被调用时,这些参数总是要被传递的。假如它们没有被声明,那么MicrosoftAccess将不会调用你的函数。假如有一个参数被安排到Onclose事务上,那么前面的过程将打开一个宏,假如编辑限制是空,那么代码产生一个名为“NewMacro”的新宏,同时把编辑限制值设置为“NewMac