Seite 1 von 1
[gelöst] QSqlQuery und size() - bin ich verrückt?
Verfasst: 29. April 2006 02:34
von oberschlingel
Hallo,
ich habe folgenden Code:
Code: Alles auswählen
QSqlQuery query;
query.exec("SELECT * FROM beispieltabelle;");
int temp = query.size();
Wert von temp = -1
Die Abfrage wird aber erfolgreich ausgeführt, wenn ich sie anschliessend mit query.next() durchlaufe, bekomme ich auch alle Werte zurück.
numRowsAffected() wäre an dieser Stelle zwar falsch, habe es trotzdem probiert: gibt 0 zurück.
Ich verwende Qt 4.1.1
Spinne ich? Hat jemand Rat?
DANKE!
Re: QSqlQuery und size() - bin ich verrückt?
Verfasst: 29. April 2006 02:52
von patrik08
oberschlingel hat geschrieben:Hallo,
Ich verwende Qt 4.1.1
Hatte auch komische dinge mit 4.1.1... window besonder mit sqlite und qlocale....
als ich 4.1.2 gebuildet habe ist es viel besser....
hingegen auf meinen mac lauft alles einfach alles rund mit qt ... egal !version...
probier mal die kolonne zu zaehlen ....
oder ein dump export...
Code: Alles auswählen
void Gui_Starter::TablesDump(QString t,QString file)
{
QString tablequery ="SELECT * FROM "+t;
QString line;
QString rowone;
QSqlQuery query;
query.exec(tablequery);
QSqlRecord rec = query.record(); /* nummer col */
int numcol = rec.count();
int loop;
while (query.next()) {
line="";
for(loop=0; loop < numcol; loop++) {
rowone = query.value(loop).toString();
rowone.replace(QString("'"), QString("\'"));
if (!is_numeric(rowone)){
rowone = QString( "'%1'" ).arg( rowone );
}
if (loop !=numcol-1) {
line = line+QString( "%1," ).arg( rowone );
} else {
line = line+rowone;
}
rowone="";
}
line.prepend("INSERT INTO "+t+" VALUES (");
line.append(");");
file_put_contents_append(file,line);
}
}
alles linken....
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlTableModel>
#include <QSqlRelationalTableModel>
#include <QSqlRelationalDelegate>
#include <QHeaderView>
#include <QSqlRecord>
QT += sql ... im pro
Verfasst: 29. April 2006 02:59
von oberschlingel
Hallo Patrik,
danke für die Antwort, habe das Problem eben selbst gelöst.
Man muss in der Qt Doku nicht unter "
QSqlQuery" nachsehen, sondern unter "
QtSql", also eine ordentliche Ebene höher. Dann findet man folgendes:
Code: Alles auswählen
QSqlDatabase defaultDB = QSqlDatabase::database();
if (defaultDB.driver()->hasFeature(QSqlDriver::QuerySize)) {
temp = query.size();
} else {
// this can be very slow
query.last();
temp = query.at() + 1;
}
Grüsse!
Verfasst: 30. April 2006 10:15
von patrik08
fast jede sqltype kann count(feldnamen / tabellen)
select count(name) FROM sqlite_master WHERE type!='meta' AND sql NOT NULL
select count(Id) FROM Adressen
gibt dann auch einen size oder null
Verfasst: 30. April 2006 11:28
von oberschlingel
Stimmt, da hätte ich auch noch drauf kommen können! Verwende es oft zum Zählen von Einträgen, damit aber die gesamte Tabellenlänge auszulesen, hätte mir einfallen sollen.
Denn obige Lösung mit erst ans Ende hüpfen und dann den Index lesen, ist sehr sehr langsam.
Danke!
Verfasst: 30. April 2006 11:36
von patrik08
ich habe nun sicher 30 min.. verbracht zahlen aus der db zu holen....
erster versuch.....
Code: Alles auswählen
int get_nummer(QString incomming)
{ int nummer = 0;
incomming.replace(QString(" "), QString("")); /* trimm */
QString str2 = incomming;
bool ok;
str2.toFloat(&ok);
if (ok) {
return str2.toInt();
}
return nummer;
}
der erfolg!!!!
Code: Alles auswählen
int Gui_Starter::CountTable()
{
QString tablequery ="SELECT count(name) FROM sqlite_master WHERE type!='meta' AND sql NOT NULL";
QSqlQuery query;
QString countstr;
int summs = 0;
if (is_DB_open) {
query.exec(tablequery);
query.first();
if(query.value(0).toInt()>0) {
return query.value(0).toInt();
}
}
return summs;
}
da ich 10 jahre mit php query auf alle moegliche tabellen machte ... muss man ernst umdenken dass alles ein typ hat im qt oder c++