2009-06-30 165 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)