Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Pacchetto installazione con db Sql

Salve a tutti
Fino ad ora o lavorato con db Access 2000 e non ho avuto problemi con la
creazione dei pacchetti di installazione.
Ho provato ad utilizzare come db Sql 2000. Durante la realizzazione del
progetto di prova non ho avuto problemi, ma quando ho provato a creare il
pacchetto di installazionenel quale includevo il file .mdf e .log, mi dava
un messaggio di errore: " Errore nella creazione del file .cab. Verificare
di possedere le autorizzazioni ecc ";
Io lavoro sotto Win 2000 Professional e non ho nessuna password impostata;
per quanto riguarda la protezione del database ho usato la protezione del
SO.
Ciao
Fabio

 SO.
I file MDF e LDF sono bloccati quando SQL-Server è in esecuzione.
Devi spegnere il servizio, poi includi i tuoi file.
Ricorda però che all'installazione dovrai fare un Sp_Attach_db
Ciao
Alberto

 Ricorda però che all'installazione dovrai fare un Sp_Attach_db
Esatto.
Il flusso completo del setup è:
1) Copio il file fisico del database sul server (serve solo il mdf)
2) Eseguo l'attach del database con la SP_attach_db o con gli oggetti sqldmo
(vedi sotto...)
3) Crei gli eventuali login e users che servono alla tua app (via enterprise
manager o attraverso sqldmo)
ciao
ugo
Esempio uso Sqldmo per la attach (vedi Q240293):
Public Sub sAttachMDF(sSvrName As String, sUID As String, sPWD As String, _
                    sMDFName As String, sDBName As String)
'********************************************************************
'This procedure will check for the database on the MSDE Server. If the
'database exists it will then be attached to the ADP.
'
'Input:
'   sSvrName    The server to start
'   sUID        The user ID with which to start the server
'   sPWD        The user password
'   sMDFName    The name of the MSDE Database to be attached
'   sDBName     The name of the database
'
'Output:
'   Resolution of attach
'
'References:
'   Microsoft SQLDMO Object Library
'********************************************************************
Dim osvr As SQLDMO.SQLServer
Dim strMessage As String
Dim db As Variant
Dim fDataBaseFlag As Boolean
Dim sSource As String
On Error GoTo sCopyMDFTrap
    'The drive names used in FSO.Copyfile and oSvr.AttachDBWithSingleFile
    'need to match the locations for Program Files and MSDE on the
    'user's machine.
    'Initialize value.
    fDataBaseFlag = False
    Set osvr = CreateObject("SQLDMO.SQLServer")
    'Log onto database.
    osvr.Connect sSvrName, sUID, sPWD
    'Check for database on local MSDE Server
    'by looping through all database names on the local MSDE Server.
    For Each db In osvr.Databases
        If db.Name = sDBName Then 'The database exists.
            fDataBaseFlag = True
            Exit For 'Get out of loop.
        End If
    Next
    If Not fDataBaseFlag Then 'There is no database name match.
        'Attach to database.
        strMessage = osvr.AttachDBWithSingleFile(sDBName, _
         osvr.Databases("master").PrimaryFilePath & sMDFName)
    End If
ExitCopyMDF:
    osvr.DisConnect
    Set osvr = Nothing
Exit Sub
sCopyMDFTrap:
    MsgBox Err.Description
    DoEvents
    Resume ExitCopyMDF
Exit Sub
End Sub

> Ricorda però che all'installazione dovrai fare un Sp_Attach_db
Potresti spiegarti meglio?
Dove inserisco questo comando?
Grazie
Fabio


Oddio
Ti ringrazio Ugo. Farò un tentativo.
Ciao
Fabio

 Dove inserisco questo comando?
