Seite 1 von 1

QSqlIndex PrimaryIndex = DB->primaryIndex ( TableName );

Verfasst: 28. März 2010 20:08
von Troll.Soft
Hallo,
ich suche nach einer Möglichkeit über Qt den PrimaryKey und sonstige Indizes einer Datenbank zu ermitteln. Die obige Funktion liefert mir einen QSqlIndex mit sinnfreien Werten zurück.
mit cursorName() den TabellenNamen und
mit name() je nach DB (bei MySql 'Primary' und bei Access '0')

Die einzige Information, die mich interessiert ist aber, auf welcher Spalte oder auf welchen Spalten sitzt der PrimaryKey. Informationen über andere Indizes wären auch nicht schlecht. Bei MySql oder SQLite kann ich über den Zugriff auf DB-interne Systemtabellen zur gewünschten Info kommen.
Aber wie geht das bei ODBC (mit Access).

Habe sämtliche Beispiele von Qt 4.6 nach dem Stichwort QSqlIndex gescannt. Null Einträge gefunden. Seufz !!

kennt jemand Möglichkeiten ?

tschüß
Troll.Soft

Verfasst: 12. April 2010 23:26
von mgleich
Ich denke Du wirst danach suchen müssen wie Du per SQL Abfrage in Access die Indizes abfragen kannst.

Verfasst: 13. April 2010 11:26
von Troll.Soft
mgleich hat geschrieben:Ich denke Du wirst danach suchen müssen wie Du per SQL Abfrage in Access die Indizes abfragen kannst.
ähem,
gesucht habe ich schon aber nur VisualBasic gefunden unter Windows.
Ich fahre C++, Qt und alles soll unter Windows, Linux etc laufen, möglichst ohne proprietäre Software.

Vielleicht hat noch jemand einen Tipp

Verfasst: 13. April 2010 11:36
von mgleich
Was bekommst Du denn, wenn Du folgendes ausprobierst?

Code: Alles auswählen

QSqlDatabase tDb=QSqlDatabase::addDatabase("QODBC");
tDb.setDatabaseName("ACCESS_DSN");
QSqlIndex tIndex=tDb.primaryIndex(sTableName);
QStringList tFields;
QList<bool> tOrders;
for(int i=0; i < tIndex.count(); ++i)
{
	tFields.append(tIndex.fieldName(i));
	tOrders.append(!tIndex.isDescending(i));
}
Kann sein, dass vorher noch ein open notwendig ist.

Verfasst: 14. April 2010 13:22
von Troll.Soft
mgleich hat geschrieben:Was bekommst Du denn, wenn Du folgendes ausprobierst?
...
Kann sein, dass vorher noch ein open notwendig ist.
wenn ich den open noch ergänze liefert mir ein tDb.table() ordnungsgemäß die Tabellen. primaryIndex(TabellenName) liefert einen leeren QSqlIndex zurück indem nur der cursorName() einen Wert hat.

MySql z.B. stellt Systemtabellen zur Verfügung aus denen ich alles rauslesen kann.

Hast Du noch eine Idee???

Verfasst: 14. April 2010 13:48
von mgleich
Schau mal hier:

http://www.pcreview.co.uk/forums/thread-2342556.php

Vielleicht kommst Du damit weiter.

Oder Du suchst selbst nach "Access odbc \"get index\"" in Google.

Sag aber bitte bscheid, wenn Du etwas hinbekommen hast.

Verfasst: 15. April 2010 20:39
von Troll.Soft
mgleich hat geschrieben:Oder Du suchst selbst nach "Access odbc "get index"" in Google.

Sag aber bitte bscheid, wenn Du etwas hinbekommen hast.
Klar sag ich Bescheid, wenn es läuft. Unter obiger Abfrage findet man inzwischen meine eigenen Frage in diesem Qt-Forum. Leider noch ohne die Lösung. Google wimmelt nur so von Lösungen für Visual Basic und DAO. Aber ich möchte es mit C++, Qt und Sql hinkriegen. Irgendwie werde ich das auch noch schaffen.

bis dann
Troll.Soft