Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
Delphi 5 Professional
|
Re: Primärindex nachträglich hinzufügen?
13. Jan 2004, 19:06
Hallo FBrust,
Code:
procedure TFBrowser.GenerierePrimrIndexID1Click(Sender: TObject);
var i:Integer;
fn,
alterTabellenName:String;
ztab, qtab : TTable;
begin
qtab := TTable.Create(self);
ztab := TTable.Create(self);
try
qtab.DatabaseName := Tab1.DatabaseName;
qtab.TableName := Tab1.TableName;
qtab.Active := true;
ztab.DatabaseName := Tab1.DatabaseName;
ztab.TableType := ttParadox;
s := ExtractFileName(qtab.TableName);
tx := ExtractFileExt(qtab.TableName);
i := Pos(tx,s);
if i > 0 then fn := copy(s,1,i-1) else fn := s;
i := 1;
repeat
if i > 9 then s := fn + '_' + IntToStr(i) + tx
else s := fn + '_0' + IntToStr(i) + tx;
inc(i);
until not FileExists(AppBkSp(ztab.DatabaseName) + s);
ztab.TableName := s;
for i := 0 to qTab.Fields.Count-1 do
if lower(qtab.FieldDefs.Items[i].Name) = 'ID' then exit;
ztab.FieldDefs.Clear;
//neue Felder hinzufügen
ztab.FieldDefs.Add('ID', ftAutoInc, 0, false);
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('NVKsonst', ftFloat, 0, false);
ztab.CreateTable;
qtab.Active:=false;
ztab.Active:=false;
FBrowserInput.Tag := 102;
FBrowserInput.lblHinw102.Caption := 'Datenstruktur von ' + qtab.TableName + ' wird angepasst';
FBrowserInput.lblRecNoText.Caption := 'Bitte warten .....';
FBrowserInput.Show;
FBrowserInput.Refresh;
Batchmove1.Mode:=batAppend;
// i := Batchmove1.RecordCount;
Batchmove1.Source := qtab;
Batchmove1.Destination := ztab;
qtab.Active:=true;
BatchMove1.Mappings.Clear;
for i:=0 to qtab.Fields.Count-1 do
Batchmove1.Mappings.Add(qtab.Fields[i].FullName + '=' + //Mappingsarray füllen
qtab.Fields[i].FullName );
qtab.Active:=false;
Batchmove1.Execute;
// bewirkt den Aufruf von FBrowser.Activat
FBrowser.Tag := 1;
FBrowserInput.Close;
Tab1.Close;
// Showmessage('ztab : ' + ztab.TableName);
// Showmessage('qtab: ' + qtab.TableName);
alterTabellenName:=qTab.TableName;
qTab.Active:=false;
qTab.DeleteTable;
ztab.RenameTable(alterTabellenName);
ztab.Active:=False;
// UP_DBActiv(Tab1, SessN, SysPath, fnDBIdx);
// FAllgUP2.UP_GenIdx(Tab1, ztab, ChangeFileExt(FAuf.TabPP.TableName, ''));
ztab.IndexDefs.Clear;
try
ztab.AddIndex('', 'ID', [ixPrimary]);
except
ShowMessage('Primär-Index ID konnte nicht erzeugt werden' + CRLF2 +
'Datei: ' + AppBkSp(ztab.DatabaseName) + ztab.TableName);
end;
finally; //wird auf jeden Fall ausgeführt, auch bei exit
qtab.Close;
ztab.Close;
qtab.Destroy;
ztab.Destroy;
end;
Tab1.Close;
Tab1.Open;
end;
Getestet und funktionsfähig.
mfg
eddy
|
|
Zitat
|