PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : access und c++


StoreMaster
11.09.2003, 14:44
hallo leute!

da ich in meinem programm aus platzgründen keine vorgefertigte db mitliefern will, möchte ich diese zur laufzeit erstellen.
das erstellen funktioniert soweit ohne probleme, nur hakt es beim erstellen der tabelle. aus irgendeinem grund will der nicht.


CDatabase db;
CString statement;
SQLConfigDataSource (NULL, ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)", "CREATE_DB=musicdata.mdb") ;

db.OpenEx("Driver=Microsoft Access Driver (*.mdb); Dbq=musicdata.mdb;", CDatabase::noOdbcDialog | CDatabase::useCursorLib);
db.ExecuteSQL("CREATE TABLE data (index INTEGER(5) NOT NULL, Artist VARCHAR(50) NOT NULL);");
db.Close();


was könnte daran falsch sein? der fehler ergibt sich sinngemäß in der Zeile bei ExecuteSQL.
hoffe es kann mir jemand helfen, denn das nervt schön langsam.....


Jack
12.09.2003, 10:38
Mhm, evtl verwendest du reservierte Wörter ? Pack mal die Tabellenbezeichnung und die Spaltennamen in [ und ], und probiers dann mal. Bringt er ne Meldung ? Und wenn ja, was für eine ?

StoreMaster
12.09.2003, 10:50
ich hab nun das (5) rausgenommen und die feldnamen in ' ' gesetzt. funktioniert soweit, nur dass die felnamen nun wirklich unter ' ' stehen.
z.b.: 'Index' 'Artist'


db.ExecuteSQL("CREATE TABLE data ( \'Index\' INTEGER NOT NULL,
\'Artist\' VARCHAR(50) NOT NULL);");


wie könnte man das lösen?

Jack
12.09.2003, 11:34
db.ExecuteSQL("CREATE TABLE [data] ([index] INTEGER NOT NULL, [Artist] VARCHAR(50) NOT NULL);");


Die eckigen Klammern sind in Access Begrenzer. Damit wird ermöglicht, Schlüsselwörter oder Namen mit Lerzeichen zu benutzen. Wenn es bei dir mit Hochkomma geht, dann hast du mit Sicherheit ein reserviertes Wort benutzt. Die eckigen Klammern werden normalerweise gefiltert, so daß du dann wirklich die Felder index und Artist hast.

StoreMaster
12.09.2003, 11:40
wunderprächtig. genauso funktionierts. dachte nicht an schlüsselwörter. shit.

aber das mit den [] gefällt mir.
danke