Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Feld einfügen (https://www.delphipraxis.net/26743-feld-einfuegen.html)

Eggimaa 28. Jul 2004 15:30


Feld einfügen
 
Ich hab da mal wieder ein hübsches problemchen..
Datenbank in Paradox..
Bei mehreren hundert Kunden schon im Einsatz..
Und jetzt..
Ich muss ein neues Feld in die bei den Kunden bereits bestehenden Datenbanken einfügen.

Wie mach ich das?

mit
if not Assigned (tblAdressen.FindField('NEW_FIELD'))
mach ich die Abfrage... und das funktioniert..

:wiejetzt: Und wie weiter?
ich möcht ja jetzt das NEW_FIELD in der Tabelle anfügen.

Danke für eure Hilfe

ibp 28. Jul 2004 15:36

Re: Feld einfügen
 
...schau dir mal den sql-begriff "alter table" an, damit kann man die struktur ändern!
gruß rené

eddy 28. Jul 2004 15:36

Re: Feld einfügen
 
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

Eggimaa 28. Jul 2004 15:57

Re: Feld einfügen
 
hi eddy..

danke erst mal..
woher krieg ich SessN ?

eddy 28. Jul 2004 16:38

Re: Feld einfügen
 
Hallo Eggimaa,

globale Variable

const
SessN : string = 'session1_1';

setzt ein Objekt vom Typ TSession voraus. Du kannst aber auch einfach nur SessN := '' setzen bzw.
die Zeilen mit ".SessionName := " ausdokumentieren.

mfg
eddy


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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 by Thomas Breitkreuz