Seite 1 von 1
Wirbelwurms - Qt - Tutorial
Verfasst: 21. Juli 2010 10:56
von wirbelwurm
Ich fange mal an mein ganzes Wissen, welches ich über Qt gelange hier abzulegen
Item-Table
dynamischer Aufbau einer QTableWidget
Code: Alles auswählen
public static void initTable(QTableWidget table, String sql ) {
try {
Databaseconnection db = new Databaseconnection();
//Spalten
ResultSet rs = db.getRs(sql);
int anzahlCol = db.getColumnCout(rs);
int anzahlRows = db.getRowsCount(rs);
ArrayList<String> labels = new ArrayList<String>();
for (int i = 1; i <= anzahlCol; i++) {
labels.add(db.getColumnName(rs,i));
}
table.setColumnCount(db.getColumnCout(rs));
table.setHorizontalHeaderLabels(labels);
//Daten
table.setRowCount(anzahlRows);
int row = 0;
while(rs.next()) {
for(int i = 1; i <= anzahlCol; i++) {
table.setItem(row, i - 1 , new QTableWidgetItem(rs.getString(i)));
}
row++;
}
} catch (Exception e) { e.printStackTrace(); }
}
Der Code kann bis jetzt nur einen SQL in einem QTableWidget anzeigen.
Weiteres folgt:
- Datumrenderung
- Farbwechsel
- Sortierung
- Filterung
Viele Grüße
Wirbelwurm
Verfasst: 21. Juli 2010 11:24
von kater
Was soll denn ArrayList sein?
Verfasst: 21. Juli 2010 12:23
von upsala
Verfasst: 21. Juli 2010 12:37
von kater
Das ist die Doku zu Java. Ach das da oben soll Java Code sein? Bis auf das public am ANfang sie es wie C++ aus.
Verfasst: 21. Juli 2010 12:48
von franzf
kater hat geschrieben:Ach das da oben soll Java Code sein? Bis auf das public am ANfang sie es wie C++ aus.
Dann schau nochmal genau hin
Für C++ fehlt da ein "*"
Verfasst: 21. Juli 2010 13:56
von kater
Es hätte ja auch ein Typdef sein können
Aber stimmt, ist mir nicht aufgefallen.
Verfasst: 21. Juli 2010 18:03
von wirbelwurm
Moin,
das ist Java-Code. Im Forum steht doch, dass diese Rubrik für Java ist.
Qt Jambi
Alles zum Qt Framework für Java
Databaseconnection ist eine Klasse von mir selber.
Hier ist die Klasse:
Code: Alles auswählen
import java.sql.*;
public class Databaseconnection {
public Databaseconnection() throws ClassNotFoundException, SQLException {
this.initConnection();
}
private Connection con;
private Statement stmt;
private void initConnection() throws ClassNotFoundException, SQLException {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
this.con = DriverManager.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=Daten.mdb");
this.stmt = this.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
}
public void destroyConnection () throws SQLException {
stmt.close();
con.close();
}
public ResultSet getRs(String sql) throws SQLException {
return this.stmt.executeQuery(sql);
}
public ResultSetMetaData getResultSetMetaData(ResultSet rs) throws SQLException {
return rs.getMetaData();
}
public int getColumnCout(ResultSet rs) throws SQLException {
ResultSetMetaData rsmd = getResultSetMetaData(rs);
return rsmd.getColumnCount();
}
public String getColumnName(ResultSet rs, int index) throws SQLException {
ResultSetMetaData rsmd = getResultSetMetaData(rs);
return rsmd.getColumnName(index);
}
public int getRowsCount(ResultSet rs) throws SQLException {
rs.last();
int count = rs.getRow();
rs.beforeFirst();
return count;
}
}
JDBC Driver:
http://www.microsoft.com/downloads/deta ... 0f2a735707
Das ist jetzt ein Zugriff auf eine MS ACCESS 2003 Datenbank.
Ich bin heute noch nicht weitergekommen, um weiter Qt zu lernen.
Viele Grüße
Wirbelwurm
Verfasst: 22. Juli 2010 14:18
von franzf
Warum das Rad neu erfinden, gibt doch QtSql. Oder ist das nicht bei QtJambi enthalten? Würde mich arg wundern...
Verfasst: 22. Juli 2010 23:21
von wirbelwurm
franzf hat geschrieben:Warum das Rad neu erfinden, gibt doch QtSql. Oder ist das nicht bei QtJambi enthalten? Würde mich arg wundern...
Danke für den Hinweis
Ich habe probiert mich zu meiner Access Datenbank zu verbinden. Bin gescheitert. Ich weiß nicht, wie ich Driver laden kann. In der Doku habe ich nichts gefunden. Da steht nur, dass folgende Treiber vorhanden sein sollten.
Code: Alles auswählen
Driver Class name Constructor arguments File to include
QPSQL QPSQLDriver PGconn *connection qsql_psql.cpp
QMYSQL QMYSQLDriver MYSQL *connection qsql_mysql.cpp
QOCI QOCIDriver OCIEnv *environment, OCISvcCtx *serviceContext qsql_oci.cpp
QODBC QODBCDriver SQLHANDLE environment, SQLHANDLE connection qsql_odbc.cpp
QDB2 QDB2 SQLHANDLE environment, SQLHANDLE connection qsql_db2.cpp
QTDS QTDSDriver LOGINREC *loginRecord, DBPROCESS *dbProcess, const QString &hostName qsql_tds.cpp
QSQLITE QSQLiteDriver sqlite *connection qsql_sqlite.cpp
QIBASE QIBaseDriver isc_db_handle connection qsql_ibase.cpp
und
http://doc.trolltech.com/3.3/sql-driver.html#building
Ich bekomme die Meldung:
QSqlDatabase: QODBC3 driver not loaded
QSqlDatabase: available drivers: QSQLITE
Code: Alles auswählen
QApplication.initialize(args);
QSqlDatabase db = QSqlDatabase.addDatabase(DB_DRIVER);
if (!db.isValid())
System.out.println("invalid driver");
Ich hoffe ihr könnt mir weiter helfen
[/code]
Verfasst: 23. Juli 2010 15:31
von wirbelwurm
Ich habe weiter geforscht. Mir ist aufgefallen, dass in der jar-Datei die Driver-dlls fehlen. Ich habe mir jetzt das komplette Qt gesaugt und installiert. Habe daraus die dlls genommen und probiert diese in mein Projekt zu includen. Dies hat leider nicht hingehauen..
Versuch 1
ich habe die qsqlodbc4.dll in den Ordner "lib" geschoben.
Dann folgenen Code ausgeführt:
Code: Alles auswählen
import com.trolltech.qt.gui.QApplication;
import com.trolltech.qt.sql.QSqlDatabase;
public class DatenbankQt {
public static void main(String[] args) {
QApplication.initialize(args);
QApplication.addLibraryPath("lib");
QSqlDatabase db = QSqlDatabase.addDatabase("QODBC4");
if (!db.isValid())
System.out.println("geht nicht");
else
System.out.println("geht!");
}
}
Versuch 2:
Die dll bei der Referenced Libaries hinzugefügt.
Versuch 3:
Die dll in das Jar-Paket von Qt eingefügt.
Bei allen Versuchen wird mir mitgeteilt, dass nur QSQLITE geladen ist..
Was mache ich denn nur flasch?! ich versteh das nicht..
Ich hoffe ihr könnt mir weiter helfen
Vielen Dank für eure Mühe.
Viele Grüße
Wirbelwurm
Re:
Verfasst: 11. Juli 2022 12:27
von SChreiber871
kater hat geschrieben: ↑21. Juli 2010 12:37
Das ist die Doku zu Java. Ach das da oben soll Java Code sein? Bis auf das public am ANfang sie es wie C++ aus.
stimmt:-) Hatte ich auch gleich gedacht.