Einzelnen Beitrag anzeigen

Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#1

DB-Tabelle um Datenfeld erweitern

  Alt 28. Nov 2007, 16:40
Datenbank: Firebird embedded • Zugriff über: Zeos
Hallo alle zusammen,

Ich beschäftige mich nun endlich mit Firebird als Datenbank, um von Paradox wegzukommen.
Erst mal experimentell.

Ich habe da ein kleines Problem. Ich möchte eine vorhandene Tabelle um eine Spalte(Feld) erweitern.

Da erhalte eine Fehlermeldung:

Code:
SQL Error: unsuccessful metadata update T1. Error Code -607. This operation is not defined for system tables.
Die Fehlermeldung kommt im ALTER Table Statment.

Delphi-Quellcode:

function TForm1.Teste_Feld_In_Tabelle(Bez: string): boolean;
var
  i: Byte;
begin
  result := false;
  with data do
    for i := 0 to ZQuery.FieldDefs.Count - 1 do
      begin
        if Bez = ZQuery.FieldDefs[i].Name then
          Result := True;
      end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  vFirst: Boolean;
begin
  with data do
    begin
      vFirst := False;
      ZConn.User := 'SYSDBA';
      ZConn.Password := 'egal';
      ZConn.Database := '.\TestFb.fdb';
      if not fileExists('.\TestFb.fdb') then
        begin
          vFirst := True;
          ZConn.Properties.Add('CreateNewDatabase=CREATE DATABASE ' +
            QuotedStr('.\TestFb.fdb') + ' USER ' +
            QuotedStr('sysdba') + ' PASSWORD ' + QuotedStr('masterkey') +
            ' PAGE_SIZE 4096 DEFAULT CHARACTER SET ISO8859_1');
        end;
      ZConn.Properties.Add('Dialect=3');
      ZConn.Connected := true;
      if vFirst then
        begin
          ZQuery.SQL.Clear;
          ZQuery.SQL.Add('Create TABLE T1 (P1 INTEGER NOT NULL PRIMARY KEY);');
          ZQuery.ExecSQL;
        end;
      ZQuery.SQL.Add('SELECT P1 FROM T1;');
      ZQuery.Active := True;
      ZQuery.Close;
      ZQuery.SQL.Clear;
      ZQuery.SQL.Add('SELECT * FROM T1;'); //SELECT TOP 0 * FROM T1 ging auch nicht
      ZQuery.open;

//Testen, ob NAME schon vorhanden

      if Teste_Feld_In_Tabelle('Name') = False then
        begin
          ZQuery.SQL.Clear;
          ZQuery.SQL.Add('ALTER TABLE T1 ADD Name Char (30);');
          ZQuery.ExecSQL;
        end;
      ZQuery.SQL.Clear;
      ZQuery.SQL.Add('SELECT * FROM T1 WHERE p1 > 20;');
      ZQuery.open;
      ZQuery.Last;
    end;
end;
Was ist falsch?

mfg
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat