Wirbelwurms - Qt - Tutorial

Alles zum Qt Framework für Java
Antworten
wirbelwurm
Beiträge: 11
Registriert: 15. Juli 2010 15:13
Kontaktdaten:

Wirbelwurms - Qt - Tutorial

Beitrag 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
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Code: Alles auswählen

   ArrayList<String> labels = new ArrayList<String>(); 
Was soll denn ArrayList sein?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag 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. :)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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 "*" ;)
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Es hätte ja auch ein Typdef sein können ;) Aber stimmt, ist mir nicht aufgefallen.
wirbelwurm
Beiträge: 11
Registriert: 15. Juli 2010 15:13
Kontaktdaten:

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Warum das Rad neu erfinden, gibt doch QtSql. Oder ist das nicht bei QtJambi enthalten? Würde mich arg wundern...
wirbelwurm
Beiträge: 11
Registriert: 15. Juli 2010 15:13
Kontaktdaten:

Beitrag 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]
wirbelwurm
Beiträge: 11
Registriert: 15. Juli 2010 15:13
Kontaktdaten:

Beitrag 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
SChreiber871
Beiträge: 5
Registriert: 8. Juli 2022 14:13

Re:

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