Archiv verlassen und diese Seite im Standarddesign anzeigen : Autoinc - Feld erstellen
Hallo Leute
ich möchte unter D5 und mit ADOX_TLB eine Access97 - Datenbank aufbauen. Bei einigen Tabellen benötige ich ein Autoinc - Feld.
Geht das prinzipiell? Wenn ja, welche Attribute / Properties müßten gesetzt werden?
In der älten Programversion nutzte ich die DbEngine aus aus der DAO_TLB für solche Zewcke.
Ach so gleich noch ne Frage: Wie macht man das hier mit den Relations auf Detailtabellen?
Bei der dbEngine ging das ungefähr so:
relZone := db.CreateRelation(RelationName, MainTable.Name,DetailTable.Name,dbRelationDeleteCa scade);
Field2 := relZone.CreateField('Field1', dblong, 0);
Field2.ForeignName := 'Field1';
relZone.Fields.Append( Field2);
db.Relations.Append (relZone);
Gruß Hendri
Andreas Kosch
14.07.2000, 13:25
Hallo,
die <i>ADO Extension for Data Definition Language and Security</i> (ADOX) unterstützen die Schemadaten der Datenbank (Catalog). Somit kann man auf diesem Weg eine neue Datenbank anlegen. In meinem Archiv habe ich das folgende Beispiel gefunden:
<pre>
uses ADOX_TLB;
resourcestring
cCONNECTSTRING = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
procedure TFormMain.ButtonCreateClick(Sender: TObject);
var
aCatalog : _Catalog;
aTable : _Table;
aColumn : _Column;
sDBPath : String;
sDS : String;
begin
MemoLog.Lines.Clear;
sDBPath := EditMDB.Text;
if FileExists(sDBPath) then
begin
DeleteFile(sDBPath);
MemoLog.Lines.Add(Format('Datenbankdatei %s gelöscht',[sDBPath]));
end;
aCatalog := CoCatalog.Create;
MemoLog.Lines.Add('Catalog...');
sDS := aCatalog.Create(Format('%s%s',[cCONNECTSTRING, sDBPath]));
MemoLog.Lines.Add(sDS);
aTable := CoTable.Create;
MemoLog.Lines.Add('Table...');
aTable.ParentCatalog := aCatalog;
aTable.Name := 'Kunden';
aCatalog.Tables.Append(aTable);
aColumn := CoColumn.Create;
MemoLog.Lines.Add('Column...');
with aColumn do
begin
Name := 'KdnName';
Type_ := adVarWChar;
ParentCatalog := aCatalog;
Attributes := adColNullable;
aColumn.DefinedSize := 30;
Properties['Jet OLEDB:Allow Zero Length'].Value := True;
Properties['Description'].Value := 'Name des Kunden'
end;
aTable.Columns.Append(aColumn.Name, adVarWChar, 0);
MemoLog.Lines.Add('Spalte 1 hinzugefügt...');
// Alternative 2: Spalte direkt deklarieren
aTable.Columns.Append('eMail', adVarWChar, 20);
MemoLog.Lines.Add('Spalte 2 hinzugefügt...');
aTable.Columns.Refresh;
MemoLog.Lines.Add('.... Fertig!');
end;
</pre>
Die Tabellen und Spalten werden jeweils über die Eigenschaften der dafür zuständigen ADOX-Objekte konfiguriert
Lieber Hr. Kosch,
das Beispiel was Sie hier anführen hatte ich auch schon gefunden, unter wie erzeugt man unter ADO eine Access Datenbank - Datei,
bei meinem Problem ging es vielmahr darum, wie nun tatsächlich ein autoinc - Feld angelegt wird. Zudem habe ich noch das Problem, das ich keine Properties für die Columns, wie in ihrem Beispiel, festlegen kann. Bei einem Blick auf die ADOX_TLB fand ich zwar eine Get_Properties - function aber nirgends eine Set_Properties - function. Habe ich ne falsche ADOX - Version (// PASTLWTR : $Revision: 1.88 $) ?
Dank im Voraus
Hendri
Andreas Kosch
18.07.2000, 13:41
Hallo,
im MDAC-SDK 2.5 ist dazu folgende zu lesen "<i>Some ADO objects have a Properties collection made up of Property objects. Each Property object corresponds to a characteristic of the ADO object specific to the provider.</i>". Somit würde ich die ACCESS-spezifischen Sachen in dieser Kollektion suchen, die auch in meinem Beispiel verwendet wird:
<pre>
with aColumn do
begin
Name := 'KdnName';
Type_ := adVarWChar;
ParentCatalog := aCatalog;
Attributes := adColNullable;
aColumn.DefinedSize := 30;
<b>Properties['Jet OLEDB:Allow Zero Length'].Value := True;
Properties['Description'].Value := 'Name des Kunden'</b>
end;
</pre>
Es ist jetzt nur noch eine Frage des Fleisses, die Unmengen von ACCESS-spezifischen Einstellungen der JET ENGINE durchzublättern, bis man zum Eintrag für AUTOINCs vorstösst ;-)
vBulletin® v3.8.1, Copyright ©2000-2010, Jelsoft Enterprises Ltd.