PDA

View Full Version : MS SQL QODBC Query Size -1



Pablik
29th March 2017, 14:21
Hi, i have problem with MS SQL, after i open connection without error, all query i exec have size -1



void MainWindow::on_pushButtonLogin_clicked()
{
QString nameServer = "192.168.3.201\\OPTIMA";
QString dbName = "CDN_Test";
QString dataBaseName = QString("DRIVER={SQL Server};SERVER=%1;DATABASE=%2;").arg(nameServer).arg(dbName);

db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(dataBaseName);
db.setUserName("<LOGIN>");
db.setPassword("<PASSWORD>");

if (!db.open())
QMessageBox::critical(0, QObject::tr("Database Error"), db.lastError().text());
}

void MainWindow::on_pushButtonGetUsers_clicked()
{
QSqlQuery query(db);
query.exec("SELECT * FROM [CDN].[Kontrahenci]");

QMessageBox::critical(0, QObject::tr("Database Error"), query.lastError().text() ); //No error
QMessageBox::critical(0, QObject::tr("Database Error"), QString::number( query.size() )); // -1

}

Lesiok
29th March 2017, 14:46
From QSqlQuery::size doc : Returns the size of the result (number of rows returned), or -1 if the size cannot be determined or if the database does not support reporting information about query sizes.

Pablik
29th March 2017, 15:00
So how i can get result of my query ??

Lesiok
30th March 2017, 06:54
I do not understand what the problem is. Size () == - 1 does not mean no result of query.

Pablik
30th March 2017, 08:03
Sorry i think if Szie() is -1 then next() and value() will by not work. Thx for help.
Is other way to check how meny record have query ???

I do someting like that, it work's but is not good way.



void MainWindow::on_pushButtonGetUsers_clicked()
{


QSqlQuery query(db);
query.exec("SELECT Knt_Kod, Knt_Ulica, Knt_NrDomu, Knt_Miasto, Knt_KodPocztowy, Knt_Poczta, Knt_Pesel FROM CDN.Kontrahenci");
query.next();
if(!query.value(0).toString().isEmpty())
{
ui->tableWidget->setRowCount(1);
addRecordToTable(&query, 0);
query.next();

int row=2;
while(!query.value(0).toString().isEmpty())
{
ui->tableWidget->setRowCount(row);
addRecordToTable(&query, row-1);
row++;
query.next();
}
}
}

Lesiok
30th March 2017, 14:53
Shorter code :

void MainWindow::on_pushButtonGetUsers_clicked()
{


QSqlQuery query(db);
query.exec("SELECT Knt_Kod, Knt_Ulica, Knt_NrDomu, Knt_Miasto, Knt_KodPocztowy, Knt_Poczta, Knt_Pesel FROM CDN.Kontrahenci");
int row=1;
while(query.next())
{
ui->tableWidget->setRowCount(row);
addRecordToTable(&query, row-1);
row++;
}
}
BTW : why not to use QTableWidget with QSqlQuryModel ?