Announcement

Collapse
No announcement yet.

Metadaten über "INSERT" in die Datenbank hinzufügen

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

  • Metadaten über "INSERT" in die Datenbank hinzufügen

    Können die Metadaten "Beschreibung" über einen "INSERT"-Befehl in die Datenbank im Programmcode (während der Laufzeit) hinzugefügt werden?

  • #2
    Hallo,

    nicht über INSERT, sondern im Fall des MS SQL Server über die Systemprozeduren <b>sp_addextendedproperty</b>, <b>sp_updateextendedproperty</b> oder <b>sp_dropextendedproperty</b>. Siehe dazu die Hilfeseite <i>Verwenden von erweiterten Eigenschaften für Datenbankobjekte</i>

    Comment


    • #3
      Und im Falle einer ACCESS Datenbank? Gibt es dazu irgendwelche Hilfeseiten

      Comment


      • #4
        Hallo,

        im Fall einer ACCESS-Datenbank ist für diese Aufgabe der Zugriff über ADOX (<i>ADO Extension for Data Definition Language and Security</i>) vorgesehen. Über das <b>Column</b>-Interface kann die Eigenschaft <i>"Description"</i> über die <b>Properties</b>-Methode gesetzt werden

        Comment


        • #5
          Hast du diesbezüglich ein Beispiel?
          Bisher habe ich alles über ADO.NET realisiert, ist der Zugriff jetzt auf ADOX nicht ein rießen Rückschritt? Oder ist dies nicht ander´s möglich?
          Gruß Lis

          Comment


          • #6
            Hallo,

            &gt;Hast du diesbezüglich ein Beispiel?

            ja - aber nur in der "falschen" Sprache <i>Delphi</i>:
            <pre>
            <b>uses</b> ADOX_TLB;
            <br>
            <b>resourcestring</b>
            cCONNECTSTRING = <font color="#9933CC">'Provider=Microsoft.Jet.OLEDB.4.0; Data Source='</font>;
            <br>
            <b>procedure</b> TFormMain.ButtonCreateClick(Sender: TObject);
            <b>var</b>
            aCatalog : _Catalog;
            aTable : _Table;
            aColumn : _Column;
            sDBPath : <b>String</b>;
            sDS : <b>String</b>;
            <b>begin</b>
            MemoLog.Lines.Clear;
            sDBPath := EditMDB.Text;
            <b>if</b> FileExists(sDBPath) <b>then</b>
            <b>begin</b>
            DeleteFile(sDBPath);
            MemoLog.Lines.Add(Format(<font color="#9933CC">'Datenbankdatei %s gelöscht'</font>,[sDBPath]));
            <b>end</b>;
            aCatalog := CoCatalog.Create;
            MemoLog.Lines.Add(<font color="#9933CC">'Catalog...'</font>);
            sDS := aCatalog.Create(Format(<font color="#9933CC">'%s%s'</font>,[cCONNECTSTRING, sDBPath]));
            MemoLog.Lines.Add(sDS);
            aTable := CoTable.Create;
            MemoLog.Lines.Add(<font color="#9933CC">'Table...'</font>);
            aTable.ParentCatalog := aCatalog;
            aTable.Name := <font color="#9933CC">'Kunden'</font>;
            aCatalog.Tables.Append(aTable);
            aColumn := CoColumn.Create;
            MemoLog.Lines.Add(<font color="#9933CC">'Column...'</font>);
            <b>with</b> aColumn <b>do</b>
            <b>begin</b>
            Name := <font color="#9933CC">'KdnName'</font>;
            Type_ := adVarWChar;
            ParentCatalog := aCatalog;
            Attributes := adColNullable;
            aColumn.DefinedSize := 30;
            Properties[<font color="#9933CC">'Jet OLEDB:Allow Zero Length'</font>].Value := True;
            Properties[<font color="#9933CC">'Description'</font>].Value := <font color="#9933CC">'Name des Kunden'</font>
            <b>end</b>;
            aTable.Columns.Append(aColumn.Name, adVarWChar, 0);
            MemoLog.Lines.Add(<font color="#9933CC">'Spalte 1 hinzugefügt...'</font>);
            <font color="#003399"><i>// Alternative 2: Spalte direkt deklarieren</i></font>
            aTable.Columns.Append(<font color="#9933CC">'eMail'</font>, adVarWChar, 20);
            MemoLog.Lines.Add(<font color="#9933CC">'Spalte 2 hinzugefügt...'</font>);
            aTable.Columns.Refresh;
            MemoLog.Lines.Add(<font color="#9933CC">'.... Fertig!'</font>);
            <b>end</b>;
            </pre>
            Das folgende C#-Beispiel zeigt den prinzipiellen Zugriff auf ADOX von .NET aus:
            <pre>
            ADOX.Catalog aCatalog = new ADOX.Catalog();
            aCatalog.Create(@"Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=C:\Temp\ADOX3.MDB");
            ADOX.Table aTable = new ADOX.TableClass();
            aTable.ParentCatalog = aCatalog;
            aTable.Name = "Test";
            aCatalog.Tables.Append(aTable);
            aTable.Columns.Append("RecID", ADOX.DataTypeEnum.adInteger, 4);
            aTable.Columns.Append("Memos", ADOX.DataTypeEnum.adLongVarWChar, 0);
            StatusBar1.Text = "Fertig.";
            </pre>
            &gt;...ist der Zugriff jetzt auf ADOX nicht ein rießen Rückschritt?

            Auch die Klassen aus dem .NET Framework greifen sehr oft nur auf die "alten" Teile zu - siehe zum Beispiel <i>OleDbConnection</i> (diese .NET-Klasse verpackt nur die OLE DB Provider). Auch die <i>.NET Enterprise Services</i> (COM+) oder die Klassen aus dem Namespace <i>System.Management</i> setzen auf die "alten" COM-Objekte des Betriebssystems auf.

            Im Fall der ADOX-Objekte (die nur für ACCESS-Datenbanken relevant sind) geht Microsoft davon aus, dass diese mittel-/langfristig verschwinden werden (weil auch das ACCESS-Datenbankformat in heutiger Zeit nicht mehr up-to-date ist). Für die Übergangszeit ist daher ein COM-Interop-Zugriff auf die COM-Objekte von ADOX noch sinnvoll

            Comment

            Working...
            X