Announcement

Collapse
No announcement yet.

Skript für MS SQL Server und MSDE erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Skript für MS SQL Server und MSDE erstellen

    Moin Leutz,

    ich möchte zu meinem Projekt die MSDE einsetzten oder falls vorhanden den MS SQL Server.
    Beim Kunden soll eine DB installiert werden und dazu ein Benutzer angelegt werden. Diese Sachen möchte ich dann per Skript ausführen(wenn das geht).
    Habe nur Erfahrung mit MySQL, da ist das kein Problem.
    Wer kann mir sagen wie man das bei MS macht, oder gibt es im Netz irgendwelche Quellen, wo man das nachlesen kann.

    Ich danke schon mal

    Gunter

  • #2
    Hallo,

    in der nächsten Ausgabe der DER ENTWICKLER befasst sich ein Artikel mit dem Hantieren mit der MSDE. Uns stehen dabei 2 Wege offen: <br>
    1. Objektorientierter Zugriff über <b>SQLDMO</b> (COM-Objekte der MSDE), oder <br>
    2. Ausführen eines SQL-Scripts.

    Im Fall von SQLDMO könnte das Anlegen einer neuen Datenbank zum Beispiel so aussehen (die Typbibliothek von SQLDMO muss dazu in Delphi einmalig importiert und in der Uses-Klausel eingebunden werden):
    <pre>
    uses
    ComObj, ActiveX, SQLDMO_TLB;

    procedure TForm1.ButtonLoadClick(Sender: TObject);
    begin
    MakeDatabase;
    ShowMessage('Die Datenbank steht zur Verfügung');
    end;

    procedure TForm1.MakeDatabase;
    resourcestring
    cTABLENAME = 'KUNDEN';
    cDBPATH = 'C:\Artikel\%s.mdf';
    cLOGPATH = 'C:\Artikel\%s.ldf';
    var
    aDB : _Database;
    dbFile : _DBFile;
    logFile : _LogFile;
    aMSDE : _SQLServer;
    aTable : _Table;
    aFirmaCol : _Column;
    aOrtCol : _Column;
    aReklaCol : _Column;
    aMemoCol : _Column;
    aPK : _Key;
    begin
    // Schritt 1: Verbindung zur MSDE aufbauen
    ListBoxLog.Items.Add('Versuche Connect ....');
    aMSDE := CoSQLServer.Create;
    // lokale MSDE; Benutzer = sa; Passwort = sa
    aMSDE.Connect('(local)', 'sa', 'sa');
    ListBoxLog.Items.Add('...Connect ist ok!');
    // Schritt 2: Prüfen, ob die Datenbank bereits vorhanden ist
    try
    aDB := aMSDE.Databases.Item(EditDBName.Text, '');
    ListBoxLog.Items.Add('Datenbank ist vorhanden');
    except
    aDB := nil;
    end;
    if not Assigned (aDB) then
    begin
    // Schritt 3: Datenbank erzeugen
    ListBoxLog.Items.Add('Datenbank wird neu erzeugt....');
    aDB := CoDatabase.Create;
    aDB.Name := EditDBName.Text;
    dbFile := CoDBFile.Create;
    logFile := CoLogFile.Create;
    // PRIMARY Datenbankdatei
    dbFile.Name := EditDBName.Text;
    dbFile.PhysicalName := Format(cDBPATH, [EditDBName.Text]);
    dbFile.PrimaryFile := True;
    dbFile.FileGrowthType := SQLDMOGrowth_MB;
    dbFile.FileGrowth := 1;
    aDB.FileGroups.Item('PRIMARY').DBFiles.Add (dbFile);
    // Log-Datei.
    logFile.Name := EditDBName.Text + 'log';
    logFile.PhysicalName := Format(cLOGPATH, [EditDBName.Text]);
    aDB.TransactionLog.LogFiles.Add(logFile);
    aMSDE.Databases.Add(aDB);
    ListBoxLog.Items.Add('... Datenbank ist ok!');
    end;
    // Schritt 4: Prüfen, ob die Tabelle bereits vorhanden ist
    try
    aTable := aDB.Tables.Item(cTABLENAME, '');
    ListBoxLog.Items.Add('Tabelle ist vorhanden.');
    except
    aTable := Nil
    end;
    if not Assigned(aTable) then
    begin
    // Schritt 5: Tabelle neu anlegen
    ListBoxLog.Items.Add('Tabelle wird neu angelegt....');
    aTable := CoTable.Create;
    aPK := CoKey.Create;
    // Tabellenspalten-Objekte erzeugen
    aFirmaCol := CoColumn.Create;
    aMemoCol := CoColumn.Create;
    aOrtCol := CoColumn.Create;
    aReklaCol := CoColumn.Create;
    // Firma
    aFirmaCol.Name := 'Firma';
    aFirmaCol.DataType := 'varchar';
    aFirmaCol.Length := 20;
    aFirmaCol.AllowNulls := False;
    // Ort
    aOrtCol.Name := 'Ort';
    aOrtCol.DataType := 'varchar';
    aOrtCol.Length := 20;
    aOrtCol.AllowNulls := False;
    // Memo
    aMemoCol.Name := 'Hinweise';
    aMemoCol.DataType := 'text';
    aMemoCol.AllowNulls := True;
    // Reklamationen
    aReklaCol.Name := 'Rekla';
    aReklaCol.Datatype := 'int';
    aReklaCol.AllowNulls := False;
    // Tabelle definieren
    aTable.Name := cTABLENAME;
    aTable.FileGroup := 'PRIMARY';
    aTable.Columns.Add(aFirmaCol);
    aTable.Columns.Add(aOrtCol);
    aTable.Columns.Add(aMemoCol);
    aTable.Columns.Add(aReklaCol);
    // Primärschlüssel festlegen
    aPK.Clustered := True;
    aPK.Type_ := SQLDMOKey_Primary;
    aPK.KeyColumns.Add ('Firma');
    aTable.Keys.Add (aPK);
    // Tabelle erzeugen
    aDB.Tables.Add(aTable);
    ListBoxLog.Items.Add('.... Tabelle ist ok!');
    end
    end;
    </pre>

    Im Fall eines SQL-Scripts könnte das so aussehen:
    <pre>
    USE master
    GO

    CREATE DATABASE BackupTest
    ON (name = 'BackupTest_data',
    filename = 'D:\MSSQL\BackupTest_Data.MDF')
    LOG ON (name = 'BackupTest_log',
    filename = 'D:\MSSQL\BackupTest_Log.LDF')
    GO

    USE BackupTest
    GO

    CREATE TABLE TestTable (
    RecID INTEGER IDENTITY PRIMARY KEY,
    Value VARCHAR(20))
    GO

    INSERT INTO TestTable (Value) VALUES ('Originaleintrag')
    GO
    </pre>
    Diese Script kann dann über SQLDMO oder osql.exe ausgeführt werden.

    &gt;..wo man das nachlesen kann..

    Zwar geht mein Buch <i>ADO und Delphi</i> ausführlich auf den MS SQL Server 2000 beziehungsweise die MSDE 2.0 ein, aber für die ernsthafte Arbeit braucht man die vollständige Dokumentation. Ab besten ist dazu die <i>MSDN Library DVD</i> geeignet, danach kommt die Dokumentation vom <i>Microsoft SQL Server 2000 Developer Edition</i>.

    Wenn Visual Studio .NET 2002 oder 2003 zur Verfügung steht, reicht ein rechter Mausklick aus, um im aktuelle Datenbankprojekt das SQL-Script für die Datenstruktur und optional auch für das Laden von Daten basierend auf der ausgewählten Datenbank automatisch erzeugen zu lassen. Das Setup-Projekt kann so die Datenbank ohne eigenes Zutun bei der Installation gleich mit anlegen.
    &#10

    Comment


    • #3
      danke für die Hinweise

      Gunte

      Comment

      Working...
      X