2017-02-28 18 views
2

私はリストを作成するPyQtでアプリケーションを作成していますが、リスト項目はSQLクエリの結果です。私は、次のコードからこれを実行しようとしています:PyQt:選択クエリから行の値を取得する方法

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtSql import * 

def main(): 
    app = QApplication(sys.argv) 
    win=QWidget() 
    layout=QHBoxLayout() 
    db = QSqlDatabase.addDatabase("QODBC") 
    win.setWindowTitle("Connect to MSSQL Database Example") 
    db.setHostName('LAPTOP-B79DRPA3') 
    db.setDatabaseName('local') 
    db.open() 
    if (db.open()==False):  
     QMessageBox.critical(None, "Database Error", 
       db.lastError().text()) 

    query = QSqlQuery() 
    query.exec_ ("select lydelse, bransch from [Sarah].[dbo].fraga") 

    listWidget = QListWidget() 
    index=0 
    while (query.next()): 
     listWidget.addItem(str(query.value(index))) 
     index = index+1 
    listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection) 
    layout.addWidget(listWidget) 
    win.setLayout(layout) 
    win.show() 
    return app.exec_() 

if __name__ == '__main__': 
    main() 

しかし、何が起こっていることは、ここでは、出力が異なる列からのアイテムを持つリストであるということです。

index=0 
while (query.next()): 
    listWidget.addItem(str(query.value(index))) 
    index = index+1 

答えて

1

明示的な列名を持つselect文を使用し、カラム/フィールドで:私が欲しいのは、私が列を選択し、リストの項目としてリストにすべての行項目を追加することができるはずということですクエリの結果は同じ順序で、左から右に0から始まる番号が付けられます。このように、声明の中で:

select lydelse, bransch from [Sarah].[dbo].fraga 

lydelse列は0あるとbransch列は1です。だから、lydelse列のすべての値を取得するには、単にんでしょう:あなたはselect *文を使用した場合、列は順不同になりますので、

query = QSqlQuery() 
query.exec_("select lydelse, bransch from [Sarah].[dbo].fraga") 
while query.next(): 
    print(query.value(0)) 

しかし、これは、動作しない場合があります。その場合、コードは次のようになります。

query = QSqlQuery() 
query.exec_("select * from [Sarah].[dbo].fraga"): 
index = query.record().indexOf('lydelse') 
while query.next(): 
    print(query.value(index)) 
+0

ああ、それを得ました!ありがとう@ekhumoro – Sarah

関連する問題