Announcement

Collapse
No announcement yet.

SQLDMO_TLB.pas

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

  • SQLDMO_TLB.pas

    Hallo,

    ich möchte von Paradox auf MSDE umsteigen. Zum Testen habe ich mir Beispiele aus dem Forum rausgesucht. Ich habe gelesen, dass ich eine SQLDMO_TLB.pas benötige und habe versucht diese aus einer DLL zu erzeugen. Beim Umwandeln bekomme ich aber Fehler. Hat jemand eine funktionierende SQLDMO_TLB.pas für mich ? Ein kompletter Quellcode zum Testen wäre natürlich auch toll. Ich arbeite mit Delphi 6.

    Danke

    Peter

  • #2
    Hallo,
    es gibt bereits mit dem <b>Microsoft SQL Server 2005 Express Edition</b> einen Nachfolger der MSDE 2.0, so dass sich die Frage stellt, ob der Wechsel nicht gleich mit dieser Version starten soll. Die Express Edition hat zahlreiche "Killer-Features" wie die XCOPY-Weitergabe der Datenbankdateien sowie die weggefallene Leistungsbremse bei mehr als 5 gleichzeitigen Anwendern im Netzwerk. Während die MSDE analog zum SQL Serer 2000 das Objektmodell <i>Database Mangement Objects</i> (DMO) verwendet hat, führt der SQL Server 2005 als Resultat auf die grundsätzlichen Veränderungen am Fundament mit den <i>Server Management Objects</i> (SMO) ein neues Objektmodell ein (SMO in auch in der Lage, auf die SQL Server-Versionen 7, MSDE 1.0, 2000, MSDE 2.0 und 2005 zuzugreifen).
    <br>
    Das Problem mit der <i>SQLDMO_TLB.pas</i> hat damit zu tun, dass Delphi je nach der Version und dem installierten Patch beim Importieren der Typbibliothek eine unterschiedliche PAS-Datei erzeugt. Mir ist keine Delphi-Version bekannt, die alle TLBs fehlerfrei importieren kann, so dass in der Praxis die verschiedenen Delphi-Versionen (5, 6 und 7) nacheinander ausprobiert werden müssen. In der Regel kann eine der Versionen eine bestimmte TLB fehlerfrei importieren :-)
    <br>
    Das folgende <b>Delphi 5</b>-Beispiel zeigt das Hantieren mit SQLDMO der MSDE:
    <code>
    <font color="#003399"><i>{ ************************************************** **************
    Typ : Hauptformular
    Autor : Andreas Kosch
    Compiler : Delphi 5 Enterprise
    Betriebssystem : Windows 98
    Begonnen am : 12.11.1999
    Beschreibung : Über DMO auf der MSDE eine neue Datenbank
    erzeugen.
    ************************************************** ************** }</i></font>

    <b>unit</b> CreateDBFrm;

    <b>interface</b>

    <b>uses</b>
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    ExtCtrls, DBCtrls, Grids, DBGrids, Db, ADODB, ComCtrls, StdCtrls;

    <b>type</b>
    TForm1 = <b>class</b>(TForm)
    Label1: TLabel;
    ButtonStart: TButton;
    Label3: TLabel;
    ButtonStop: TButton;
    StatusBar1: TStatusBar;
    ButtonLoad: TButton;
    ListBoxLog: TListBox;
    <b>procedure</b> ButtonStartClick(Sender: TObject);
    <b>procedure</b> ButtonStopClick(Sender: TObject);
    <b>procedure</b> ButtonLoadClick(Sender: TObject);
    <b>private</b>
    <font color="#003399"><i>{ Private declarations }</i></font>
    aSrv : Variant;
    <b>procedure</b> MakeDatabase;
    <b>public</b>
    <font color="#003399"><i>{ Public declarations }</i></font>
    <b>end</b>;

    <b>var</b>
    Form1: TForm1;

    <b>implementation</b>

    <font color="#003399"><i>{$R *.DFM}</i></font>

    <b>uses</b>
    ComObj, ActiveX, SQLDMO_TLB;

    <b>procedure</b> TForm1.ButtonStartClick(Sender: TObject);
    <b>begin</b>
    aSrv := CreateOleObject(<font color="#9933CC">'SQLDMO.SQLServer'</font>);
    aSrv.LoginTimeout := 20;
    aSrv.Start(True, <font color="#9933CC">'(local)'</font>, <font color="#9933CC">'sa'</font>, <font color="#9933CC">''</font>);
    <b>end</b>;

    <b>procedure</b> TForm1.ButtonStopClick(Sender: TObject);
    <b>begin</b>
    aSrv.Disconnect;
    aSrv.Stop;
    <b>end</b>;

    <b>procedure</b> TForm1.ButtonLoadClick(Sender: TObject);
    <b>begin</b>
    MakeDatabase;
    ShowMessage(<font color="#9933CC">'Die Datenbank steht zur Verfügung'</font>);
    <b>end</b>;

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

    <b>end</b>.
    </code&gt

    Comment


    • #3
      Hallo,

      ich habe den Rat befolgt und MS SQL Server 2005 Express installiert. Ohne die BDE habe ich jedoch keinerlei Erfahrung wie ich auf die DB zugreife und eine neue Datenbank und Tabellen anlege. Hat jemand einen Beispielsource oder eine Quelle über die ich mir das Wissen kurzfristig aneignen kann ?

      Danke

      Pete

      Comment

      Working...
      X