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:
Попробуй поставить On Error Resume Next
Уже делал так, он весь сервер пропускает...а мне нужно обойти конкретные базы...
Цитата:
но некоторые базы находятся в off и выводит ошибку не выполняя до конца!!!
как я понял ошибка выводится только тех баз, которые находятся в off.
Тогда сделай так:
Код:
On Error GoTo lError
...тело макроса...
lError:
MsgBox "Описание ошибки: " & Err.Description & vbNewLine & "Код ошибки: " & Err.Number
Resume Next
...тело макроса...
lError:
MsgBox "Описание ошибки: " & Err.Description & vbNewLine & "Код ошибки: " & Err.Number
Resume Next
и посмотри какую именно ошибку он тебе говорит при работе с базой кот. находится в off и какую при работе с нормальной базой.
Хотя я что-то не понимаю... Ты же написал что ошибку у тебя выдает только с базой кот. находится в off.
Короче:
При подключении к серверу он выводит ошибку что к базе <имя базе> нет доступа и останавливает все подключение не выводя ничего, а хочу что бы он пропускал базу котороя находится в off и чтобы он вывел действующие базы...
Скорее всего ты даже авторизоваться не можешь при подключении к серверу (базе).
Нет, пароль указан, все нармально!!!У меня несколько баз и я ко всем подключаюсь нормально, а вот именно к этой ни хрена немогу!!!:(
Код:
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
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:
* - это по идеи вся информация, но он почему-то выводит только имена!!!
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
With ActiveSheet.QueryTables.Add(Connection:="OLEDB;" & Connection, Destination:=Range("A5"))
...
.CommandText = "exec sp_helpdb"
...
End With
sysdatabases - это системная таблица сервера баз данных, в которой хранится информация про все базы данных, а хранимка sp_helpdb просто преобразует данные из этой таблицы в читабельный вид - вот и все.
Спасибо!!!:)