2014-12-08 156 views
2

我正在寫一個QT GUI應用程序,它將一個.csv文件導入到sqlite數據庫表 我的.csv文件位於路徑/home/aj/import_table.csv 和我的數據庫是/home/aj/testdatabase.db將.csv文件導入到QT上的sqlite3數據庫表gui

我寫了下面的代碼塊---

void MainWindow::on_importButton_clicked() 
{ 
    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName("/home/aj/testdatabase.db"); 

    QString querystr; 
    querystr=QString(".separator ",""); 
    QSqlQuery query(querystr,db); 
    if(query.exec()) 
    { 
     qDebug()<<"SUCCESSFULLY QUEIRED "; 

     QString querystr2; 
     querystr=QString(".import import_table.csv test_table"); 
    } 
    else 
    { 
     qDebug()<<"ERROR DURING QUERY "<<db.lastError().text(); 
    } 
} 

,但它是在編譯時間 -

/home/aj/sqlite3test/mainwindow.cpp:34: error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
/home/aj/sqlite3test/mainwindow.cpp:34: error: conversion from ‘const char [1]’ to ‘QChar’ is ambiguous
/home/aj/sqlite3test/mainwindow.cpp:34: error: conversion from ‘const char [1]’ to ‘QChar’ is ambiguous
/usr/local/Trolltech/Qt-4.8.4/include/QtCore/qstring.h:90: error: initializing argument 1 of ‘QString::QString(int, QChar)’ [-fpermissive]

拋出錯誤

任何解決方案?

是否發生這種情況,因爲.separator和.import是sqlite終端命令,無法通過querystr = Qstring(「... ... ...」)執行;格式?

+1

「但它是在運行時拋出錯誤」 - 那些看起來像編譯錯誤給我。 – harmic 2014-12-08 04:49:13

+1

哪個是該函數中的第34行? – harmic 2014-12-08 04:49:28

+1

對不起,編譯時間.. – RicoRicochet 2014-12-08 04:52:06

回答

4

這條線:

querystr=QString(".separator ",""); 

試圖構造使用兩個const char *作爲參數傳遞給構造函數的QString。根據the documentation沒有構造函數接受這個組合。 。

我想你的意思是這樣的字符串內的引號(「)你需要用反斜槓逃避他們,就像這樣:

querystr=QString(".separator \",\""); 

讓編譯器知道他們應該是字符串的一部分,而不是界定其

這應該解決您的編譯錯誤,無論其你最後的評論是正確的,SQLite documentation狀態:

And, of course, it is important to remember that the dot-commands are interpreted by the sqlite3.exe command-line program, not by SQLite itself. So none of the dot-commands will work as an argument to SQLite interfaces like sqlite3_prepare() or sqlite3_exec().

換句話說,如果您想從自己編寫的C++程序中讀取CSV文件,則必須在自己的代碼中解析該文件,並通過SQL INSERT命令插入記錄。

+1

非常感謝您確認我對.dot命令的懷疑。 編譯錯誤現在被刪除,但它仍然不起作用。 任何教程鏈接/文件解析.dot命令到我的c + +程序??? – RicoRicochet 2014-12-08 05:42:05

+1

@AmarjitBiswas正如答案中所述,您不能直接從C++程序調用.dot命令。你可以使用例如。 popen運行sqlite cli工具並使用它來進行導入,但我不會推薦。我建議編寫自己的簡單解析和插入例程。 – harmic 2014-12-08 06:01:09