Qt监控Access数据库
配置文件setup.ini内容
[General]
DBFilePath=C:/Users/WangGang/Desktop/Database1.accdb
DBUserName=
DBPassword= GameIp=192.168.1.152
GamePort=
4DSystemIp=192.168.1.152
4DSystemPort=
UdpDataToGame=StartGame
UdpDataTo4DSystem=AS%NPlayDirect%%
工程文件中QT+=sql
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include <QUdpSocket>
#include <QtSql> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow(); void connectDB(); void sendUdpData();
private slots:
void on_pushButton_clicked(); void queryDB(); void readUdpData(); private:
Ui::MainWindow *ui;
QTimer* queryTimer;//监测数据库定时器 QUdpSocket* udpSocket; QSqlDatabase db;
QString DBFilePath;//数据库文件路径
QString DBUserName;//数据库用户名
QString DBPassword;//数据库密码
QString GameIp;//游戏主机IP
quint16 GamePort;//游戏UDP绑定的端口
QString FourDSystemIp;//4D系统IP
quint16 FourDSystemPort;//4D系统UDP绑定的端口
QString UdpDataToGame;//向游戏发送的UDP数据
QString UdpDataTo4DSystem;//向4D系统发送的UDP数据
}; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h" #include <QMessageBox> MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); QString appDirPath = QCoreApplication::applicationDirPath();
QSettings* configIniRead = new QSettings(appDirPath+"/setup.ini", QSettings::IniFormat);
configIniRead->setIniCodec(QTextCodec::codecForName("GB2312"));
if( configIniRead->allKeys().size() > )
{
DBFilePath = configIniRead->value("DBFilePath").toString();
DBUserName = configIniRead->value("DBUserName").toString();
DBPassword = configIniRead->value("DBPassword").toString();
GameIp = configIniRead->value("GameIp").toString();
GamePort = configIniRead->value("GamePort").toUInt();
qDebug()<<GameIp<<GamePort;
FourDSystemIp = configIniRead->value("4DSystemIp").toString();
FourDSystemPort = configIniRead->value("4DSystemPort").toUInt();
UdpDataToGame = configIniRead->value("UdpDataToGame").toString();
UdpDataTo4DSystem = configIniRead->value("UdpDataTo4DSystem").toString();
qDebug()<<"DBFilePath:"<<DBFilePath;
qDebug()<<"DBUserName:"<<DBUserName;
}
else
{
qDebug() << "have no setup.ini , use default setting ." ;
} connectDB(); udpSocket = new QUdpSocket(this);
connect( udpSocket, SIGNAL(readyRead()), SLOT(readUdpData()) ); queryTimer = new QTimer(this);
//connect( queryTimer, SIGNAL(timeout()), SLOT(queryDB()) );
queryTimer->start(); } MainWindow::~MainWindow()
{
delete ui;
db.close();
} //创建数据库连接
void MainWindow::connectDB()
{
QString sDbNm = DBFilePath;//数据库文件
db = QSqlDatabase::addDatabase("QODBC");//设置数据库驱动
QString dsn = QString("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; FIL={MS Access};DBQ=%1;").arg(sDbNm);//连接字符串
db.setDatabaseName(dsn);//设置连接字符串
db.setUserName(DBUserName);//设置登陆数据库的用户名
db.setPassword(DBPassword);//设置密码
bool ok = db.open();
if (!ok) {
QMessageBox messageBox;
messageBox.setText("Database error");
messageBox.exec();
db.close();
}
}
//查询数据库数据
void MainWindow::queryDB()
{
QSqlQuery query;
query.prepare("select * from t1");
query.exec();
while (query.next())
{
qDebug()<<query.value().toString();
//udpSocket->writeDatagram(data, sender, senderPort);
}
query.clear();
} void MainWindow::sendUdpData()
{
udpSocket->writeDatagram(UdpDataToGame.toStdString().data(), QHostAddress(GameIp), GamePort);
//qDebug()<<GameIp<<GamePort;
udpSocket->writeDatagram(UdpDataTo4DSystem.toStdString().data(), QHostAddress(FourDSystemIp), FourDSystemPort);
} void MainWindow::readUdpData()
{
QByteArray data;
QHostAddress sender;
quint16 senderPort = ; while ( udpSocket->hasPendingDatagrams() )
{
data.resize( udpSocket->pendingDatagramSize() );
udpSocket->readDatagram( data.data(), data.size(), &sender, &senderPort );
// DECLARE_DATA_READER(data, command);
// switch ( command )
// {
// case COMMAND_START_APP: onCmdStartApp(sender, senderPort, dataStream);break;
// case COMMAND_STOP_APP: onCmdStopApp(sender, senderPort, dataStream);break;
// case COMMAND_START_GAME: onCmdStartGame(sender, senderPort, dataStream);break;
// case COMMAND_PULSE: onCmdPulse(sender, senderPort, dataStream);break;
// case COMMAND_SHUTDOWN: onCmdShutdown(sender, senderPort, dataStream);break;
// default: break;
// }
}
} void MainWindow::on_pushButton_clicked()
{
queryDB();
sendUdpData();
}
Qt监控Access数据库的更多相关文章
- DPA/Ignite由于DNS问题导致连接不上被监控的数据库服务器
问题描述: 在DPA(Ignite)的管理监控界面发现有两台SQL Server数据库服务器连接不上,截图如下所示,检查其日志内容 具体错误日志如下所示, Notice:日志里面具体的服务器名称被我用 ...
- 使用percona-xtrabackup实现对线上zabbix监控系统数据库mariadb5.5.47的主从同步
使用percona-xtrabackup实现对线上zabbix监控系统数据库的主从同步 业务背景: zabbix3.0.4是业务的主要监控,部署在一台单机中,为避免数据丢失先对其做数据主从同步,因主数 ...
- QT连接多种数据库f方法及测试
QT提供了对多种数据库的访问支持,对SQL Server也可以通过ODBC来进行访问.要想顺利访问SQL Server. 首先要保证以下几点:1. QT编译时已经编译了QtSql2. 编译了ODBC插 ...
- Qt 操作SQLite数据库
项目中通常需要采用各种数据库(如 Qracle.SQL Server.MySQL等)来实现对数据的存储.查询等功能.下面讲解如何在 Qt 中操作 SQlite 数据库. 一.SQLite 介绍 Sql ...
- 007-Zabbix Server 自带模板监控MySQL数据库
监控数据库分为三种: 1.Zabbix Server 自带模板监控无密码MySQL数据库 2.Zabbix Server 自带模板监控有密码MySQL数据库 3.Zabbix Server 自带模板监 ...
- access数据库调用
1.工程环境配置(vs+qt) 点击项目,右键,选择项目设置,选择SQL 2.获取自己数据库的驱动版本有哪些,如下代码所示: QStringList drivers = QSqlDatabase::d ...
- 使用Zabbix监控Oracle数据库
Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...
- 【.net 深呼吸】连接Access数据库应注意的几点
本地数据库可以有Y种选择,比如Sqlite.SQL Server Express.SQL Local DB.SQL Server CE.Access等,本文老周选用比较著名的Access本地数据库,在 ...
- Spotlight监控Oracle数据库的链接创建
最近在做性能测试时,由于要挂载空间数据,开发人员直接将所有业务表都挂到了Oracle数据库中.最近做了几次测试发现响应时间和吞吐量都不是很理想,进行一番分析后怀疑可能在Oracle中出现问题,因此再网 ...
随机推荐
- iOS调用其它App,如拨打电话、发送邮件等。UIApplication:openURL:方法是实现这一目的的
在iOS开发中,经常需要调用其它App,如拨打电话.发送邮件等.UIApplication:openURL:方法是实现这一目的的最简单方法,该方法一般通过提供的url参数的模式来调用不同的App. 通 ...
- 【C#/WPF】图像数据格式转换时,透明度丢失的问题
问题:工作中涉及到图像的数据类型转换,经常转着转着发现,到了哪一步图像的透明度丢失了! 例如,Bitmap转BitmapImage的经典代码如下: public static BitmapImage ...
- buildroot 文件系统添加telnet, ssh, 以及制作注意事项
buildroot 制作Linux嵌入式文件系统,并添加telnet 以及ssh * sshd 服务的添加 // make menuconfig Target options ---> Targ ...
- FusionCharts JavaScript API - Functions 常用方法整理笔记
FusionCharts JavaScript API - Functions Home > FusionCharts XT and JavaScript > API Reference ...
- C++ 标准头文件与C头文件区别与联系以及C风格字符串
1.cstdlib是C++里面的一个常用头文件, 等价于C中的<stdlib.h>. 2.一般一个带“.h” 扩展名的库文件,比如iostream.h.这是延续C语言的,为了兼容C.在新标 ...
- poj3208 Apocalypse Someday 数位dp+二分 求第K(K <= 5*107)个有连续3个6的数。
/** 题目:poj3208 Apocalypse Someday 链接:http://poj.org/problem?id=3208 题意:求第K(K <= 5*107)个有连续3个6的数. ...
- JVM中的垃圾回收
GC 垃圾回收回收什么 Java的内存分配原理与C/C++不同.C/C++每次申请内存时都要malloc进行系统调用.而系统调用发生在内核空间,每次都要中断进行切换,这须要一定的开销. 而Java虚拟 ...
- 【C】——回调函数实现泛型算法
回调函数的一个典型应用就是实现类似C++的泛型算法(Generics Algorithm).下面实现的max函数可以在任意一组对象中找出最大值,可以是一组int.一组char或者一组结构体,但是实现者 ...
- mac配置完ssh依然提示"Enter passphrase for key"解决方法
使用Git,每次都提示输入命令. 这个问题折磨很久,明明已经配置过ssh了,可是每次还要提示输入密码,从网上查查,最后一条命令解决问题: 问题提示: Enter passphrase for key ...
- C语言 字面量
在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation). 几乎所有计算机编程语言都具有对基本值的字面量表示,诸如:整数.浮点数以及字符串: 而有很多也对布尔类 ...