如果高手没有时间细看,请直接看最后一行的提问.'创建表的代码
Dim DefDatabase As Database
Dim DefTable As TableDef, DefField As Field
Dim a
dim b
b=Format(Time, "h")
Set DefDatabase = Workspaces(0).OpenDatabase(App.Path &  "\data.mdb", 0, False)
Set DefTable = DefDatabase.CreateTableDef("b")
Set DefField = DefTable.CreateField("姓名, dbText, 18)
DefTable.Fields.Append DefField
Set DefField = DefTable.CreateField("年龄", dbText, 8)
DefTable.Fields.Append DefField
Set DefField = DefTable.CreateField("班级", dbText, 8)
DefTable.Fields.Append DefField
'表追加
DefDatabase.TableDefs.Append DefTable我想每小时建一个表.把每个小时段输入的数据记录到相应的小时的表中.考虑到在某一个小时中,可能软件会启动或退出.
如果在软件启动时检测本小时时段的表是否存在,如果存在则提示表已存在;如果隔了好几个小时后启动软件,那么表不存在,就新建一个表.问题如下:
如何检测一个数据库中的表是否已存在?

解决方案 »

  1.   

    Public Function ifExistTable(strTableName As String) As Boolean
    On Error Resume Next
        Dim DB As Database
        Dim i As Long    Set DB = DBEngine.Workspaces(0).Databases(0)    DB.TableDefs.Refresh
        For i = 0 To DB.TableDefs.Count - 1
            If strTableName = DB.TableDefs(i).Name Then
                ' 表存在
                ifExistTable = True
                Exit For
            End If
        Next i
        Set DB = Nothing
    End Function
      

  2.   

    Dim appdisk$
    Private Sub Form_Click()
       On Error Resume Next
       appdisk = IIf(Right(App.Path, 1) = "\", App.Path, App.Path & "\")
       Set Conn = CreateObject("ADODB.Connection")
       Conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & appdisk & "bwscale.mdb"
       Set rs = Conn.execute("bwcust")
       MsgBox IIf(Err.Number <> 0, "表不存在", "表存在")
    End Sub
      

  3.   

    上面二楼和三楼的兄弟啊,我用的还是access数据库  而且用的是DAO连接的啊。
    这样可以用吗?
      

  4.   

    可以用的,你试看不就知道啦......Dim appdisk$, SJKnm$, Tablenm$, TabYN As Boolean
    Private Sub Form_Click()
       On Error Resume Next
       appdisk = IIf(Right(App.Path, 1) = "\", App.Path, App.Path & "\")
       SJKnm = appdisk & "bwscale.mdb"
       Tablenm = "cbm666"
       Set Conn = CreateObject("ADODB.Connection")
       Conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & SJKnm
       Set rs = Conn.execute(Tablenm)
       TabYN = IIf(Err.Number <> 0, False, True)
       If TabYN Then
          MsgBox "表已存在"
       Else
          Call CreateTable(SJKnm, Tablenm)
       End If
    End SubPublic Sub CreateTable(MDBnm$, Tabnm$)
       On Error GoTo Errhandler
       Dim DefDatabase As Database
       Dim DefTable As TableDef, DefField As Field
       Set DefDatabase = Workspaces(0).OpenDatabase(MDBnm, 0, False)
       Set DefTable = DefDatabase.CreateTableDef(Tabnm)
       '****************** 定义表与字段 ****************
       Set DefField = DefTable.CreateField("姓名", dbText, 8) '建立姓名字段为8个字符型
       DefTable.Fields.Append DefField
       Set DefField = DefTable.CreateField("性别", dbText, 2) '建立性别字段为2个字符型
       DefTable.Fields.Append DefField
       DefField.AllowZeroLength = True '该字段允许为空
       Set DefField = DefTable.CreateField("年龄", dbInteger, 3) '建立年龄字段为3个的常整型
       DefTable.Fields.Append DefField '字段追加
       DefDatabase.TableDefs.Append DefTable '表追加
       '***********************************************
       MsgBox "新表已建立完成"
       Exit Sub
    Errhandler:
       MsgBox "数据库不存在或其它错误", vbCritical
    End Sub
      

  5.   

    要在工程引用 Microsoft DAO 3.6 Object Library
      

  6.   

    就是对应DAO的,不是ADO,你试试就知道可以用不
      

  7.   

    很久没用过ACCESS了,
    印象中ACCESS也能提供类似于SQL的系统表,可以查询表名是否存在
      

  8.   

    cbm666 说的好用些.谢谢! cso 的虽然没有用起来,但也要谢谢