2009-06-30 162 views
5

如何检查表是否存在?如何检查表是否存在

使用VB 6.0

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

上面的代码工作正常,但如果表不存在,那么显示“表不退出”

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

需要VB CODE帮助吗?

+0

我看到你是新的,并且注意到你没有用答案标记你的任何问题。不要忘了这样做,因为它不仅可以获得回答者的声望(点数),还可以将其标记为可能搜索相同答案的其他人的答案。 :) – Dusty 2009-06-30 20:15:50

回答

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 
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; 

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

+0

我忘记了关于INFORMATION_SCHEMA - 我似乎总是忘记它存在 - 尽管似乎花了我的Sql大部分时间用了最近的MySql!好决定 :) – Rob 2009-06-30 08:13:38

1

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

的SQL语法是依赖于你正在使用的数据库服务器/引擎,但是对于SQL Server,你可以使用类似:

的SQL Server 2000:

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

SQL服务器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)