Liebe Nutzer,
ich möchte per Software eine
Paradox-Tbl. erstellen und die Attribute
jedes Feldes setzen.
Es gelingt mir aber nicht, diese zu speichern - auch wenn storedefs=true gesetzt ist.
Spätestens, wenn die Tabelle mit ttable.active:=true geöfnet wird, sind die Attribut-Definitionen verändert.
Listing:
newtable:=ttable.create(self);
newtable.active:=false;
newtable.Databasename:=extractfilepath(OpenDialog1 .FileName);
newtable.TableName:=extractfilename(OpenDialog1.Fi leName);
newtable.tabletype:=ttparadox;
with newtable do
begin
storedefs:=true;
{ Dann die Felder in der Tabelle beschreiben }
with FieldDefs do
begin
Clear;
newfielddef:=addfielddef; with newfielddef do
begin
name:='AutoInc';datatype:=ftautoinc;
attributes:=[farequired,fareadonly,fahiddencol]end;
newfielddef:=addfielddef; with newfielddef do
begin
name:='ID';datatype:=ftinteger;size:=0;
attributes:=[farequired,fareadonly,fahiddencol]end;
newfielddef:=addfielddef; with newfielddef do
begin name:='String'; datatype:=ftstring;size:=128;
attributes:=[farequired,fareadonly,fahiddencol]end;
end;
{ Dann alle Indizes beschreiben }
with IndexDefs do
begin
Clear;
{ Der erste Index hat keinen Namen, denn er ist ein
primärer
Paradox-Schlüssel }
//Hauptindex
Add('','Autoinc',[ixPrimary, ixUnique]);
for i:=0 to fielddefs.count-1 do
begin
if not (fielddefs[i].datatype in [ftautoinc,ftVarbytes,ftBlob,ftMemo,ftGraphic,ftFmt Memo,ftParadoxOle]) then
begin
//durchnummeriert
Add(inttostr(i), Fielddefs[i].Name,[ixcaseinsensitive]);
//auf Namen basierend
Add(Fielddefs[i].Name+'_IDX', Fielddefs[i].Name+';'+Fielddefs[0].Name,[ixcaseinsensitive]);
end;
end;
end;
{ Nun ist alles definiert. Die Tabelle kann erzeugt werden. }
CreateTable;
end;
end;
newtable.Destroy;
//!!! und hier kommt z.B. für
// spalte'AutoInc' Attributes=[fareadonly]
// spalte'ID' Attributes=[farequired]
// spalte'String' Attributes=[farequired]
//heraus
table1.active:=false;
Table1.databasename:=extractfilepath(OpenDialog1.F ileName);
table1.TableName:=extractfilename(OpenDialog1.File Name);
table1.active:=true;
end;
Vielleicht hat jemeand 'ne Idee, wie ich die ttable-Komponente überllisten kann.
Freundliche grüße Uwe Arnold
PS ein Möglichkeit wäre die
procedure Tdbtester_UA.Table1AfterOpen(DataSet: TDataSet);
var i:integer;
begin
for i:=0 to table1.fielddefs.count-1 do
table1.fielddefs[i].attributes:=[farequired,fahiddencol,fareadonly];
end;
Jedesmal, wenn die Datei neu geöffnet wird, werden die Attribute neu definiert - aber spätestens z.B. bei ttable.indexdefs.update oder
ttable.fielddefs.update sind nur noch die Restinformationen da.