设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2781|回复: 8
打印 上一主题 下一主题

[表] 各位老师,我想请教一下如何判断一个表中存在某一个字段?

[复制链接]
跳转到指定楼层
1#
发表于 2011-12-25 17:15:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
比如我想判断当前数据库的所有表里,那些表存在"项目编号"字段,如何做呢?或者简单点,判断"订单表"这个表中是否有"项目编号"字段?谢谢各位赐教啊
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-12-25 17:18:01 | 只看该作者
本帖最后由 Henry D. Sy 于 2011-12-25 18:10 编辑

可以用ado,dao
3#
发表于 2011-12-25 18:20:22 | 只看该作者
估计表关系没建立起来,或者关系很混乱。。。。在设计数据库之初,就应该想好哪些表需要这个字段,哪些不需要。而不是等到做得差不多了再回头去找这些字段。
ADO当然可以做,不过个人觉得没这个必要。在工具\关系(access 2003版)里列出全部表,重新建立表与表之间的关系,并设置好是否级联删除等等。这样既可以重新理清表关系,进而可以思考哪些字段可以省却,或者哪些表可以拆分等等。
至于哪几张表有木有这个字段,相信重新理清关系后,应该是心中有数了。此外,还可以吸取教训:没规划好之前,千万别动工。正如没图纸之前,建房子大部分都可能是楼歪歪楼脆脆一样。
4#
 楼主| 发表于 2011-12-25 20:33:19 | 只看该作者
roych 发表于 2011-12-25 18:20
估计表关系没建立起来,或者关系很混乱。。。。在设计数据库之初,就应该想好哪些表需要这个字段,哪些不需 ...

大哥你说的没错!我就是设计了一堆东西,但是没建立任何表关系!!所以我的很多代码都是做的重复工作.我做这个东西是边学边做.学到哪一步了做到哪一步,现在我的系统马上要上线了,到处拼装修改了一堆的代码.目前是遇到了这个问题,不知您可否赐教?
5#
 楼主| 发表于 2011-12-25 20:35:03 | 只看该作者
roych 发表于 2011-12-25 18:20
估计表关系没建立起来,或者关系很混乱。。。。在设计数据库之初,就应该想好哪些表需要这个字段,哪些不需 ...

还有一点,我现在做的是access+sqlserver的系统开发模式,用的是access的链接表.如果我建立表关系,是在sql2000里做,还是在access里做?
6#
 楼主| 发表于 2011-12-25 20:47:57 | 只看该作者
本帖最后由 godzhong 于 2011-12-25 20:52 编辑

自己搜索方法了!参考了andymark 老大的代码!谢谢诸位了!  
   Dim Rs As New ADODB.Recordset
    Dim Conn As New ADODB.Connection
    Set Conn = CurrentProject.Connection
'td.name为for each各个表得来的表名称
    Rs.Open "select * from " & td.Name, Conn, adOpenDynamic, adLockOptimistic
    For i = 0 To Rs.Fields.Count - 1
        If Rs.Fields(i).Name = "项目编号" Then
           msgbox "存在项目编号字段"
           
        End If
    Next
    Set Conn = Nothing
    Set Rs = Nothing


因为没做表关系,所以造成了重复工作.我发现我的很多表都重复设计了!这方面之前考虑不周到还要多向大家学习!{:soso_e183:}
7#
发表于 2011-12-25 21:08:50 | 只看该作者
  1. Private Sub Command0_Click()
  2. '    getTblName "日期"
  3.    
  4.     MsgBox IsFldNameExist("订单列表", "日期")
  5.    
  6. End Sub

  7. Sub getTblName(strFiledName As String)
  8.     Dim tbl As DAO.TableDef
  9.     Dim rs As DAO.Recordset
  10.     Dim i As Integer
  11.     Dim strtblName As String
  12.     On Error Resume Next
  13.     For Each tbl In CurrentDb.TableDefs
  14.         If Left(tbl.Name, 4) <> "Msys" And Left(tbl.Name, 1) <> "~" Then
  15.             Set rs = CurrentDb.OpenRecordset(tbl.Name)
  16.             For i = 0 To rs.Fields.Count - 1
  17.                 If rs.Fields(i).Name = strFiledName Then
  18.                     strtblName = strtblName & tbl.Name & ";"
  19.                     Exit For
  20.                 End If
  21.             Next
  22.             rs.Close
  23.         End If
  24.     Next
  25.     MsgBox strtblName
  26.     Set rs = Nothing
  27.     Set tbl = Nothing
  28. End Sub

  29. Public Function IsFldNameExist(tblName As String, fldName As String) As Boolean
  30.     Dim rs As New ADODB.Recordset
  31.     Dim i As Integer
  32.     rs.Open tblName, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
  33.     For i = 0 To rs.Fields.Count - 1
  34.         If rs.Fields(i).Name = fldName Then
  35.             IsFldNameExist = True
  36.             Exit For
  37.         End If
  38.     Next
  39.     rs.Close
  40.     Set rs = Nothing
  41. End Function
复制代码
8#
发表于 2011-12-25 21:14:17 | 只看该作者
本帖最后由 Henry D. Sy 于 2011-12-26 11:35 编辑

一个是在所有表中寻找有特定字段的表名
一个是在特定的表中判断是否存在特定的字段。
两个都给你!

点击这里给我发消息

9#
发表于 2011-12-26 11:00:32 | 只看该作者
根据字段名求表:

  1. Function getTalbleList(ByVal fldName As String)
  2.    Dim conn As ADODB.Connection
  3.    Set conn = CurrentProject.Connection
  4.    Dim rs As ADODB.Recordset
  5.    
  6.    Dim s As String, f As String
  7.    
  8.    f = "COLUMN_NAME='" & fldName & "'"
  9.    
  10.    Set rs = conn.OpenSchema(adSchemaColumns)
  11.    rs.Filter = f
  12.    Do While Not rs.EOF()
  13.       s = s & rs("TABLE_NAME") & ", "
  14.       
  15.       rs.MoveNext
  16.    Loop
  17.    rs.Close
  18.    Set rs = Nothing
  19.    
  20.    If Len(s) > 0 Then s = Left(s, Len(s) - 2)
  21.    getTalbleList = s
  22. End Function
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-14 12:10 , Processed in 0.099981 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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