Как проверить таблицу существует или не существует - PullRequest
5 голосов
/ 30 июня 2009

Как проверить, есть таблица или нет?

Использование VB 6.0

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

Вышеупомянутый код работает нормально, но если таблица не существует, он показывает «таблица не выходит»

Как проверить, существует ли таблица или нет таблицы?

Нужна помощь VB CODE?

Ответы [ 3 ]

4 голосов
/ 30 июня 2009

Если вы просто хотите удалить таблицу без сообщения об ошибке, вы можете использовать следующий SQL, если вы используете MySQL.

DROP TABLE t1 IF EXISTS

Другие базы данных имеют аналогичную функцию, но синтаксис другой. Чтобы сделать то же самое в MSSQL:

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

Хотя это выглядит очень некрасиво ... должен быть лучший синтаксис, чтобы получить тот же результат.

2 голосов
/ 04 июля 2009

Для 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
1 голос
/ 30 июня 2009

Вам лучше проверить наличие соответствующей таблицы, чем пытаться ее отбросить.

Синтаксис 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 на этой машине)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...