Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Как узнать, присоединена ли база к серверу


Автор: yulia_redgirl 4.9.2007, 16:02
Здравствуйте! У меня возникла следующая проблема: я пишу скрипт на JavaScript для работы с бд в MS SQL 2000. Я пытаюсь подключить базу, которая быть может уже подключена... из-за этого неполадочки. Подскажите пожалуйста функцию с помощью которой можно выяснить, подключена ли база данных к серверу или нет!!! Очень надо!!!

Автор: LSD 4.9.2007, 16:42
Какая база данных, к какому серверу, о чем вообще речь?

Можно почетче и поподробней, что происходит.

Автор: yulia_redgirl 4.9.2007, 16:55
Хорошо, попробую поподробнее. Есть SQL Server 2000. Есть какая-то база Test.mdf. Я пишу инсталляционный пакет, в процессе, которого запускается скрипт на JavaScript. Вот фрагмент, который прикрепляет базу данных к серверу: 
Код

srv = new ActiveXObject("SQLDMO.SQLServer");  
......................
....................
try
{ 
    srv.AttachDB("Test",phisnamegtps);      
}
catch(E)
{
WS_Shell.Popup("База Test не присоединена! Обратитесь к администратору");      
}

Так вот, база Test не присоединяется, если она уже присоединена к серверу. Подскажите, пожалуйста, функцию, с помощью которой можно определить, присоединена ли база Test к серверу или нет!!! 
Теперь надеюсь, я понятно объяснила?..

Автор: LSD 4.9.2007, 17:17
Цитата(yulia_redgirl @  4.9.2007,  17:55 Найти цитируемый пост)
Теперь надеюсь, я понятно объяснила?

Так намного лучше smile

1. можно предварительно вызывать DetachDB (если надо гарантированно подключать новую базу)
2. можно просто проверять код ошибки
3. можно через свойство Databases получить список всех баз, и проверять подключена ли эта конкретная
(типа такого)
Код
Public Function isDBexists(ByVal dbName As String) As Boolean
  Dim oDB As SQLDMO.Database
  Dim rc As Boolean
  'reconnect to database
  oSQLServer.DisConnect
  oSQLServer.ReConnect
 
  rc = False
  For Each oDB In oSQLServer.Databases
    If oDB.SystemObject = False Then
        If Trim(UCase(oDB.Name)) = Trim(UCase(dbName)) Then
          rc = True
        End If
    End If
  Next oDB
 
  'set the return value
  isDBexists = rc
 
End Function

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)