![]() |
ttable.fielddefs[i].attributes speichern geht nicht
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz