Выполнение SQL-скрипта из VB- или VBA-кода
Поскольку текст скрипта состоит из SQL-инструкций, мы можем выполнить последовательно его инструкции с использованием VB-кода. В листинге 20.1 приведен код, при помощи которого можно выполнить инструкции файла c:\script.sql. Если функция ADODB_ConnectedSQL в строке 11 возвращает значение True (что свидетельствует об установлении связи с базой Фирма на SQL Server), то в строке 18 открывается текстовый файл со скриптом. Далее в цикле Do While (строки 20–31) из файла последовательно считываются SQL-инструкции (разделенные словом go) выполняются (в строке 29) при помощи метода cn.Execute. Листинг 20.1 Выполнение SQL-скрипта из VB-кода 1: Dim cn As ADODB.Connection 2: 3: Sub Script_Loading() 4: 'устанавливает соединение, создает новую базу данных 5: 'и выполняет скрипт на SQL Server из файла "c:\script.sql", 6: 'считывая пакеты 7: 8: Dim TextLine As String 9: Dim StrSQL As String 10: 11: If ADODB_ConnectedSQL() Then 12: MsgBox "Похоже, соединение установлено..." 13: ' код, использующий установленное соединение: 14: 15: 'считываем в цикле текст инструкции до слова "go" и 16: 'выполняем его 17: 18: Open "c:\script.sql" For Input As #1 19: 20: Do While Not EOF(1) 21: 22: StrSQL = "" 23: TextLine = "" 24: Do While Not Trim(TextLine) = "go" And Not EOF(1) 25: Line Input #1, TextLine 26: If Not Trim(TextLine) = "go" Then StrSQL = StrSQL & " " & TextLine 27: Loop 28: 29: If Not StrSQL = "" Then cn.Execute StrSQL 30: 31: Loop 32: Close #1 33: 34: 'cn.Execute "" 35: 36: cn.Close ' закрыть соединение 37: 38: Else 39: MsgBox " Что-то не сложилось! " 40: End If 41: 42: End Sub 43: 44: 45: 46: Function ADODB_ConnectedSQL() As Boolean 47: 'устанавливает соединение для SQL Server 48: 49: On Error GoTo err_not_connection 50: 51: Set cn = New ADODB.Connection 52: cn.Provider = "SQLOLEDB" 53: cn.ConnectionString = _ 54: "DATABASE=Фирма;SERVER=VOVA;UID=sa;PWD=" 55: cn.Open 56: 57: ADODB_ConnectedSQL = True 58: Exit Function 59: 60: err_not_connection: 61: ADODB_ConnectedSQL = False 62: 63: End Function Код листинга 20.1 можно выполнить как из Visual Basic, так и из любого VBA-приложения. [1] Не очень доверяйте переводам наименований пакетов, меню и других программных средств.
|