Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ttable.fielddefs[i].attributes speichern geht nicht (https://www.delphipraxis.net/3602-ttable-fielddefs%5Bi%5D-attributes-speichern-geht-nicht.html)

DrUArn 20. Mär 2003 14:43


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