一:QT与数据库的连接(通过ODBC)
首先在SQL数据库中设置用户名及密码后通过控制面板查找ODBC根据提示完成对QT的连接
;接下来到qt的main.cpp中输入:
QSqlDatabase db = QSqlDatabase::addDatabase(“QODBC”);
//数据库驱动类型为SQL Server,a为设置的数据库名称,可以随便写
qDebug()
db.setHostName(“127.0.0.1”); // 选择本地主机,127.0.0.1(无需修改)
QString dsn = QString::fromLocal8Bit(“water_check2”);//数据源名称, 【根据自己在ODBC上设置的名称】
db.setHostName(“localhost”);
db.setDatabaseName(dsn); //设置数据源名称(不用改)
db.setUserName(“sa”); //登录用户【自己设置的数据库用户名】
db.setPassword(“123456789”); //【自己设置的数据库用户名密码
】
if(!db.open()) //打开数据库
{
qDebug()
qDebug()
QMessageBox::critical(0, QObject::tr(“Database error”), db.lastError().text()); //打开失败
}
else
{
qDebug()
}
// QSqlQuery query();//打开数据库,若只有一个数据库连接,直接默认打开有两个需输入上面设置的名字a
QSqlQuery query;
query=QSqlQuery(db);
return a.exec();
二:qt页面跳转设置
点击文件->新建文件或项目->选择QT->QT item Model根据提示修改项目名称
选用load作为示例:在laod.ui中设置Push Button 单击右键选择转入槽
选用load作为示例:在laod.ui中设置Push Button 单击右键选择转入槽在槽函数中加入:
this->hide();
emit returnmain(); //隐藏当前页面
并在load.h中
signals:
void returnmain();//跳转页面的信号与上文中槽函数发射的信号相同
在main.cpp中加入头文件
#include
并在main()函数中写上
load loadpage;//定义一个变量
loadpage.setWindowTitle(“主页(load)”);
//当按下时从load返回个人信息页
QObject::connect(&loadpage,SIGNAL(information()),&informpage,SLOT(in()));
同理在要跳入的做如下设置:
在main.cpp中加入头文件
#include”inform.h”
加上
inform informpage;
informpage.setWindowTitle(“个人信息页(inform)”);
并在inform.h中的private slots:下写上
void in(); //接受槽
三:数据库的查询:
3.1:查询整个表中数据:
QSqlQueryModel *model2 = new QSqlQueryModel(this);
model2->setQuery(QString(“select * from CUST “));
ui->tableView->setModel(model2);
3.2 条件查询
方法一:
QString s1,s2,cno0;//定义QString类型变量
s1=ui->ok->text();
s2=ui->lineEdit_2->text();//获取输入的文本信息
int t=s1.toInt();
//在数据库中查询所有信息
QSqlQueryModel *model2 = new QSqlQueryModel(this);
model2->setQuery(QString(“select * from order1 “));
//查询结果显示在table view上
ui->tableView->setModel(model2);
QSqlQuery query(“SELECT * FROM order1 “);
qDebug()
while (query.next())
{
QString ID = query.value(0).toString();
QString LoginName = query.value(1).toString();
QString LoginTime = query.value(2).toString();
QString LogoutTime = query.value(3).toString();
QString youbian = query.value(4).toString();
int x=QString::compare(LogoutTime,s2,Qt::CaseInsensitive);//区分大小写
qDebug()
qDebug()
.arg(ID).arg(LoginName).arg(LoginTime).arg(LogoutTime).arg(youbian);
if(x==1){
qDebug()
ui->lineEdit_3->setText(ID);
ui->lineEdit_5->setText(LoginName);
ui->lineEdit_6->setText(LoginTime);
ui->lineEdit_4->setText(youbian);
}
方法二:
QString sql,s1;
int s2,s3;
s1=ui->lineEdit->text();//读取文本内容
s2=ui->lineEdit_2->text().toInt();
s3=ui->lineEdit_3->text().toInt();
//查询数据库中是否有相应编号的报刊,并输出总价
QSqlQueryModel *model=new QSqlQueryModel(this);
model->setQuery(QString(“select PPR from NEWS where PNO=%1”).arg(s1));
三修改数据库:先获取文本了个信息
QSqlQueryModel *model2 = new QSqlQueryModel(this);
model2->setQuery(QString(“select * from CUST “));
ui->tableView->setModel(model2);
QString name=ui->lineEdit->text();
QString address=ui->lineEdit_2->text();
QString numb=ui->lineEdit_3->text();
QString you=ui->lineEdit_4->text();
三:数据修改
方法一:
QSqlQuery query;
QString sql=QString(“update CUST set CAD=’%1′ , CTE=’%2′ ,CPO=’%3′ where CNA=’%4′;”)
.arg(address).arg(numb).arg(you).arg(name);
query.prepare(sql);
if(query.exec()){
QMessageBox::information(this,”修改成功”,”修改完成”);
}
else{
QMessageBox::information(this,”修改失败”,”修改失败!!”);
}
方法二:
QSqlQuery query;
query.prepare(“update CUST set CAD=:address ,CTE=:numb ,CPO=:you where CNA=:name;”);
query.bindValue(“:name”,name);
query.bindValue(“:address”,address);
query.bindValue(“:numb”,numb);
query.bindValue(“:you”,you);
bool ok = query.exec();
qDebug()
if(!ok){
QMessageBox::information(this,”修改失败”,”修改失败!!”);
}
else{
QMessageBox::information(this,”修改成功”,”修改完成”);