栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Qt笔记-Qt使用DPI访问达梦7数据库

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Qt笔记-Qt使用DPI访问达梦7数据库

这里开发环境以Windows为例,官方其实已经有了C/C++使用DPI,这里本人只是记录下重点,方便以后进行查阅。

首先是驱动不能少:

这里我用的编译器是MSVC140,版本把,也就是vs2015

Qt.pro文件:

QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += 
        main.cpp

INCLUDEPATH += D:/DM/DM/source/drivers/dpi/include
LIBS += -LD:/DM/DM/source/drivers/dpi -ldmdpi

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

 main.cpp

#include 
#include 
#include "DPI.h"
#include "DPIext.h"
#include "DPItypes.h"

#define DM_SVR "127.0.0.1:5236"
#define DM_USER "SYSDBA"
#define DM_PWD "SYSDBA"

dhenv henv; 
dhcon hcon; 
dhstmt hstmt; 
dhdesc hdesc; 
DPIRETURN rt; 

void dpi_err_msg_print(sdint2 hndl_type, dhandle hndl)
{
    sdint4 err_code;
    sdint2 msg_len;
    sdbyte err_msg[SDBYTE_MAX];

    
    dpi_get_diag_rec(hndl_type, hndl, 1, &err_code, err_msg, sizeof(err_msg), &msg_len);
    printf("err_msg = %s, err_code = %dn", err_msg, err_code);
}


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    sdint4  out_c1 = 0;
    sdbyte  out_c2[20]= { 0 };
    slength out_c1_ind = 0;
    slength out_c2_ind = 0;
    ulength row_num;

    //连接数据库
        
        rt = dpi_alloc_env(&henv);

        
        rt = dpi_alloc_con(henv, &hcon);

        
        rt = dpi_login(hcon, (sdbyte *)DM_SVR, (sdbyte *)DM_USER, (sdbyte *)DM_PWD);
        if(!DSQL_SUCCEEDED(rt))
        {
            dpi_err_msg_print(DSQL_HANDLE_DBC, hcon);
            return rt;
        }
        printf("dpi: connect to server success!n");


        rt = dpi_alloc_stmt(hcon, &hstmt);

        //select * from CLCC.CLCC_REGION
        qDebug() << dpi_exec_direct(hstmt, (sdbyte*) "select * from CLCC.CLCC_REGION");
        dpi_bind_col(hstmt, 1, DSQL_C_SLONG, &out_c1, sizeof(out_c1), &out_c1_ind);
        dpi_bind_col(hstmt, 2, DSQL_C_NCHAR, &out_c2, sizeof(out_c2), &out_c2_ind);

        printf("dpi: select * from table...n");
        while(dpi_fetch(hstmt, &row_num) != DSQL_NO_DATA)
        {
            printf("c1 = %d, c2 = %s ,n", out_c1, out_c2);
        }
        printf("dpi: select successn");


        //断开数据库连接
        
        rt = dpi_logout(hcon);
        if(!DSQL_SUCCEEDED(rt))
        {
            dpi_err_msg_print(DSQL_HANDLE_DBC, hcon);
        return rt;
        }
        printf( "dpi: disconnect from server success!n" );

        
        rt = dpi_free_con(hcon);
        rt = dpi_free_env(henv);

        return rt;

    return a.exec();
}

最简单的实例代码已经上来了,源码打包下载如下:

Qt/DPIWindows at master · fengfanchen/Qt · GitHub

剩下的就是大家自己去封装把,这里我封装的代码不能开源。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942379.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号