2017-05-07 33 views
1

連接到firebird嵌入後不會執行SQL請求。 在數據庫中有一個稱爲測試的表。Qt 5.8.0 firebird QSqlQuery錯誤

db = QSqlDatabase::addDatabase("QIBASE"); 
db.setDatabaseName("C:\data.fdb"); 
db.setUserName("SYSDBA"); 
db.setPassword("masterkey"); 

if (db.open()) { 
    qDebug() << "success"; 
} 
else { 
    qDebug() << db.lastError(); 
} 

QSqlQuery q("", db); 
q.exec("show tables;"); 

qDebug() << q.lastError(); 
qDebug() << q.lastError().type(); 
qDebug() << q.lastQuery(); 

調試:

success 
QSqlError("-104", "Could not prepare statement", "Dynamic SQL Error - SQL       
error code = -104 - Token unknown - line 1, column 1 - show") 
2 
"show tables;" 
+0

'db.setDatabaseName(「C:\ DATA.FDB」);'< - 當然這行會導致編譯時警告,不是嗎? '\ D'在C++中不是有效的轉義字符。 – MrEricSir

+0

我有data.fdb - 沒有錯誤 – listins

回答

2

show命令不是SQL的組成部分,因此show tables;不是火鳥引擎識別的命令。各種show命令由一些外部工具實現,即isql。 (是Oracle的dual表的Firebird版本)。或者嘗試從test表中選擇您所知道的數據庫。

+0

當我在cmd中輸入相同的查詢時,一切都很好。 QSqlQuery :: exec()和命令cmd是不是一回事? – listins

+0

你是什麼意思,「當我在cmd中輸入相同的查詢,一切都很好」? CMD像在終端的命令行? – ain

+0

我使用了Firebird ISQL工具 – listins