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 ?