ورود

View Full Version : QSqlError -1



moji_helooo
جمعه 23 فروردین 1392, 13:52 عصر
سلام. من تو ویندوز به SQL Server 2012 از طریق برنامه م توی کیوت متصل شدم. توش یه سری کوئری و اینا زدم و وقتی اجرا می کنم هیچ مشکلی نیست و درست عین منطق برنامه کار می کنه. ولی اون پایین تو قسمت Application Output یه اروری می ده به این صورت زیر:

QSqlError (-1,"","")

دلیلش چیه؟ چی کار کنم که این ارور رو نده؟

alamate_aoal
شنبه 24 فروردین 1392, 00:15 صبح
سلام

کد اتصال به بانک و عملیاتی که منجر به نمایش این پیغام میشه رو درج کن .

moji_helooo
شنبه 24 فروردین 1392, 20:39 عصر
اینا رو توی تابع سازنده‌ی mainwindows گذاشتم.

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("MOJILAPTOP-PC");
db.setDatabaseName("Driver={SQL Server};Server=MOJILAPTOP-PC;Database=Uni;");
db.setUserName("sa");
db.setPassword("123456");


if ( !db.open() )
qDebug() << db.lastError();


و بعد توی یه push button اینا رو گذاشتم که هر وقت اجرا می‌شه این error میاد. ولی برنامه به درستی اجرا می‌شه
void MainWindow::on_pushButton_clicked()
{
QSqlQuery qry;
QString q,str ;
q = QString::fromUtf8("select * from student;");
if ( !qry.exec(q));
{
qDebug() << qry.lastError();
// str = qry.lastError().text();
// QMessageBox::information(this,"",str);
}



QSqlRecord rec = qry.record();
int col = rec.count();
QString temp = "";
for (int a =0 ; a< col ; a++)
temp += rec.fieldName(a) + ((a<col-1)?";":"");

int row = qry.numRowsAffected();

ui->tableWidget->setColumnCount(col);
ui->tableWidget->setHorizontalHeaderLabels(temp.split(";"));
ui->tableWidget->setRowCount(row);

temp = "";

int i = 0;
while (qry.next())
{
for (int j = 0 ; j < col ; j++)
{
temp = qry.value(j).toString();
ui->tableWidget->setItem(i,j,new QTableWidgetItem(temp));
}
i++;
}
}

complexcoding
یک شنبه 25 فروردین 1392, 01:17 صبح
ديتابيست رو در كجا ذخيره كردي؟
چون من اين خط كد شبيه به شما رو به كار بردم خطا گرفت:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
خطاشم اين هست:
D:\QtSDK\QtCreator\bin\Project7000\example\DBApp-build-desktop-Qt_4_7_4_for_Desktop_-_MSVC2008__Qt_SDK__Release\..\DBApp\main.cpp:10: error: C2065: 'QODBC' : undeclared identifier

alamate_aoal
یک شنبه 25 فروردین 1392, 15:54 عصر
در خط 6 بعد از دستور if سمی کالن رو حذف کن.

moji_helooo
یک شنبه 25 فروردین 1392, 16:47 عصر
سمی کالن رو برای یه امتحان کردنی گذاشته بودم. در اصل از اولشم نذاشته بودم. ولی موضوع اینه که برنامم بی هیچ مشکلی اجرا می شه!! ولی این اررور هم میاد که نمی دونم واسه چی؟

alamate_aoal
یک شنبه 25 فروردین 1392, 17:15 عصر
سمی کالن رو برای یه امتحان کردنی گذاشته بودم. در اصل از اولشم نذاشته بودم.
در هر صورت با حذف سمی‌کالن مشکل باید حل بشه , اگر نشد کدت رو کامل بذار

if ( !qry.exec(q)) // ; ***************
{
qDebug() << qry.lastError();
// str = qry.lastError().text();
// QMessageBox::information(this,"",str);
}

aidinMC
یک شنبه 25 فروردین 1392, 19:59 عصر
شما سر چی دارین بحث میکنین؟
QSqlError (-1,"","")
در واقع یعنی کوئری های شما بدون مشکل اجرا شده ، دنبال چی هستی؟

alamate_aoal
یک شنبه 25 فروردین 1392, 20:20 عصر
شما سر چی دارین بحث میکنین؟

if ( !qry.exec(q)); // وجود سمی کالن باعث میشه در صورت درست اجرا شدن/نشدن کوئری بلاک زیر اجرا بشه, در صورتیکه منطقا نباید اجرا بشه
{
qDebug() << qry.lastError();
// str = qry.lastError().text();
// QMessageBox::information(this,"",str);
}

moji_helooo
دوشنبه 26 فروردین 1392, 00:58 صبح
آقا/خانم علامت سوال، اون سمی کالن رو توی تاپیک اشتباهی گذاشتم. سورس برنامه اون سمی کالن رو نداره. اما آقای aidinMC شما یه نگاه به اون دو خط بکنید که به صورت کامنت درشون اوردم بندازید، می خوام وقتی اروری از سمت sql server میاد رو توی یه message box نشون بدم، نه توی qDebug. وقتی که کوئری ها اجرا می شن، به خاطر این اروری مضخرفی که نمی دونم چیه، با اینکه کوئریم داره درست کار می کنه، ولی باعث می شه الکی هی یه messqgeBox باز بشه که محتواش خالیه. البته می تونم با کد زیر این مشکل رو برطرف کنم که هی messagBox باز نشه:


QString str;
if ( !qry.exec(q))
{
str = qry.lastError().text();
if (str != "" )
QMessageBox::information(this,"",str);
}
ولی در کل می خوام ببینم چرا همچین مشکلی هست؟

alamate_aoal
دوشنبه 26 فروردین 1392, 06:38 صبح
QSqlQuery qry("SELECT * FROM student");

if (qry.lastError().type() != QSqlError::NoError)
{
qDebug() << qry.lastError();
}