Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как обойти заблоченные базы...

7.1K
03 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Мой макрос в Excel запрашивает данные о базе в SQL Server выглядет это так:
Код:
Connection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;User ID=Name;Initial Catalog=database;Data Source=NameServ"
With ActiveSheet.QueryTables.Add(Connection:="OLEDB;" & Connection, Destination:=Range("A5"))
.CommandType = xlCmdSql
.CommandText = "exec sp_helpdb"
.Name = "mydata"
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With


...он должен выводить данные по всем базам, но некоторые базы находятся в off и выводит ошибку не выполняя до конца!!!
КАК МНЕ ОБОЙТИ БАЗЫ КОТОРЫЕ НАХОДЯТСЯ В OFF???:confused:
725
03 июля 2006 года
UnErase
190 / / 08.06.2006
Попробуй поставить On Error Resume Next
7.1K
03 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Уже делал так, он весь сервер пропускает...а мне нужно обойти конкретные базы...
725
03 июля 2006 года
UnErase
190 / / 08.06.2006
Цитата:
но некоторые базы находятся в off и выводит ошибку не выполняя до конца!!!



как я понял ошибка выводится только тех баз, которые находятся в off.

Тогда сделай так:

 
Код:
On Error GoTo lError

   ...тело макроса...

lError:
MsgBox "Описание ошибки: " & Err.Description & vbNewLine & "Код ошибки: " & Err.Number
Resume Next

и посмотри какую именно ошибку он тебе говорит при работе с базой кот. находится в off и какую при работе с нормальной базой.

Хотя я что-то не понимаю... Ты же написал что ошибку у тебя выдает только с базой кот. находится в off.
7.1K
03 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Извени наверно не так сформулировал!!!:)
Короче:
При подключении к серверу он выводит ошибку что к базе <имя базе> нет доступа и останавливает все подключение не выводя ничего, а хочу что бы он пропускал базу котороя находится в off и чтобы он вывел действующие базы...
725
03 июля 2006 года
UnErase
190 / / 08.06.2006
А ты пароль в строке подключения указал?

Скорее всего ты даже авторизоваться не можешь при подключении к серверу (базе).
7.1K
03 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Нет, пароль указан, все нармально!!!У меня несколько баз и я ко всем подключаюсь нормально, а вот именно к этой ни хрена немогу!!!:(
7.1K
03 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Код:
Connection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;User ID=Name;Initial Catalog=master;Data Source=ServName"
    With ActiveSheet.QueryTables.Add(Connection:="OLEDB;" & Connection, Destination:=Range("A5"))
        .CommandType = xlCmdSql
        .CommandText = "Select * from master.dbo.sysdatabases where status not in(512)"
        .Name = "mydata"
        .FieldNames = False
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = False
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With

Вот этот код выводит действующие базы, но выводит только имена баз, а мне нужно еще и объем, есть функция в SQL: "xec sp_helpdb" вот она выводит все информацию, но как ее связать с "Select * from master.dbo.sysdatabases where status not in(512)"?????????:confused:
* - это по идеи вся информация, но он почему-то выводит только имена!!!
725
04 июля 2006 года
UnErase
190 / / 08.06.2006
1) Попробуй через Enterprise Manager открыть базу master и просмотреть содержимое таблицы sysdatabases.

2) Он выводит только имена, потому что в таблице sysdatabases первое поле name (имя базы данных). Значит твой код выводит только первое поле.

3) Чтобы вывести все поля попробуй использовать RecordSet.

4) И наконец, не надо sp_helpdb связывать с select`ом. Просто сделай так:

 
Код:
Connection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;User ID=Name;Initial Catalog=master;Data Source=ServName"
    With ActiveSheet.QueryTables.Add(Connection:="OLEDB;" & Connection, Destination:=Range("A5"))

        ...

        .CommandText = "exec sp_helpdb"

        ...

    End With


sysdatabases - это системная таблица сервера баз данных, в которой хранится информация про все базы данных, а хранимка sp_helpdb просто преобразует данные из этой таблицы в читабельный вид - вот и все.
7.1K
04 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Спасибо!!!:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог