如何检查表是否存在

时间:2009-06-30 07:59:42

标签: sql database vb6

如何检查表格是否存在?

使用VB 6.0

cmd.CommandText = "drop table t1"
cmd.Execute

上面的代码工作正常,但如果表不存在则会显示“table is not exit”

如何检查表存在或表不存在?

需要VB CODE帮助吗?

3 个答案:

答案 0 :(得分:4)

如果您只想删除表而不抛出错误消息,则可以使用以下SQL,如果您使用的是MySQL。

DROP TABLE t1 IF EXISTS

其他数据库具有类似的功能,但语法不同。在MSSQL中做同样的事情:

IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1') DROP TABLE t1;

虽然看起来非常丑陋..必须有更好的语法来获得相同的结果。

答案 1 :(得分:2)

对于Jet MDB(可能通常用于许多OLEDB提供商),您可以使用以下方法:

Private Sub Main()
    Dim cnDB As ADODB.Connection

    Set cnDB = New ADODB.Connection
    cnDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
            & "Jet OLEDB:Engine Type=5;Data Source='sample.mdb'"

    'Check presence of table --------------
    Dim rsSchema As ADODB.Recordset

    Set rsSchema = _
        cnDB.OpenSchema(adSchemaColumns, _
                        Array(Empty, Empty, "t1", Empty))
    If rsSchema.BOF And rsSchema.EOF Then
        MsgBox "Table does not exist"
    Else
        MsgBox "Table exists"
    End If
    rsSchema.Close
    Set rsSchema = Nothing
    '--------------------------------------

    cnDB.Close
End Sub

答案 2 :(得分:1)

你最好检查相关表的存在,而不是试图放弃它。

SQL语法依赖于您正在使用的数据库服务器/引擎,但对于Sql Server,您可以使用以下内容:

Sql Server 2000:

SELECT 1 as Exists FROM sysobjects WHERE name = 't1'

Sql Server 2005/2008:

SELECT 1 as Exists FROM sys.objects WHERE name = 't1'

然后您可以使用VB:

Dim rs as Recordset
Dim iExists as Integer

rs = cmd.Execute
On Error Goto DoesNotExist
rs.MoveFirst
iExists = CInt(rs!Exists)
DoesNotExist:
If iExists = 1 Then
 ' Put code here for if the table exists
Else
 ' Put code here for if the table does not exist
End If

注意:此代码需要整理并“生产”=)(即我实际上没有测试它是否有效,因为我在这台机器上没有VB6)