Beh, a parte che il codice di Ugo mi sembra abbastanza chiaro (o quantomeno
valido per un bel copia e incolla), ricorda che Sql-Server è un sistema
DB-Server, cioè tu non puoi accedere ai dati direttamente sul file.
Quindi, presso il cliente dovrà essere presente una installazione di
Sql-Server o MSDE, alla quale tu dovrai far gestire il database. E questa
fase, in cui tu "Attacchi un DB" al server, è appunto l'esecuzione di
Sp_Attach_DB (ma su Books On Line di Sql-Server è spiegato molto bene).
Altrimenti, è possibile eseguire ciò che normalmente si fa con Enterprise
Manager, attraverso SqlDmo, e qui puoi usare il codice di Ugo.
Ciao
Alberto

 ha scritto nel messaggio
news:6y8A9.299$744....@news1.tin.it...
<cut>
salve Fabio,
malgrado quanto riportato sia da Albe° che da Ugo, mi permeto di dissentire
e ti riporto un thread con la mia opinione in merito
http://groups.google.com/groups?hl=it&lr=&ie=UTF-8&selm=tojg9.102060%24pX1.3
539911%
40news2.tin.it
saluti
Andrea Montanari
montanar...@virgilio.it
http://utenti.lycos.it/asql/index.html
(my vb6+sql-dmo little try to provide MS MSDE 1.0 a visual interface) ver
0.0.46
--------- remove DMO to reply

ho dato un'occhiata al tuo post dato che ero interessato all'argomento.....
sono d'accordo con te. Io, per esempio, mi sono creato i vari files .SQL che
lancio attraverso l'utility osql di SQL Server. I vari script mi creano il
db, tutte le tabelle, impostano gli utenti e i permessi e cosě via.....
con hai detto tu, lo reputo piů semplice: se mi cambia la struttura del db,
non faccio altro che aggiornare il file .SQL distribuito ed č fatta.....
senza contare che cosě facendo, devo mettere nei riferimenti del progetto
SQL-DMO, per poi poterlo distribuire, il che non č molto semplice dati i
continui conflitti di DLL, errori vari nel packaging e cosě via.....
molto meglio richiamare osql tramite l'istruzione Shell di VB.......
good coding!!!
--
Igor Damiani
ig...@igordamiani.it
http://www.igordamiani.it
ICQ : 11847262

 539911%
40news2.tin.it
Dal tuo intervento:
"ci sono troppi rischi di problemi di Utenti Orfani, collation/sort order
differenti ed anche un db non in linea con il Model database dell'utente..."
Concordo:
in effetti un "classico" delle detach/attach è l'incontro di login/users
non coincidenti.
Per pulire la configurazione dovresti anche eseguire le dovute
dropuser / droplogin...
Sempre dal tuo di allora:
"personalmente provvede a fornire un inseme di script di DDL ed INSERT INTO,
che una mia piccola applicazione lancia in sequenza sia per la creazione
della struttura che per prepopolare alcune tabelle, il tutto utilizzando
Sql-DMO (si potrebbe anche usare ADO)..."
Questa è _indubbiamente_ la strada migliore.
Ciò non toglie che in situazioni semplificate e/o sotto il controllo
diretto dello sviluppatore o del responsabile ced anche la
strada dell' attach sia praticabile.
ciao
ugo

 wrote in message
gx9A9.683$Yw.1...@news2.tin.it...

Grazie
Farò tesoro di quanto appreso.
Ciao
Fabio

Scusa se mi permetto, ti segnalo che il tuo
Outlook Express 5.00.2615.200 non rispetta
lo standard nelle risposte ai messaggi, che
prevede che il subject inizi con "Re:"
(senza doppi apici).
Trovi tutte le informazioni sul perche' vada
rispettato lo standard e come fare per rimediare
al seguente indirizzo:
http://vene.dave.it/mail/patch.asp
-- 
hth, hal

 molto meglio richiamare osql tramite l'istruzione Shell di VB.......
salve Igor,
ti ricordo che putroppo le chiamate in shell (meglio shellexecute) a oSql
NON settano il DOS error level su piattaforma Win9x... questo e' stato il
motivo per il quale sconsiglio questa via e personalemte ho optato per Dmo,
anche se anche ADO puo' andare benissimo..
