Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 10204|回复: 2

[已解决]请问,如何判断access数据库中,某个表是否存在,表中某Field是否存在?谢谢!

[复制链接]
发表于 2013-5-5 12:48 | 显示全部楼层 |阅读模式
请问,如何判断access数据库中,某个表是否存在,表中某Field是否存在?谢谢!
最佳答案
2013-5-5 13:00
本帖最后由 那么的帅 于 2013-5-5 13:03 编辑

如何判定一个表是否存在

方法一:
很多人问如何判定一个表是否存在于某个数据库,有人会回答,用msysobjects这个表来判定啊,这是个Access高级技巧。但是默认情况下 admin对系统表没有读取权限,你需要手动设定,这该怎么办哪?要么你去设定一下权限(相关方法在本站另有动画以及文章介绍,这里不再阐述)
现在说两种方法来解决判定问题 以下这种方法就是使用陷阱,造成一个错误,通过系统错误来判定某个表是否存在
这是个少有人介绍,但是很实用的技巧。
Function test()
     MsgBox TableIsIn("表2")
End Function
Function TableIsIn(TableName As String)
     TableIsIn = True
     On Error Resume Next
     Dim strSQL As String
     strSQL = "select * from " & TableName
     CurrentDb.Execute strSQL
     If Err.Number = 3078 Then
         TableIsIn = False
     End If
   
End Function
方法二:

通过写循环读取所有表的名字来判定表是否存在 Function searchTable(TableName As String) As Boolean
     searchTable = False
     Dim tbl As DAO.TableDef
     For Each tbl In CurrentDb.TableDefs
         If tbl.Name = TableName Then
             searchTable = True
             Exit For
         End If
     Next
End Function
'调用,比如要找名字是 aaa 的表是否存在: msgbox searchTable("aaa")
'如果存在返回 True,不存在返回 False


判断表中是否存在某个字段的函数
  1. Public Function IsExistField(ByVal sTableName As String, _
  2.                              ByVal sFieldName As String) As Booleanler
  3.     Dim fld As Field
  4.     Dim rs As DAO.Recordset
  5.     IsExistField = False
  6.     Set rs = CurrentDb.OpenRecordset(sTableName)
  7.     For Each fld In rs.Fields
  8.         If fld.Name = sFieldName Then
  9.             IsExistField = True
  10.             Exit For
  11.         End If
  12.     Next
  13.     rs.Close
  14.     Set rs = Nothing
  15.     Set fld = Nothing
  16.    
  17. ExitHere:
  18.     Set rs = Nothing
  19.     Set fld = Nothing
  20.     Exit Function
  21.    
  22. ErrorHandler:
  23.     MsgBox Err.Description, vbInformation, "提示"
  24.     Resume ExitHere
  25. End Function
复制代码
使用示例: IsExistField("订单表","订单日期")   '检测订单表中是否有订单日期字段




excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-5-5 13:00 | 显示全部楼层    本楼为最佳答案   
本帖最后由 那么的帅 于 2013-5-5 13:03 编辑

如何判定一个表是否存在

方法一:
很多人问如何判定一个表是否存在于某个数据库,有人会回答,用msysobjects这个表来判定啊,这是个Access高级技巧。但是默认情况下 admin对系统表没有读取权限,你需要手动设定,这该怎么办哪?要么你去设定一下权限(相关方法在本站另有动画以及文章介绍,这里不再阐述)
现在说两种方法来解决判定问题 以下这种方法就是使用陷阱,造成一个错误,通过系统错误来判定某个表是否存在
这是个少有人介绍,但是很实用的技巧。
Function test()
     MsgBox TableIsIn("表2")
End Function
Function TableIsIn(TableName As String)
     TableIsIn = True
     On Error Resume Next
     Dim strSQL As String
     strSQL = "select * from " & TableName
     CurrentDb.Execute strSQL
     If Err.Number = 3078 Then
         TableIsIn = False
     End If
   
End Function
方法二:

通过写循环读取所有表的名字来判定表是否存在 Function searchTable(TableName As String) As Boolean
     searchTable = False
     Dim tbl As DAO.TableDef
     For Each tbl In CurrentDb.TableDefs
         If tbl.Name = TableName Then
             searchTable = True
             Exit For
         End If
     Next
End Function
'调用,比如要找名字是 aaa 的表是否存在: msgbox searchTable("aaa")
'如果存在返回 True,不存在返回 False


判断表中是否存在某个字段的函数
  1. Public Function IsExistField(ByVal sTableName As String, _
  2.                              ByVal sFieldName As String) As Booleanler
  3.     Dim fld As Field
  4.     Dim rs As DAO.Recordset
  5.     IsExistField = False
  6.     Set rs = CurrentDb.OpenRecordset(sTableName)
  7.     For Each fld In rs.Fields
  8.         If fld.Name = sFieldName Then
  9.             IsExistField = True
  10.             Exit For
  11.         End If
  12.     Next
  13.     rs.Close
  14.     Set rs = Nothing
  15.     Set fld = Nothing
  16.    
  17. ExitHere:
  18.     Set rs = Nothing
  19.     Set fld = Nothing
  20.     Exit Function
  21.    
  22. ErrorHandler:
  23.     MsgBox Err.Description, vbInformation, "提示"
  24.     Resume ExitHere
  25. End Function
复制代码
使用示例: IsExistField("订单表","订单日期")   '检测订单表中是否有订单日期字段




回复

使用道具 举报

发表于 2013-5-5 13:43 | 显示全部楼层
不想通过错误的话,也可以通过OpenSchema获取数据库架构信息。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-14 10:47 , Processed in 0.235647 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表