QT/C++标签文档报表工具

25 篇文章 6 订阅


一、演示预览

请添加图片描述

二、使用步骤

1.环境配置

1、第一次在电脑上需要注册报表库,要不让软件运行会报错,这里已经写好了批处理直接运行就行。
在这里插入图片描述
2、批处理的文件主要是注册dll和安装sqlite驱动,具体如下
在这里插入图片描述
3、ReportUser模块第一次编译的时候会报错,不用去理他,编译第二次就可以
在这里插入图片描述
在这里插入图片描述

二、核心代码

1.报表程序

void ReportUser::Init()
{
	// 第一次打开先注册
	QString strPath = QCoreApplication::applicationDirPath() + "/FirstOpen.rpt";
	QDir dir;
	if (!dir.exists(strPath))
	{
		QString strBatDir = QCoreApplication::applicationDirPath() + "/Data";
		QString strBatFile = QCoreApplication::applicationDirPath() + "/Data/install.bat";
		QProcess p(NULL);
		p.setWorkingDirectory(strBatDir);
		p.start(strBatFile);
		p.waitForFinished();

		dir.mkpath(strPath);
	}

	// 加载数据库
	SqlUser::GetInstance()->InitDB();
	LoadSourcesData(g_qlite, g_tableName);

	// 加载模板
	QString strPathFr3 = QCoreApplication::applicationDirPath() + "/Data/data.fr3";
	LoadTemplateFile(strPathFr3);
}

bool ReportUser::LoadSourcesData(const char* chDataSource, const char* chTableName)
{
	CoInitialize(NULL);
	bool bRet = true;

	try
	{
		m_pData->pReport = IfrxReportPtr(__uuidof(TfrxReport));
		m_pData->pDB = IfrxADODatabasePtr(__uuidof(TfrxADODatabase));
		m_pData->pDT = IfrxADOTablePtr(__uuidof(TfrxADOTable));
		m_pData->pQR = IfrxADOQueryPtr(__uuidof(TfrxADOQuery));

		// Set the database object properties
		m_pData->pDB->ConnectionString = chDataSource;
		m_pData->pDB->LoginPrompt = false;
		m_pData->pDB->Connected = true;

		// Set the table object properties
		const char* chTableNameTemp = chTableName;
		m_pData->pDT->PutDatabase(m_pData->pDB);
		m_pData->pDT->Name = chTableNameTemp;
		m_pData->pDT->TableName = chTableNameTemp;

		// Set the query object properties
		m_pData->pQR->PutDatabase(m_pData->pDB);

		char buf[256];
		const char *chTemp = "select * from ";
		memset(buf, 0, sizeof(buf));
		strcpy(buf, chTemp);
		strcat(buf, chTableNameTemp);

		m_pData->pQR->Query = buf;

		// Link ADO table and ADO query to the Report object
		m_pData->pReport->SelectDataset(true, IfrxDataSetPtr(m_pData->pDT));
		m_pData->pReport->SelectDataset(true, IfrxDataSetPtr(m_pData->pQR));
	}
	catch (_com_error e)
	{
		bRet = false;
		CoUninitialize();

		return bRet;
	}

	CoUninitialize();

	return bRet;
}

2. 数据库程序

代码如下:

// 打开数据库
bool SqlUser::InitDB()
{
	if (QSqlDatabase::contains("qt_sql_default_connection"))
	{
		m_dataBase = QSqlDatabase::database("qt_sql_default_connection");
		return true;
	}
	else
	{
		// 建立和SQlite数据库的连接
		m_dataBase = QSqlDatabase::addDatabase("QSQLITE");
		// 设置数据库文件的名字
		m_dataBase.setDatabaseName("ReportDatabase.db");
	}

	if (!m_dataBase.open())
	{
		m_bConnected = false;
		qDebug() << "Error: Failed to connect database." << m_dataBase.lastError();
	}
	else
		m_bConnected = true;

	return m_bConnected;
}

// 执行sql语句
bool SqlUser::Excute(QString sql)
{
	if (!m_bConnected) 
		return false;

	QSqlQuery query;

	query.prepare(sql);
	bool success=query.exec(sql);
	if(!success)
	{
		qDebug() << "Error:" << query.lastError();
		return false;
	}

	return true;

}

// 创建表
bool SqlUser::CreatTable()
{
	bool bRet = false;
	if (m_strTableNameList.size() <= 0)
		return bRet;

	QString strCreateTable = QString(u8"CREATE TABLE ReportData(SysIndex INTEGER PRIMARY KEY");
	for (int i = 0; i < m_strTableNameList.size(); i++)
	{
		if (i < (m_strTableNameList.size() - 1))
			strCreateTable = strCreateTable + "," + m_strTableNameList[i] + " VARCHAR(256)";
		else
			strCreateTable = strCreateTable + "," + m_strTableNameList[i] + " VARCHAR(256)" + ")";
	}

	bRet = Excute(strCreateTable);
	return bRet;
}

三、代码链接

代码链接
https://download.csdn.net/download/u013083044/85120988

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的大海贼

联系博主,为您提供有价值的资源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值