Können die Metadaten "Beschreibung" über einen "INSERT"-Befehl in die Datenbank im Programmcode (während der Laufzeit) hinzugefügt werden?
Announcement
Collapse
No announcement yet.
Metadaten über "INSERT" in die Datenbank hinzufügen
Collapse
X
-
Hallo,
>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>
>...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
Comment