2017-03-17 68 views
0

我已經閱讀this問題。我想要使​​用方法QSqlDatabase :: record(const QString & tablename)獲取表的字段名稱。但它總是返回一個空記錄。我可以通過QSQLQuery正確查詢數據庫表。我的數據庫是一個SQL Server數據庫。QSqlDatabase :: record(const QString&tablename)返回空記錄

+1

請** [編輯] **你問題[mcve]或[SSCCE(Short,Self Contained,Correct Example)](http://sscce.org) – NathanOliver

回答

0

其實你應該得到。

正如你所說的SQL服務器,試着用「@yourtablename」。我的意思是在你的QString中的表名前面加上「@」。

如果沒有運氣,

檢查您的表名。 (空格或附加字符等)。

類型轉換爲QString(安全方面)。或者創建一個表名爲QString的對象並傳遞它。

在傳遞之前修剪QString。

仍然由於某種原因,如果你沒有得到字段名稱,請嘗試下面的步驟。

QSqlRecord QSqlDatabase::record(const QString &tablename) const會返回一個QSqlRecord對象

首先得到該號碼字段中記錄

int QSqlRecord::count() const 

循環計數(例如:使用),並得到字段名使用下面的每個指標功能

QString QSqlRecord::fieldName(int index) const

下面的一些僞代碼:(假設你已經成功建立連接,沒有編制,而不是測試。)

QSqlRecord rec = QSqlDatabase::record("Your table name"); 

int count = rec.count(); 

QStringList fieldNames; 

For (int i =0; i<count; i++) 
{ 
    fieldNames.push_back(rec.fieldName(i); 
} 

按Select查詢:

QSqlQuery select; 
select.prepare("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName'"); 

if (select.exec() && select.next()) { 
    QSqlRecord record = select.record(); 
} 
+0

我嘗試了所有提示,但仍無法正常工作。我從QSqlDatabase :: record()中獲得空值,並且QSqlRecord :: count()返回零。 –

+0

嗯....你是否嘗試過這樣的事情QString str =「@tablename」。 – Naidu

+0

你可以嘗試查詢選擇語句,我在我的答案中添加了。 – Naidu

相關問題