Newsgroup: it.comp.software.database
Titolo: Create Database....

Salve!
Premetto che sviluppo in Java, Delphi e Visual Basic.
Ho avuto a che fare ultimamente con i seguenti database: Oracle, DB2,
PostgreSql, MySql, Sql Server 7.
Ho notato che alcuni database non danno la possibilità di creare un database
se l'istruzione del Create database non viene eseguita nei Tool Manager
messi a disposizione dal database stesso. Mi spiego. Mi servirebbe creare un
nuovo database da programma. Interbase o Sql Server 7.0 ad esempio, non
accetta l'istruzione Create Database....se gli viene inviata dal tool che
sto sviluppando. Funziona solo se la faccio eseguire nella finestra messa a
disposizione dal database per eseguire le istruzione Sql. Mentre, con
PostgreSql funziona tutto correttamente.
Qualcuno mi sa spiegare se ci sono questi vincoli sui vari database?
Se è così è veramente una fregatura. Perchè non dare la possibilità di
creare un nuovo database da fuori....
Grazie!

 creare un nuovo database da fuori....
Scelte di marketing fondamentalmente. 
Davide

 ha scritto nel messaggio
news:aajidn$b5k5i$1...@ID-134361.news.dfncis.de...

Questo è un Crosspost!!

Oltre a questo non sai dire più nulla?


No perchè ti ha già risposto Davide Bianchi!

 wrote in message
news:aajidn$b5k5i$1...@ID-134361.news.dfncis.de...

Non saprei dirti per quanto riguarda gli altri, ma con SQL Server
puoi sicuramente farlo.
In coda allego 3 script .vbs che fanno vedere due tecniche
per crearli tramite il modello ad oggetti SQLDMO (il vincolo
pero' e' che poi sia installato anche sulla macchina) ed uno
utilizzando ADO.
Usano tutti la Trusted Connection per collegarsi a SQL e prima di
eseguirli va cambiato il nome del server.
Sono molto semplici, creano un database di nome MyDB fatto da
un Master Data File da 2MB ed un file di 2MB per il Transaction Log
(entrambi posizionati in c:\)
Ciao,
--
Gianluca Hotz
Backoffice MVP (SQL Server) MCP SQL Server and MCP Windows
Vice-President of the Italian User Group for SQL Server
Founding Member of the Italian User Group for .NET
http://www.ghotz.com
http://www.ugiss.org
--<CUT HERE>--
'SCRIPT:        dmo-createdb-01.vbs
'DESCRIPTION:   creates a new database using SQL-DMO, this technique is the
same
'               documented in books online under the database object
documentation
'AUTHOR:        
gh...@alphasys.it
 (Gianluca Hotz)
'
Option Explicit
Dim oSQLServer  'SQLDMO.Server object
Dim oDatabase  'SQLDMO.Database object
Dim oDBFile   'SQLDMO.DBFile object
Dim oLogFile  'SQLDMO.LogFile object
Set oSQLServer = CreateObject("SQLDMO.SQLServer")
'Trusted connection and misc parameters
oSQLServer.LoginTimeout = -1
oSQLServer.LoginSecure = True
oSQLServer.AutoReConnect = False
'Connect to server name
oSQLServer.Connect "P456\SQL2000SP"
'Create a new database...
Set oDatabase = CreateObject("SQLDMO.Database")
'... and assign a name to it
oDatabase.Name = "MyDB"
'Create a new database file...
Set oDBFile = CreateObject("SQLDMO.DBFile")
'... and assign logical/physical properties to it
oDBFile.Name = "MyDB_mdf"
oDBFile.PhysicalName = "C:\MyDB.dmf"
oDBFile.Size = 2
'Add the newly created file to the database definition,
'(since this is the primary file I'll add it to the PRIMARY
'filegroup, more filegroups can be created each of the can
'contain multiple database files, please remember that the
'convention for every file that is not the master data file
'is to give them the suffix .ndf)
oDatabase.Filegroups("PRIMARY").DBFiles.Add(oDBFile)
'Create a new transaction log file...
Set oLogFile = CreateObject("SQLDMO.LogFile")
'... and assign logical/physical properties to it
oLogFile.Name = "MyDB_log"
oLogFile.PhysicalName = "C:\MyDB.ldf"
oLogFile.Size = 2
'Add the newly created Transaction log file to the
'database definition (T-Logs don't belong to filegroups)
oDatabase.TransactionLog.LogFiles.Add(oLogFile)
'Finally adding the definition of the new database to
'the database collection will create it
oSQLServer.Databases.Add(oDatabase)
'Be polite, clean up everything...
Set oLogFile = Nothing
Set oDBFile = Nothing
Set oDatabase = Nothing
Set oSQLServer = Nothing
--<CUT HERE>--
'SCRIPT:        dmo-createdb-02.vbs
'DESCRIPTION:   creates a new database using SQL-DMO to submit a
'               Transact-SQL batch (as opposed to creating it
'               adding a new database to the object model)
'AUTHOR:        
gh...@alphasys.it
 (Gianluca Hotz)
