Newsgroup: it.comp.lang.visual-basic
Titolo: non cancella in sqlserver

Cari colleghi,
dopo aver creato un nuovo database in sqlserver con l'aiuto della libreria
SQLDMO, se provo a eliminarlo subito con questo codice :
    '- cancellazione database -
    Call oSQLServer.connect(svr, uid, pwd)
    Set oDatabase = oSQLServer.Databases(tb)
    oDatabase.Remove
    '- cancellazione login -
    Set oLogin = oSQLServer.Logins(tb)
    oLogin.Remove
    Set oDatabase = Nothing
    Set oLogin = Nothing
    oSQLServer.Close
    Set oSQLServer = Nothing
mi esce sempre il seguente messaggio di errore : "cannot drop  the database
.. because it is currently in use"
vi anticipo che dopo la creazione chiudo di tutto :
    Set oRole = Nothing
    Set oUser = Nothing
    Set oLogFile = Nothing
    Set oDBFileData = Nothing
    Set oLogin = Nothing
    Set oDatabase = Nothing
    oSQLServer.Close
    Set oSQLServer = Nothing
    mConn.CommitTrans
    Call CloseConnection(mConn)
esiste qualche temporizzatore da settare ? il bello č che se aspetto un po
.. il tutto funziona ....
help
grazie


Probabilmente esiste ancora uno spid attivo su quel DB.
Per stare tranquillo, imposta DefaultDatabase della connessione (sia quella
che usi per la creazione che quella per l'eliminazione) a "Master", cosě sei
sicuro di non essere tu stesso lo spid attivo sul DB.
Ciao
Alberto


avrei dei problemi ad impostare come database di default il master, visto
che mi connetto in questo modo :
connect = "Provider=MSDASQL.1;DRIVER=SQL Server;SERVER=" & svr &
";DATABASE=" & tb & ";UID=" & tb & ";PWD=" & tb
dove tb č il nuovo db che mi creo
e dove per ogni tabella uso una sintassi tipo :
    str = "CREATE TABLE [dbo].[Tabella] (" & _
            "[Id] [int] NOT NULL ," & _
            "[Codice] [nvarchar] (30) NOT NULL ," & _
            "[Descrizione] [nvarchar] (120) NULL ," & _
            ") ON [PRIMARY]"
    mConn.Execute str
altra soluzione ? oppure esiste qualche metodo SQLDMO che mi permetta di
ottenere la stessa cosa che dici te ?
ho provato a usare KillProcess ma non riuscito a capirci molto
grazie

     mConn.Execute str
Beh, se ti è assolutamente indispensabile utilizzare la sintassi
semplificata, effettivamente non c'è altra soluzione.
Però considera che la sintassi corretta prevede di aggiungere, prima di dbo,
il nome del database target, per cui tu puoi eseguire il Create anche mentre
lo spid è attivo su Master.
Comunque, se anche vuoi proprio entrare nel DB, e creare le tabelle con la
sintassi breve, puoi sempre spostare lo spid su un altro DB con un semplice
USE MASTER.
Verifica che le autorizzazioni ti consentano di stare su Master, ma direi
che non ci sono problemi, visto che fai sia il Create che il Drop di un
Database intero.
Ciao
Alberto

 ho provato a usare KillProcess ma non riuscito a capirci molto
salve,
lascia stare gli SPID...
mischiando ADO e DMO ti trovi probabilmente nei pasticci perche' ADO
sicuramente manitene uno SPID attivo a causa del Connection Pooling...
se proprio vuoi continuare a mischiare, utilizza la sintassi a tre livelli
proposta da Albe ([nomeDB].[owner].[oggetto]), oppure abbandona ADO ed
utilizza il metodo ExecuteImmediate dell'oggetto database o server di DMO..
saluti
Andrea Montanari
montanar...@virgilio.it
http://www.asql.biz/DbaMgr.shtm
DbaMgr2k ver 0.2.0  -  DbaMgr ver 0.48.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual
interface)
--------- remove DMO to reply