Qt中怎样远程访问Access数据库

发布网友 发布时间:2022-04-21 21:30

我来回答

3个回答

懂视网 时间:2022-05-02 07:19

=C:/Users/WangGang/Desktop/Database1.accdb DBUserName= DBPassword= GameIp=192.168.1.152 GamePort=3000 4DSystemIp=192.168.1.152 4DSystemPort=21392 UdpDataToGame=StartGame UdpDataTo4DSystem=AS%NPlayDirect%1%

工程文件中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 = 0);
 ~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() > 0 )
 {
 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(1).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 = 0;

 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数据库

标签:mds   ati   error   int()   push   declare   read   pap   set   

热心网友 时间:2022-05-02 04:27

远程连接access数据库的几个方法:
1建立VPN(Virtual Private Network),这样你的电脑和主机的连接就与局域网无异,然后把服务器中mdb文件所在的 Folder共享即可。ADO连接如下:
(以下为引用的内容):
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ServerNameDatabaseFolderDatabase.mdb;Jet OLEDB:Database
Password=databasepw;Persist Security Info=False"
2.把Database放在Web Server上,使ADO或RDO通过RDS(Remote Data Service)及IIS来实现:
如果服务器像上面Jave大侠说那样设置了ODBC DSN的话:
下面是代码片段:
(以下为引用的内容):

oConn.Open "Provider=MS Remote;" & _
"Remote Server=http://myServerName;" & _
"Remote Provider=MSDASQL;" & _
"DSN=AdvWorks;" & _
"Uid=myUsername;" & _
"Pwd=myPassword"
如果设置的是OLE DB Provider 的话:
(以下为引用的内容):
oConn.Open "Provider=MS Remot

热心网友 时间:2022-05-02 05:45

如果用ACCESS开发的数据库通常通过内网连接很容易。
直接用链接表链接共享文件夹中的ACCESS数据库中的表就可以。
如果是要*连接,现在的一般做法是用一台装了IIS的电脑当主机。
在主机的IIS目录里面放ASP开发的网页连接主机上的ACCESS数据库。
*浏览网页实现对数据库的操作。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com