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

Другое использование для volatile - обработчики сигналов. Если у вас есть такой код:

quit = 0;
while (!quit)
{
    /* very small loop which is completely visible to the compiler */
}

Компилятору разрешено замечать, что тело цикла не касается переменной quit, и преобразовывать цикл в цикл while (true). Даже если переменная quit установлена ​​в обработчике сигналов для SIGINT и SIGTERM; компилятор не может этого знать.

Однако, если переменная quit объявлена ​​как volatile, компилятор вынужден загружать ее каждый раз, потому что она может быть изменена в другом месте. Это именно то, что вы хотите в этой ситуации.

5
задан Kevin Worthington 30 March 2011 в 17:37
поделиться

3 ответа

Для 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
ответ дан 14 December 2019 в 08:58
поделиться

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

DROP TABLE t1 IF EXISTS

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

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

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

4
ответ дан 14 December 2019 в 08:58
поделиться

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

Синтаксис SQL зависит от сервера базы данных / engine, который вы используете, но для 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 на этой машине)

1
ответ дан 14 December 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: