Einzelnen Beitrag anzeigen

joehd1

Registriert seit: 31. Jul 2010
Ort: Heidelberg
3 Beiträge
 
Delphi 2007 Professional
 
#1

In einer Existierenden Firebird Table ein feld ergänzen

  Alt 17. Sep 2011, 00:28
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBQUERY
Hallo
Also meine Idee ist ich möchte schauen ob meine SQl Tabellen auch alle Felder haben

Da hatte ich folgende Idee

Ich schreibe einen Funktion mit folgendem Inhalt
Code:
Function tsqldbform.Checkdatab_field(Tabelle:TIBQuery;Tabname:String;Feldname:String;feldtyp:String;Feldsize:integer;notwendig:Boolean):Boolean;
var _feldtyp :tfieldtype;
    sqlbastel : String;
Begin
   if Feldtyp = 'Integer'  then _feldtyp := ftInteger;
   if Feldtyp = 'String'   then _feldtyp := ftString;
   if Feldtyp = 'Boolean'  then _feldtyp := ftBoolean;
   if Feldtyp = 'TimeStamp' then _feldtyp := ftdatetime;
   if Feldtyp = 'Unbekannt' then _feldtyp := ftunknown;
   if Feldtyp = 'Float'    then _feldtyp := ftfloat ;


// Das ist meine neue Check routine aber hat ja nix mit dem Fehler zu tun
  if Tabelle.FindField(Feldname)=nil then
     begin
      Showmessage('Feld nicht vorhanden !');
     end;
 try

  // schauen nach dem Typ des Feldes mit dem Feldnamen Feldname
 if  tabelle.FieldDefs.Find(Feldname).DataType = _feldtyp then
      Result := true;
 Except
  on EDatabaseError do
  Begin // Das Datenbankfeld neu erzeugen
      showmessage('Datenbank Feld:'+Feldname + ' nicht vorhanden ! / Wird erzeugt ! ');
      tabelle.FieldDefs.Add(Feldname,_feldtyp,feldsize,notwendig);
      sqlbastel := 'alter table ' + Trim(Tabname) +  ' add ' + Trim(Feldname) + ' ' + Trim(Feldtyp);
      Tabelle.SQL.Text := sqlbastel; // Hier kommt dann der Fehler ! :-( 
      Tabelle.ExecSQL; // 
      TAbelle.SQL.Clear;
      ibmaintransaction.CommitRetaining;
   end;
So nun kommt beim SQL Monitor folgendes

00:06:05 |
[Application: test ]
testtabelle: [Execute] alter table TEST add FELD4 Integer

00:06:05 |
[Application: test ]
[Error] -607 335544351 unsuccessful metadata update
STORE RDB$RELATION_FIELDS failed


Ich gehe davon aus das der SQl String stimmt a sieht er hier gut aus und wenn ich ihn in interbase Konsole eingebe dann geht er auch !

Aber was ist falsch ... das ich die Prüfung auf exist des Feldes besser machen kann ist mir bekannt. Aber daran liegt es ja nicht

Kann mir jemand helfen ?
  Mit Zitat antworten Zitat