2010-11-19 18 views
2

Ich schreibe ein Python-Programm, das einige Daten aus einer Microsoft Access MDB-Datei mit PyODBC auswählt.Wählen Sie Spaltennamen in einer Tabelle mit PyODBC

Ich brauche die Spaltennamen von mehreren verschiedenen Tabellen zu entdecken. In SQL Server, kann dies durch die Verwendung einer Abfrage wie

SELECT c.name FROM sys.columns c, sys.tables t 
WHERE c.object_id = t.object_id 
AND t.name = tableName 

erreicht werden, aber die Abfrage funktioniert nicht in Access. Mit

SELECT MSysObjects.Name FROM MSysObjects 
WHERE (((MSysObjects.Flags)=0) AND ((MSysObjects.Type)=1)) 
ORDER BY MSysObjects.Name 

kann ich eine Liste von nicht verknüpften Tabellennamen, aber MSysObject scheint nicht eine Liste der Spaltennamen zu enthalten.

Gibt es eine Möglichkeit SQL zu verwenden, um die Spaltennamen einer Tabelle in einer Access-Datenbank zu greifen?

+0

zurückkehren Wenn Sie eine Verbindung haben, können Sie ein ADO-Schema verwenden: 'Set rs = cn.OpenSchema (adSchemaTables, Array (Leer , Leer, Leer, "Tabellenname"))? Siehe auch http://msdn.microsoft.com/en-us/library/kcax58fh(VS.80).aspx – Fionnuala

+0

kann ich nicht. Aber während ich nachgesehen habe, entdeckte ich, dass PyODBC eine Hilfsmethode hat, die SQLColumns verwendet. – James

Antwort

6

Ich konnte zu diesem Zweck keine SQL-Abfrage finden. Ich habe jedoch festzustellen, dass PyODB einen Cursor-Methode hat, die eine Liste von Spalten

# columns in table x 
for row in cursor.columns(table='x'): 
    print row.column_name 
+0

Ich fand, dass in alten MDB-Dateien, dass es das vierte Element war, d. H. Zeile [3], der tatsächliche Name der Spalte ist. – AER

0

Ich bin nicht sicher über die Einschränkungen bei der Abfrage dieser Version von MS-Access, aber eine Lösung, die ich in anderen ähnlichen Situationen verwendet habe, ist SELECT * FROM Tabelle LIMIT = 0 (oder 1 abhängig). Sie können dann die zurückgegebenen Spaltennamen aus dem Ergebnis sammeln.

+0

Zugriff unterstützt LIMIT nicht; noch scheint es "SELECT TOP 0 * FROM Tabelle" zu mögen http://msdn.microsoft.com/en-us/library/bb208930%28office.12%29.aspx – James

+0

"WHERE 1 = 2" wird Null Zeilen zurückgeben . – Fionnuala

+0

Die Auswahl von null Zeilen gibt mir "None". – James

Verwandte Themen