'
Option Explicit
Dim oSQLServer  'SQLDMO.Server object
Dim strTSQLBatch 'Transact-SQL batch command
Set oSQLServer = CreateObject ("SQLDMO.SQLServer")
'Trusted connection and misc parameters
oSQLServer.LoginTimeout = -1
oSQLServer.LoginSecure = True
oSQLServer.AutoReConnect = False
'Connect to server name
oSQLServer.Connect "P456\SQL2000SP"
'Build up the Transact-SQL batch string, the string
'could have been just a simple, straight command, we build
'it just for clarity
strTSQLBatch = "CREATE DATABASE MyDB"
strTSQLBatch = strTSQLBatch + " ON PRIMARY ( NAME = 'MyDB_mdf', FILENAME =
N'C:\MyDb.dmf', SIZE = 2MB)"
strTSQLBatch = strTSQLBatch + " LOG ON (NAME = 'MyDB_log', FILENAME =
N'C:\MyDb.ldf', SIZE = 2MB)"
'Just execute the batch
oSQLServer.ExecuteImmediate(strTSQLBatch)
'Be polite, clean up everything...
Set oSQLServer = Nothing
--<CUT HERE>--
'SCRIPT:        ado-createdb.vbs
'DESCRIPTION:   creates a new database using ADO to submit a
'               Transact-SQL batch
'AUTHOR:        
gh...@alphasys.it
 (Gianluca Hotz)
'
Option Explicit
'ADO Constants (we actually use just 2 of them)
'Constants for ExecuteOptionEnum enumerator
Const adAsyncExecute = 16
Const adAsyncFetch = 32
Const adAsyncFetchNonBlocking = 64
Const adExecuteNoRecords = 128
Const adExecuteStream = 1024
'Constants for CommandTypeEnum enumerator
Const adCmdFile = 256
Const adCmdStoredProc = 4
Const adCmdTable = 2
Const adCmdTableDirect = 512
Const adCmdText = 1
Const adCmdUnknown = 8
'Connection string, customize it to your needs (server name, etc...)
Const sConn = "Provider=SQLOLEDB;Integrated Security=SSPI;Data
Source=P456\SQL2000SP;Initial Catalog=master"
Dim oADOConn  'ADO.Connection object
Dim oADOCmd   'ADO.Command object
Dim strTSQLBatch 'Transact-SQL batch command
'Open a connection to the database server
Set oADOConn = CreateObject("ADODB.Connection")
oADOConn.ConnectionString = sConn
oADOConn.Open
'Create the command object
Set oADOCmd = CreateObject("ADODB.Command")
'Assign to it the previously opened connection
oADOCmd.ActiveConnection = oADOConn
'Build up the Transact-SQL batch string, the string
'could have been just a simple, straight command, we build
'it just for clarity
strTSQLBatch = "CREATE DATABASE MyDB"
strTSQLBatch = strTSQLBatch + " ON PRIMARY ( NAME = 'MyDB_mdf', FILENAME =
N'C:\MyDb.dmf', SIZE = 2MB)"
strTSQLBatch = strTSQLBatch + " LOG ON (NAME = 'MyDB_log', FILENAME =
N'C:\MyDb.ldf', SIZE = 2MB)"
'Assign the command text to the TSQL batch
oADOCmd.CommandText = strTSQLBatch
'Specify to ADO that this is a free text command
oADOCmd.CommandType = adCmdText
'Just execute the batch telling ADO not to expect
'a result sets from the execution
oADOCmd.Execute ,,adExecuteNoRecords
'Be polite, clean up everything...
Set oADOCmd = Nothing
oADOConn.Close
Set oADOConn = Nothing