QSqlIndex PrimaryIndex = DB->primaryIndex ( TableName );

Alles rund um die Programmierung mit Qt
Antworten
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

QSqlIndex PrimaryIndex = DB->primaryIndex ( TableName );

Beitrag 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
mgleich
Beiträge: 7
Registriert: 30. März 2010 11:31
Wohnort: Stralsund
Kontaktdaten:

Beitrag von mgleich »

Ich denke Du wirst danach suchen müssen wie Du per SQL Abfrage in Access die Indizes abfragen kannst.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag 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
mgleich
Beiträge: 7
Registriert: 30. März 2010 11:31
Wohnort: Stralsund
Kontaktdaten:

Beitrag 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.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag 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???
mgleich
Beiträge: 7
Registriert: 30. März 2010 11:31
Wohnort: Stralsund
Kontaktdaten:

Beitrag 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.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag 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
Antworten