Error nach CreateTable



  • Hi Leute

    Ich schreibe ein Pgoramm mit dem C++ Builder 2006 und habe dort eine Firebird Embedded Datenbank eingebaut.
    Nun will ich aus dem Programm heraus einen neuen Table zur Datenbank hinzufügen.
    1. IBTable->Active auf false setzen
    2. IBTable->Tablename auf den neuen Namen setzten
    3. IBTable->FieldDefs->Add Neue FieldDefs hinzufügen
    4. IBTable->Create Table erstellen
    5. IBTable->Active wieder auf true um auf den Table zuzugreifen

    Hier (5.) bekomme ich jetzt immer die Fehler Meldung "Table unknown" obwohl dieser vorhanden ist.
    Habe ich einen Schritt beim erzeugen eines neuen Tables vergessen???
    Überlege schon seit Stunden woran das liegen kann.

    Danke im Voraus
    Gruß Tobias



  • Wo ist der Quell-Code? 😕

    Das ist doch schon wieder eine Abstraktion.



  • AnsiString newTablePA;
    		newTablePA = IBTable1->FieldByName("NAME")->Value ;//Namen für neue Tabelle aus einer anderen Tabelle übernehmen
    		newTablePA= newTablePA + "PA";//Zusatz "PA" an den Namen anfügen
    		if (IBTable6->Active )//Prüfen ob IBTable aktiv ist
    		{
    				IBTable6->Active = false;//Table deaktivieren damit neue Tabelle erstellt werden kann
    		}
    		IBTable6->TableName = newTablePA.UpperCase();//Tabellen Namen in Großbuchstaben umwandeln
    		if (IBTable6->Exists )//Prüfen ob Tabelle bereits vorhanden ist
    		{
    				IBTable6->FieldDefs->Clear();//Felder löschen
    				IBTable6->DeleteTable();//Tabelle löschen
    		}
    		IBTable6->FieldDefs->Add("DATE_TIME",ftString ,20,false);//Neues Feld hinzufügen
    		//Digitale Eingänge bestimmen
    		for (i = 1;i <= 24; i++)
    		{
    				AnsiString searchfor  = "di" + IntToStr (i) + "=";
    				int pos = text1.Pos(searchfor);
    				AnsiString di = text1.SubString(pos+4,1);
    				AnsiString diName = "DI" + IntToStr (i);
    				if (di == "1")
    				{
    
    						IBTable6->FieldDefs->Add(diName,ftString,1 ,false);//Neues Feld hinzufügen
    				}
    		}
    
    		IBTable6->CreateTable();//Tabelle erstellen
    		if (IBTable6->Exists)
    		{
    
    			IBTable6->Active = true;//Wenn Tabelle vorhanden ist auf aktiv schalten
    		}
    		else
    		{
    			Application->MessageBoxA("Parameter Tabelle nicht vorhanden","Fehler",MB_ICONSTOP|MB_OK);
            	}
    


  • Hat niemand eine Idee was ich falsch mache?
    Ich prüfe ob die Tabelle vorhanden ist und wenn ja dann setzte ich sie auf aktiv und dabei bekomme ich dann denn Fehler, das die Tabelle unbekannt ist. Das ist doch eigentlich unlogisch oder?

    Gruß BTobi



  • BTobi schrieb:

    Hat niemand eine Idee was ich falsch mache?

    Du verwendest eine Table-Komponente. Das würde ich schon als Fehler bezeichnen. Die meisten Table-Komponenten sind kaum mehr als Marketinggags und sollen nur ein Umstellung von BDE-Anwendungen erleichtern. Für Neuentwicklungen sind sie m.E. unbrauchbar.



  • schließ mal nach dem Erstellen der Tabelle die Verbindung zur Datenbank und öffne sie wieder, dann sollte die Tabelle wirklich vorhanden sein

    einfacher gehts hier wirklich über IBQuery eine neue Tabelle zu erstellen



  • Jetzt erhalte ich eine neue Fehlermeldung: "ist kein gültiger integer wert"
    Aber wenn ich dann im Builder auf "Fortführen" klicke ist der Table erstellt und geöffnet.
    Wie beseitige ich diesen neuen Fehler?



  • Der Fehler tritt beim schließen der Datanbank auf.


Anmelden zum Antworten