Hallo Eggimaa,
ich glaube, das wurde hier schon mehrfach diskutiert.
Ich nutze dazu eine kleine Prozedur:
Code:
procedure TFAllgUP.AppFld(tab : TTable; fldname : string; fldtyp : TFieldType; fldsize : integer);
var i:Integer;
alterTabellenName:String;
ztab, qtab : TTable;
begin
tab.Active := false;
qtab := TTable.Create(self);
ztab := TTable.Create(self);
try
qtab.DatabaseName := tab.DatabaseName;
qtab.TableName := tab.TableName;
qtab.SessionName := SessN;
qtab.Active := true;
ztab.DatabaseName := tab.DatabaseName;
ztab.SessionName := SessN;
ztab.TableType := ttParadox;
ztab.TableName := '_tmp_' + tab.TableName;
ztab.FieldDefs.Clear;
for i:=0 to qTab.Fields.Count-1 do
//Tabellenstruktur übernehmen
ztab.FieldDefs.Add( qTab.Fields[i].FullName,
qTab.Fields[i].DataType,
qTab.Fields[i].Size,
qTab.Fields[i].Required);
//neue Felder hinzufügen
ztab.FieldDefs.Add(fldname, fldtyp, fldsize, false);
ztab.CreateTable;
qtab.Active:=false;
ztab.Active:=false;
Batchmove1.Mode:=batAppend;
i := Batchmove1.RecordCount;
Batchmove1.Source := qtab;
Batchmove1.Destination := ztab;
Batchmove1.Execute;
alterTabellenName:=qTab.TableName;
s := qtab.SessionName;
if ztab.SessionName <> s then begin
if (FindComponent(ztab.SessionName) is TSession)
then TSession(FindComponent(ztab.SessionName)).Active := false;
end;
if (FindComponent(s) is TSession) then begin
TSession(FindComponent(s)).Active := false;
end;
qTab.DeleteTable;
ztab.RenameTable(alterTabellenName);
ztab.Active:=False;
finally; //wird auf jeden Fall ausgeführt, auch bei exit
qtab.Close;
ztab.Close;
qtab.Destroy;
ztab.Destroy;
end;
end;
mfg
eddy