Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DB-Tabelle um Datenfeld erweitern (https://www.delphipraxis.net/104170-db-tabelle-um-datenfeld-erweitern.html)

BrunoT 28. Nov 2007 15:40

Datenbank: Firebird embedded • Zugriff über: Zeos

DB-Tabelle um Datenfeld erweitern
 
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

mkinzler 28. Nov 2007 15:46

Re: DB-Tabelle um Datenfeld erweitern
 
Kommt es beim Erzeugen der Tabelle oder später?

BrunoT 28. Nov 2007 15:49

Re: DB-Tabelle um Datenfeld erweitern
 
Hallo mkinzler,

Die Tabelle ist schon da. Ich habe auch ein DBDrid auf der Form und konnte schon Daten eingeben.

Nun hatte ich das Programm um diese Zeilen erweitert:

Delphi-Quellcode:

      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;
und nun kommt die Fehlermeldung.

mfg

mkinzler 28. Nov 2007 16:06

Re: DB-Tabelle um Datenfeld erweitern
 
Die Tabelle scheint im Zugriff zu sein.

BrunoT 28. Nov 2007 16:09

Re: DB-Tabelle um Datenfeld erweitern
 
Zitat:

Zitat von mkinzler
Die Tabelle scheint im Zugriff zu sein.

wie, ich muss diese schließen? oder das Query.Active auf False setzen?

mfg

mkinzler 28. Nov 2007 16:10

Re: DB-Tabelle um Datenfeld erweitern
 
Der Query muss geschlossen sein.

BrunoT 28. Nov 2007 16:12

Re: DB-Tabelle um Datenfeld erweitern
 
Danke,

ich hab's mir fast gedacht.

mfg

shmia 28. Nov 2007 16:13

Re: DB-Tabelle um Datenfeld erweitern
 
Zitat:

Zitat von mkinzler
Die Tabelle scheint im Zugriff zu sein.

Und ganz gemein ist der Fall, wenn die Query oder Tabelle in der Delphi IDE auf Active = True steht.
Denn dann ist die Tabelle im Zugriff ohne dass man das direkt so merkt.

raiguen 28. Nov 2007 16:27

Re: DB-Tabelle um Datenfeld erweitern
 
Zitat:

Zitat von shmia
Und ganz gemein ist der Fall, wenn die Query oder Tabelle in der Delphi IDE auf Active = True steht.
Denn dann ist die Tabelle im Zugriff ohne dass man das direkt so merkt.

Und deswegen habe ich es mir angewöhnt, NIE und NIMMER irgendwelche DataSets in der IDE zu öffnen rsp. offen zu halten...aber da kommt man erst hinter, wenn einem (zunächst) nicht erklärbare Fehler auf die Augen geknallt werden ;)

mkinzler 28. Nov 2007 16:29

Re: DB-Tabelle um Datenfeld erweitern
 
Zitat:

Und deswegen habe ich es mir angewöhnt, NIE und NIMMER irgendwelche DataSets in der IDE zu öffnen rsp. offen zu halten...aber da kommt man erst hinter, wenn einem (zunächst) nicht erklärbare Fehler auf die Augen geknallt werden Wink
Z.B. wenn das Programm auf anderen Rechnern abschmiert!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz