Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->数据库应用 ->Access ->正文

Microsoft Access秘密、技巧和陷阱 

来源:Linuxdby.com 作者:Webmaster 时间:2007-06-03 点击: [收藏] [投稿]


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

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

算术方法

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

Function lArithUintToInt (nUint As Integer)
  If nUint < 0 Then
    lArithUintToInt = nUint + 65536
  Else
    lArithUintToInt = nUint
  End If
End Function

Function nArithIntToUnint (lBytes As Long)
  If lBytes > 32767 Then
    nArithIntToUnint = lBytes - 65536
  Else
    nArithIntToUnint = lBytes
  End If
End Function

按位操作方法

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

    1010001111100000 (-23584)
  AND 1111111111111111 (FFFF&)
    ----------------
    1010001111100000 (41952)

The functions follow:

Function lBWIntToUint(nUint As Integer)
  lBWIntToUint = nUint And &HFFFF&
End Function

Function nBWUintToInt(lBytes As Long)
  Dim nTemp As Integer

  If lBytes > 65535 Then
    MsgBox "You passed a value larger than 65535"
    Exit Function
  End If

  nTemp = lBytes And &H7FFF
  nBWUintToInt = nTemp Or -(lBytes And &H8000)
End Function

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

Access Basic中的技巧

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

BUILDER FORM函数

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

Function BuilderFormOnClose (szFormName As String, szControlName As String, szCurrentValue As String, szReserved As String)

If szCurrentValue = "" Then
  DoCmd SelectObject A_MACRO, "", True
  SendKeys "%n%fs" & "New Macro" & "{Enter}"
  Forms(szFormName).OnClose = "New Macro"

Else
  DoCmd SelectObject A_MACRO, szCurrentValue, True
  SendKeys "%d"

End If End Function

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

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:保护Access 2000数据库的安全   下一篇:步步精细教你AS/400 DB2数据导入Access

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号