Einzelnen Beitrag anzeigen

Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#4

Re: Primärindex nachträglich hinzufügen?

  Alt 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
  Mit Zitat antworten Zitat