Newsgroup: it.comp.lang.visual-basic
Titolo: [?]SQLDMO e VB

Domanda da un milione di dollari.
Ho scaricato gli esempi aggiornati as SP3 di SQLServer 2000.
Ho aperto le cartelle ed ho aperto la sezione SQLDMO dato che contiene del
codice interessante.
La prima cosa è il login.
il codice di seguito riportato è preso fedelmente dagli esempi MS
Private Sub Form_Load()
  On Error GoTo ErrorHandler
  Dim oSQLServerDMOApp As SQLDMO.Application
  Dim i As Integer
  'Use the SQL DMO Application Object to find the available SQL Servers
  Set oSQLServerDMOApp = New SQLDMO.Application
  Dim namX As NameList
  Set namX = oSQLServerDMOApp.ListAvailableSQLServers
  For i = 1 To namX.Count
    txtServer.AddItem namX.Item(i)
  Next
  'Show top server
  txtServer.ListIndex = 0
  Set oSQLServerDMOApp = Nothing
  Exit Sub
ErrorHandler:
  Set oSQLServerDMOApp = Nothing
  MsgBox Err.Description
End Sub
Naturalmente il codice vuole popolare la combobox txtServer (ottimo uso
della  notazione standard nominare un combobox con txt invece di cbo.....)
con tutte le sessioni SQLServer attive.
Ora sul mio computer ho SQLServer 2000 Developer eppure non trova alcuna
sessione aperta e naturalmente nameX rimane null e quindi .......
Domanda è:
Sto codice qui è corretto? Non credo dato che non funge, allora cosa devo
modificare per farlo funzionare? Dopo tutto è un esempio prodotto da
Microsoft per MSQLServer 2000 e VB6. Insomma possibile che nenache funzioni?
Eppure ho tutte le reference giuste, cosa diavolo succede che non va nulla?
Grazie a tutti

 ha scritto nel messaggio
news:VVBUc.151010$5D1.7...@news4.tin.it...

a dire il vero funziona =;-D
puoi eventualmente testare che namX non sia nothing, ma questo e' un altro
discorso...
relativamente alla tua istanza di SQL Server, prova verificare che almeno un
protocollo di rete sia abilitato utilizzando la Server Network Utiliy
(svrnetcn.exe)
spesso , in assenza di protocolli di rete abilitati, le chiamate in
broadcast per inlistare i server falliscono...
ListAvailableServer utilizza la funzione ODBC SQLBrowseConnect(), provvista
dalle librerie ODBC dell'installazione di Mdac;
e' un meccanismo che funziona in BroadCast, ed il risultato non e' mai
conclusivo, nel senso che il risultato e' sempre influenzato dalle risposte
dei vari Server sulla rete, dai loro tempi di risposta, etc.
fino a Mdac 2.5 il meccanismo di broadcast avveniva sul protocollo NetBios
(default per le installazioni di SQL Server 7.0), ed e' stato cambiato sul
protocollo TCP/IP UDP, (default per le installazioni di SqlServer 2000), in
ascolto sulla porta 1434: se i server non ascoltano sulla porta o non
risponono in tempo, non verranno inlistati.
Alcune regole base riguardo SQL Server 7.0:
- SQL Server deve esssere attivo ed in ascolto su Named Pipes (Win9x non e'
provvisto di Named Pipes, percui SQL Server su Win9x non e' mai in ascolto
su questo protocollo e non potra' mai essere inlistato);
- SQL Server deve essere chiaramente in funzione per rispondere alle
chiamate di BroadCast; esiste una finestra grigia di circa 15 minuti dopo lo
ShutDown del server che, alla richiesta di Browse Master nel dominio puo'
rispondere comunque positivamente alle richieste;
- La presenza di un router sulla rete interrompe le chiamate NetBIOS
broadcast, cio' chiaramente limita la visibilita' delle chiamate Broadcast;
- Solamente i server appartenenti al dominio saranno enumerati.
Con SQL Server 2000, usando Mdac 2.6 e superiori, le cose cambiano un poco,
in quanto il protocollo di default e' stato cambiato nei sockets TCP/IP e,
al posto di una chiamata broadcast NetBios, viene utilizzato TCP UDP per
rilevare i server.
La logica di relevazione precedente resta influenzata:
- SQL Server deve esssere attivo ed in ascolto;
- SQL Server deve esssere attivo ed in ascolto sui sockets TCP/IP;
- SQL Server deve esssere attivo ed in ascolto su computer
WinNT/Win2000/WinXP o Win9x;
- La presenza di un router sulla rete interrompe le broadcast se
quest'ultimo e' configurato in modo da non passare le chiamate UDP
broadcast, diversamente solo i server installati sullo stesso subnet
verranno inlistati;
E' necessario l'upgrade almeno al Service Pack 2 di SQL Server 2000 perche'
il metodo .ListAvailableServer funzioni correttamente, in quanto le versioni
precedenti dei Componenti Sql-DMO di SQL Server 2000 sono bacate in questa
area.
Il service pack 3a ha introdotto alcune novita' per prevenire futuri
problemi derivanti da worms simili a Slammer e virus tipo Safhire di
origine, proliferazione e contagio via Internt che hanno indotto Microsoft a
disabilitare di default i  protocolli di rete SuperSockets Network Protocols
per nuove installazioni di MSDE 2000. Istanze di SQL Server 2000 sp3a e/o
MSDE 2000 sp3a non saranno in ascolto sulla porta UDP 1434 quando
configurate di non 'ascoltare' alcun protocollo di rete, termimando di
inlistare tali istanze.
non ho ancora testato sotto Window XP sp2, ma sicuramente il Windows
Firewall attivato di default complichera' ulteriormente le cose, richiedendo
manuale intervento per aprire le porte TCP/IP richieste per le connessioni
saluti
-- 
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz/DbaMgr.shtm
 
http://italy.mvps.org
DbaMgr2k ver 0.8.0  -  DbaMgr ver 0.54.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual
interface)
--------- remove DMO to reply

 saluti
I sistemi sono
1 con WindowsXP Home (no firewall)
2 con WindowsXP Professional (1 no firewall, l'altro si con Firewall)


 .....
oSql -L
cosa ti restituisce?


 cosa ti restituisce?
oSql-L cosa mi restituisce in che senso?
Scusa ma non capisco.


prova ad eseguire
c:\>osql -L
al prompt dei comandi; il parametro -L listera' tutte le istanze
"accessibili"


 "accessibili"
Ok, ho fatto, mi dice che non esiste alcun server.
la cosa divertente č ceh se collego alla rete il mio portatile con una
istanza SQL Server aperta.... allora tutto funzina ed il comando mi ritorna
entrambi i server della rete, stessacosa per il codice dell'esempio.
In pratica se ho una sola istanza di SQLServer funzionante nella rete....
non viene vista, neanche se gira sullo stesso computer, se ne ho piů di una
(registrata opportunamente sul server del computer), allora il codice
funziona (sia SQLDMO che il comanda da prompt.
