網上有很多關于pos機顯示數據連接失敗,QT5.14.1+Win7 64+Oracle11gR2 Qt連接數據庫的知識,也有很多人為大家解答關于pos機顯示數據連接失敗的問題,今天pos機之家(www.tonybus.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機顯示數據連接失敗
1.qt5.14下OCI驅動編譯完整步驟1.安裝Qt的時候手動選擇安裝源碼資源(默認不安裝Source的)
2.進入QT安裝目錄下E:\\Qt5.14\\5.14.0\\Src\\qtbase\\src\\plugins\\sqldrivers\\oci
雙擊用qtcreator打開oci.pro文件
進行如下圖片內對oci.pro的修改
前提準備:
找到本地oracle客戶端的目錄 例如:C:\\Oracle\\instantclient_11_2
(溫馨提示:oracle客戶端的版本不能比oracle服務端的低)
3.構建項目產生如下錯誤:’OCIBindByPos2’ was not declared in this scop
4.雙擊錯誤可以進入錯誤顯示在qsql_oci.cpp文件的1559行
5.錯誤原因以及解決方式
新的OCIBindByPos2()函數和以前的OCIBindByPos()函數產生出入
新版本OCIBindByPos2()函數第九個參數的數據類型是ub4*
舊版本OCIBindByPos()函數第九個參數的數據類型是ub2*
故此進行一個強制類型轉化,將新版的第九個參數改位ub2*類型即可,同時函數名也要改為舊版本。
【領QT開發教程學習資料,點擊下方鏈接免費領取↓↓,先碼住不迷路~】
點擊→領取「鏈接」
6.進行項目構建,產生的驅動程序在qt所在盤符下的plugins目錄下的sqldrivers目錄中
注意并不是在qt的目錄下,如下圖所示7.將這產生的幾個文件拷貝到Qt下你所用編譯器下即可,如下所示
8.如果使用驅動失?。ㄟB接Oracle數據庫失?。?/p>
問題:可能是Oracle客戶端的oci.dll動態庫識別不到
解決方案兩個:
一、可以將Oracle客戶端的oci.dll動態庫所在的文件夾的絕對路徑添加到系統環境變量當中。
二、可以將Oracle客戶端的oci.dll動態庫直接拷貝到qt項目下
三、可以在qt中直接加載Oracle客戶端oci.dll動態庫,如下操作
//使用的時候要加入頭文件 #include <QLibrary>QLibrary *joker_lib = NULL; joker_lib = new QLibrary("C:\\\\Oracle\\\\instantclient_11_2\\\\oci.dll"); joker_lib->load(); if(!joker_lib->isLoaded()){ qDebug()<<"動態庫沒有被加載!"; return -1; }
// 需要添加的模塊QT += sql12創建數據庫實例, 并且登錄數據庫 -> QSqlDataBase
// 得到不同的數據庫驅動的名字, 如果能得到數據庫對應的驅動名說明支持, 如果得不到, 說明不支持連接該數據庫// ("QSQLITE", "QMySQL", "QMYSQL3", "QOCI", "QOCI8", "QODBC", "QODBC3", "QPSQL", "QPSQL7")[static] QStringList QSqlDatabase::drivers();// 添加一個數據庫實例// 連接oracle 需要的驅動名 -- QOCI[static] QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = QLatin1String( defaultConnection ));參數:- type: 指定要連接什么樣的數據庫, 這個字符串是數據庫驅動的名字 - connectionName: 數據庫連接名, 使用這個名字區分不同的數據庫 返回值: 得到一個數據庫實例 // 設置數據庫的連接信息// 用戶名, 密碼, 數據庫實例名, 數據庫的IP, 數據庫的端口// 設置用戶名void QSqlDatabase::setUserName(const QString &name);// 設置密碼void QSqlDatabase::setPassword(const QString &password);// 設置數據庫實例名void QSqlDatabase::setDatabaseName(const QString &name);// 設置數據庫的IP// 參數: IP/域名 // 本地連接使用域名: localhost == "127.0.0.1"// 域名需要綁定IP地址void QSqlDatabase::setHostName(const QString &host);// 設置數據庫的端口// 連接數據庫的時候這個函數一般不需要調用, 如果數據庫服務器綁定的不是默認端口, 需要調用該函數void QSqlDatabase::setPort(int port);// 連接/登錄/打開數據// 登錄成功: true, 失敗: falsebool QSqlDatabase::open();// 如果登錄失敗, 獲取錯誤信息QSqlError QSqlDatabase::lastError() const;QString QSqlError::text() const;// 事務操作// 開啟一個事務bool QSqlDatabase::transaction();// 提交數據bool QSqlDatabase::commit();// 數據回滾bool QSqlDatabase::rollback();
// 示例程序// 打印支持的數據庫的驅動qDebug() << QSqlDatabase::drivers();// 創建數據庫實例QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");// 設置連接信息db.setHostName("192.168.xxx.xxx");db.setDatabaseName("orcl");db.setUserName("scott");db.setPassword("tiger");// 連接數據庫bool bl = db.open();if(!bl){ qDebug() << "連接數據失敗" << db.lastError().text();}else{ qDebug() << "連接數據成功";}
用于執行sql語句的類 -> QSqlQuery
【領QT開發教程學習資料,點擊下方鏈接免費領取↓↓,先碼住不迷路~】
點擊→領取「鏈接」
// 常用的構造函數QSqlQuery::QSqlQuery(const QString &query = QString(), QSqlDatabase db = QSqlDatabase())參數:- query: 即將要被執行的sql語句 - db: 數據庫實例// 設置并執行sql語句// sql語句執行成功了:true, 失敗: falsebool QSqlQuery::exec(const QString &query);bool QSqlQuery::exec();// 如果執行的查詢的語句, 會的得到一個結果集, 這個結果集在 QSqlQuery 對象內部// 如何遍歷結果集?// 如果得到一個條記錄返回: true, 否則: falsebool QSqlQuery::next();while(q->next()){ // 將當前記錄的字段值取出}// 如何將當前記錄的字段值取出?// 參數 index -> 字段的下標(編號), 第一個字段用0表示QVariant QSqlQuery::value(int index) const;// 參數: name: 字段的名字QVariant QSqlQuery::value(const QString &name) const;
示例代碼
// 打印支持的數據庫的驅動qDebug() << QSqlDatabase::drivers();// 創建數據庫實例QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");// 設置連接信息db.setHostName("192.168.xxx.xxx");db.setDatabaseName("orcl");db.setUserName("scott");db.setPassword("tiger");// 連接數據庫bool bl = db.open();if(!bl){ qDebug() << "連接數據失敗" << db.lastError().text();}else{ qDebug() << "連接數據成功";}// 對數據操作使用sql語句// 創建一個操作sql語句的類QSqlQuery query;QString sql = "select * from dept";bl = query.exec(sql);if(bl == false){ qDebug() <<"查詢失敗..."; return;}// 遍歷結果集while(query.next()){ // 將當前記錄的字段值取出 qDebug() << "編號: " << query.value("deptno").toInt() << ", 姓名: " << query.value("dname").toString() << ", 位置: " << query.value("loc").toString();}// 開啟一個事務db.transaction();sql = "insert into dept values(01, 'Joker', '上海')";bl = query.exec(sql);if(bl){ // 提交數據 db.commit();}else{ // 數據回滾 db.rollback();}
qt連接mysql數據錯誤信息
// "Driver not loaded Driver not loaded"/*原因: 并不是qt中沒有mysql驅動, 缺的是一個mysql的動態庫這個動態庫是怎么得到的?- windows上需要安裝mysql, mysql的安裝目錄C:\\Program Files (x86)\\MySQL\\MySQL Server 5.7\\lib\\libmysql.dll需要將這個動態庫拷貝到qt的編譯套件的bin目錄:C:\\Qt\\Qt5.9.3\\5.9.3\\mingw53_32\\bin如果Qt編譯套件是32位, libmysql.dll 應該是32位如果Qt編譯套件是64位, libmysql.dll 應該是64位*/
pos機一直顯示連接失敗PN碼
接口沒接好。
pos機顯示pin碼需要檢查接口是否插入正確。檢查電話線是否是完好的。檢查網線接口是否插入正確。檢查是否插在有線路由器上,是否換過路由器。鬧渣若排除了以上內容,請嘗試關機重啟,如故障依舊,頃彎并建議聯系業務經理協助解決雀跡。
以上就是關于pos機顯示數據連接失敗,QT5.14.1+Win7 64+Oracle11gR2 Qt連接數據庫的知識,后面我們會繼續為大家整理關于pos機顯示數據連接失敗的知識,希望能夠幫助到大家!
