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

Code: Alles auswählen

   ArrayList<String> labels = new ArrayList<String>(); 
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 :P

Code: Alles auswählen

Databaseconnection db = new Databaseconnection();
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.