Odbc: Abfage ob Tabelle existiert?
-
Hallo,
kann man bei Odbc (mit soci) irgendwie prüfen ob eine Tabelle bereits existiert?
Ein DBMS speichert die Daten ja in einer extra Tabelle/DB. Das ist aber bei jedem Backend unterschiedlich und bei Odbc interessiert nich eigentlich nicht, was sich am anderen Ende verbirgt.
Hintergrund ist, dass wenn die Tabelle nicht vorhanden ist, diese erzeugt und mit Defaultdaten gefüllt werden soll.
-
schau dir mal "OpenSchema("TABLE")" an das gibt dir ein recordset alles vorhanden Tabellen zurück.. dann kannst in einer schleife checken ob TAbelle X existiert.
-
BorisDieKlinge schrieb:
schau dir mal "OpenSchema("TABLE")" an das gibt dir ein recordset alles vorhanden Tabellen zurück.. dann kannst in einer schleife checken ob TAbelle X existiert.
OpenSchema gehört zu ADO, was ich nicht verwende.
Mit soci habe ich das jetzt so gelöst, dass ich die Zeilen der Tabelle zähle und schaue ob eine exception geworfen wird:
// m_pSession ist eine SOCI::Session, die an anderer Stelle erzeugt wird. bool DB::tableExists(const std::string &sTableName) { try { *m_pSession << "SELECT COUNT(*) FROM " << sTableName; return true; } catch(std::exception &e) { return false; } }
Ganz glücklich bin ich mit der Lösung aber nicht und für weitere Vorschläge offen.
-
Ich kenne mich mit soci nicht aus, aber da du ODBC im Betreff schreibst: ODBC bietet eine Funktion, mit der man die vorhandenen Tabellen abfragen kann: SQLTables(). Keine Ahnung ob soci das Kapselt/Zur Verfügung stellt...
Du kannst ja einfach mal den Source von soci nach diesem API durchsuchen.