嵌入式数据库应用程序设计(三)——程序设计

版权声明:未经允许,不得转载 https://blog.csdn.net/frozennet/article/details/86532277

嵌入式数据库应用程序设计(三)——程序设计

1、managementform.h

#ifndef MANAGEMENT_H
#define MANAGEMENT_H
#include<QDialog>
#include"ui_management.h"
#include"sqlite3.h"
class ManagementForm:public QDialog
{
	Q_OBJECT
    public:
	ManagementForm(QWidget *parent=0);
    public:
	void sql_for_tableWidget(char *,char *);
	int table_status;
	int selected_radio;
    private:
	Ui::Form ui;

    //信号槽
    public slots:
	void on_pushButton_CLOSE_clicked();
	void on_pushButton_Add_clicked();
	void on_pushButton_Delete_clicked();
	void on_pushButton_Modify_clicked();
	void on_pushButton_refresh_clicked();
	void on_pushButton_Query_clicked();

	void on_radioButton_basic_clicked();
	void on_radioButton_speciality_clicked();
	void on_radioButton_asc_clicked();
	void on_radioButton_des_clicked();	
};
#endif

2、main.c

#include "managementform.h"
#include <QApplication>
int main(int argc,char *argv[])
{
	QApplication app(argc,argv);
    
    //Management在managemntform.h中定义
    //ManagementForm 继承QDialog

	ManagementForm *dialog=new ManagementForm;
	dialog->show();
	return app.exec();

}

3、managementform.cpp

​
/***************************************************/
//EditRecord.h用于TABLE_Basic表的操作
//EditRecord_Speciality.h用于TABLE_Speciality表的操作
//PieWidget.h用于显示饼状图
/***************************************************/
#include<QtGui>
#include "managementform.h"
#include "EditRecord.h"
#include "EditRecord_Speciality.h"
#include "PieWidget.h"

//枚举数据库表
enum
{
        //人才基本信息表
        TABLE_Basic,
        //人才专业信息表
        TABLE_Speciality,

};

const char *table[2] = { "basic","speciality" };
bool ok_flag = false;

/*****************************/
//定义数据库表中各个属性(列)
/*****************************/
//人才基本信息表
//编号
char Person_ID[10];
//姓名
char Name[10];
//性别
char Sex[20];
//出生日期
char Birth[15];
//工资现状
int Salary;

//人才专业信息表
//专业
char Speciality[10];
//专业年限
int SpecialityYear;
//技能头衔
char TechnicalTitle[10];
//英语水平
char EnglishLevel[10];

/***************************************************/
//饼状图参数定义PieWidget.cpp
/***************************************************/

//参数Salary总数
extern int nRow_sum;

//Salary小于5000的人数
extern int nRow_little;
//Salary大于5000的人数
extern int nRow_big;

//参数SpecailityYear总数
extern int nRow_year_sum;

//SpecailityYear小于5的人数
extern int nRow_year_little;、
//SpecailityYear大于5的人数
extern int nRow_year_big;


​

EditRecord.h 与EditRecord.cpp效果

EditRecord_Speciality.h 与EditRecord_Speciality.cpp效果

​
ManagementForm::ManagementForm(QWidget *parent)
:QDialog(parent)
{
        ui.setupUi(this);
        //设置可见性
        ui.tableWidget_basic->setVisible(true);
	    ui.radioButton_basic->setChecked(true);
        ui.tableWidget_speciality->setVisible(false);
        selected_radio=0;
	    ui.radioButton_asc->setChecked(true);

        //数据库表状态
        table_status = TABLE_Basic;  
        
        //定义数据库
		sqlite3 *db;
        //接收返回错误信息
        char *zErrMsg = 0;
        int rc;
        
        //打开"data.db"数据库
        //如果不存在,将自动创建
        rc = sqlite3_open("data.db", &db);
                         
       if (rc) {
           fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
           sqlite3_close(db);
	       exit(1);
         }
        
        //执行创建数据库表
        rc = sqlite3_exec(db,"create table basic(Person_ID varchar(10),Name 
             varchar(10),Sex varchar(2),Birth varchar(15),Salary smallint);", 0, 0, 
             &zErrMsg);
      
       if( rc!=SQLITE_OK ){
    		fprintf(stderr, "SQL error: %s\n", zErrMsg);
        	sqlite3_free(zErrMsg);} 
        
        //执行sql_for_tableWidget()函数
        //该函数主要功能筛选内容
        //并在tableWidget中显示数据库中内容
        sql_for_tableWidget("data.db", "select * from basic;");

}

​
//radioButton_basic单选按钮点击事件响应槽
void ManagementForm::on_radioButton_basic_clicked()
{

        //数据库表的状态(两个表中选择一个)
        table_status=TABLE_Basic;
       
        //设置可见性
        ui.tableWidget_basic->show();
        ui.tableWidget_basic->setVisible(true);
        ui.tableWidget_speciality->setVisible(false);


        sql_for_tableWidget("data.db","select * from basic;");
        return;
}
//radioButton_speciality单选按钮点击事件响应槽
void ManagementForm::on_radioButton_speciality_clicked()
{
       
        //数据库表的状态(两个表中选择一个)
        table_status=TABLE_Speciality;

        //设置可见性
        ui.tableWidget_speciality->show();
        ui.tableWidget_basic->setVisible(false);
        ui.tableWidget_speciality->setVisible(true);
     

        sql_for_tableWidget("data.db","select * from speciality;");
        return;
}
//用于为PieChart参数进行赋值并显示饼状图
void ManagementForm::on_pushButton_refresh_clicked()
{
	repaint();
	sqlite3 *db;
	char *zErrMsg = 0;
	int rc;
	char sql_str[150];
	memset(sql_str,0,150);	
	
	rc = sqlite3_open("data.db", &db);
	if( rc ){
		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
		sqlite3_close(db);
		exit(1);
	}
	
	char **dbResult;
	int nColumn;
	
	//for basic Salary
    //计算数据库表basic中Salary>=0的总数
	sprintf(sql_str,"%s;","select COUNT(Salary) from basic group by Salary having Salary>=0");
	rc = sqlite3_get_table(db,sql_str, &dbResult, &nRow_sum,&nColumn, &zErrMsg);
	fprintf(stderr, "This is : %d\n", nRow_sum);

	//计算数据库表basic中Salary<5000的总数	
	sprintf(sql_str,"%s;","select COUNT(Salary) from basic group by Salary having Salary<5000");
	rc = sqlite3_get_table(db,sql_str, &dbResult, &nRow_little,&nColumn, &zErrMsg);
	fprintf(stderr, "This is : %d\n", nRow_little);

	//计算数据库表basic中Salary>=5000的总数
	sprintf(sql_str,"%s;","select COUNT(Salary) from basic group by Salary having Salary>=5000");
	rc = sqlite3_get_table(db,sql_str, &dbResult, &nRow_big,&nColumn, &zErrMsg);
	fprintf(stderr, "This is : %d\n", nRow_big);
	
	//for speciality SpecialityYear
    //计算数据库表speciality中SpecialityYear>=0的总数
	sprintf(sql_str,"%s;","select COUNT(SpecialityYear) from speciality group by SpecialityYear having SpecialityYear>=0");
	rc = sqlite3_get_table(db,sql_str, &dbResult, &nRow_year_sum,&nColumn, &zErrMsg);
	fprintf(stderr, "This is : %d\n", nRow_year_sum);
	
    //计算数据库表speciality中SpecialityYear<5的总数
	sprintf(sql_str,"%s;","select COUNT(SpecialityYear) from speciality group by SpecialityYear having SpecialityYear<5");
	rc = sqlite3_get_table(db,sql_str, &dbResult, &nRow_year_little,&nColumn, &zErrMsg);
	fprintf(stderr, "This is : %d\n", nRow_year_little);
	
    //计算数据库表speciality中SpecialityYear>5的总数
	sprintf(sql_str,"%s;","select COUNT(SpecialityYear) from speciality group by SpecialityYear having SpecialityYear>5");
	rc = sqlite3_get_table(db,sql_str, &dbResult, &nRow_year_big,&nColumn, &zErrMsg);
	fprintf(stderr, "This is : %d\n", nRow_year_little);

	
	if( rc!=SQLITE_OK ){
		fprintf(stderr, "SQL error: %s\n", zErrMsg);
		sqlite3_free(zErrMsg);
	}
	
	sqlite3_close(db); 

    //显示饼状图的继承PieWidget的Widget      
	PieWidget *wig = new PieWidget;
		wig->show();
		return;                      
}
//在tableWidget中显示数据库表中的内容
void ManagementForm::sql_for_tableWidget(char * fp, char * sql_str)
{
        repaint();
        sqlite3 *db;
        char *zErrMsg = 0;
        int rc;
        //判断数据库是否正确打开
        rc = sqlite3_open(fp, &db);
        if (rc) {
                fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
                sqlite3_close(db);
                exit(1);
        }
        char **dbResult;

        //获得数据库表的行和列
        int nRow, nColumn;
        rc = sqlite3_get_table(db, sql_str, &dbResult, &nRow, &nColumn, &zErrMsg);
        if (rc != SQLITE_OK) {
                fprintf(stderr, "SQL error: %s\n", zErrMsg);
                sqlite3_free(zErrMsg);
        }

        //关闭数据库
        sqlite3_close(db);
        
        //当数据库表为basic,即radioButton选择BasicTable
        if(table_status==TABLE_Basic){
	        int i, j;
	        int index = nColumn;
	        ui.tableWidget_basic->setRowCount(nRow);
	
	        //逐行,逐列将从数据表中读出的数据在TableWidget中显示
	        for (i = 0; i<nRow; i++) {
	                for (j = 0; j<nColumn; j++) {
	                  QTableWidgetItem *item = new QTableWidgetItem(dbResult[index]);
	                        ui.tableWidget_basic->setItem(i, j, item);
	                        index++;
	                }
	        }
    	}

		//当数据库表为basic,即radioButton选择SpecialityTable
    	if(table_status==TABLE_Speciality){
	        int i, j;
	        int index = nColumn;
	        ui.tableWidget_speciality->setRowCount(nRow);
	
	        //逐行,逐列将从数据表中读出的数据在TableWidget中显示
	        for (i = 0; i<nRow; i++) {
	                for (j = 0; j<nColumn; j++) {
	                  QTableWidgetItem *item = new QTableWidgetItem(dbResult[index]);
	                        ui.tableWidget_speciality->setItem(i, j, item);
	                        index++;
	                }
	        }
    	}
        return;
}
//CLOSE按钮的点击回调事件
void ManagementForm::on_pushButton_CLOSE_clicked()
{
        close();
}
//选择属性的值进行筛选
const char *column[9]={"Person_ID","Name","Sex","Birth","Salary","Speciality",
"SpecialityYear","TechnicalTitle","EnglishLevel"};

//选取Salary/SpecialityYear范围筛选
const char *column_scope[2]={"Salary","SpecialityYear"};

//通过Salary/Specaility进行分组
const char *column_sort[2]={"Salary","SpecialityYear"};

//选择并/或
const char *con[2]={"and","or"};

//选择正序/反序
const char *radio[2]={"asc","desc"};

void ManagementForm::on_pushButton_Query_clicked()
{
	char sql_str[150];
	memset(sql_str,0,150);

	//sql语句1
	char sql_str1[35];memset(sql_str1,0,35);
	sprintf(sql_str1,"select * from %s where",table[table_status]);
	//const char *sql_str1="select * from import where";
	
	//获得lineEdit中的值
	QString s =  ui.lineEdit->text();
	QByteArray ba = s.toLatin1();

	//sql语句2
	char sql_str2[40];memset(sql_str2,0,40);
	sprintf(sql_str2,"%s='%s'",column[ui.comboBox->currentIndex()],ba.data());
	
	//小于行编辑框 
	QString s1 =  ui.lineEdit_little->text();

	//大于行编辑框 
	QString s2 =  ui.lineEdit_big->text();
	
	//当column_scope选择的值大于"小于行编辑框"中的值
	char sql_str3[20];memset(sql_str3,0,20); 
	if(s1.length())
	{
		sprintf(sql_str3,"%s>%d",column_scope[ui.comboBox_scope->
         currentIndex()],s1.toInt());
	}
	
	//当column_scope选择的值小于"大于行编辑框"中的值 
	char sql_str4[20];memset(sql_str4,0,20);
	if(s2.length())
        {
           sprintf(sql_str4,"%s<%d",column_scope[ui.comboBox_scope->
            currentIndex()],s2.toInt());
        }
    
     //选择排序方式 
	char sql_str5[35];memset(sql_str5,0,35);      
	sprintf(sql_str5,"order by %s",column_sort[ui.comboBox_sort->currentIndex()]);
	
	//选择升/降序   
	char sql_str6[15];memset(sql_str6,0,15);
	sprintf(sql_str6,"%s",radio[selected_radio]);
	
	//如果lineEdit中的值不为空 
        if (s.length())
	{  
		//如果s1,s2中的值都为空
		if((!s1.length()) && (!s2.length())){

			//为执行sql的语句赋值
			sprintf(sql_str,"%s %s %s %s;",sql_str1,sql_str2,sql_str5,sql_str6);
		}

		//如果s1为空,s2不为空
		else if((!s1.length()) && s2.length()){

			//为执行sql的语句赋值
			sprintf(sql_str,"%s %s %s %s %s %s;",
             sql_str1,sql_str2,con[ui.comboBox_andor->currentIndex()],
              sql_str4,sql_str5,sql_str6);
		}

		//如果s1不为空,s2为空
		else if(s1.length() && (!s2.length())){

			//为执行sql的语句赋值
			sprintf(sql_str,"%s %s %s %s %s %s;",
             sql_str1,sql_str2,con[ui.comboBox_andor->currentIndex()],
              sql_str3,sql_str5,sql_str6);
		}

		//如果s1,s2都不为空
		else {

			//为执行sql的语句赋值
			sprintf(sql_str,"%s %s %s %s between %d and %d %s %s;",
              sql_str1,sql_str2,con[ui.comboBox_andor->currentIndex()],
                column_scope[ui.comboBox_scope->
                  currentIndex()],s1.toInt(),s2.toInt(),sql_str5,sql_str6);
		}
			
	}

    //如果lineEdit中的值为空,s1为空,s2不为空
	else if((!s1.length()) && s2.length()){

		//为执行sql的语句赋值
		sprintf(sql_str,"%s %s %s %s;",sql_str1,sql_str4,sql_str5,sql_str6);
	}

	//如果lineEdit中的值为空,s1不为空,s2为空
	else if(s1.length() && (!s2.length())){

		//为执行sql的语句赋值
		sprintf(sql_str,"%s %s %s %s;",sql_str1,sql_str3,sql_str5,sql_str6);
	}

	//如果lineEdit中的值为空,s1不为空,s2不为空
	else if(s1.length() && s2.length()){

		//为执行sql的语句赋值
		sprintf(sql_str,"%s %s between %d and %d %s %s;",
         sql_str1,column_scope[ui.comboBox_scope->
           currentIndex()],s1.toInt(),s2.toInt(),sql_str5,sql_str6);
	}
	else{

		//如果lineEdit中的值为空,s1为空,s2为空
		 sprintf(sql_str,"select * from %s %s %s;",
           table[table_status],sql_str5,sql_str6);
	}	 
     
	//显示执行的sql语句
	QMessageBox::information(this,"Information",sql_str);
	sql_for_tableWidget("data.db",sql_str);

}
//按钮radioButton_asc升序点击回调事件
void ManagementForm::on_radioButton_asc_clicked()
{
	selected_radio=0;
}

//按钮radioButton_asc降序点击回调事件
void ManagementForm::on_radioButton_des_clicked()
{
	selected_radio=1;
}
//按钮on_pushButton_Add点击回调事件
void ManagementForm::on_pushButton_Add_clicked()
{
        ok_flag = false;

        //为每个属性值初始化并分配内存空间
        memset(Person_ID, 0, 10);
        memset(Name, 0, 10);
        memset(Sex, 0, 20);
        memset(Birth, 0, 15);
        Salary=0;
        
        memset(Speciality, 0, 10);
        memset(EnglishLevel, 0, 10);
        memset(TechnicalTitle, 0, 10);
        SpecialityYear=0;
        
        //如果当前是选中TABLE_Basic
		if(table_status==TABLE_Basic)
        {
		
        	//打开EditRecordDlg用于输入新的值
			EditRecordDlg *dlg = new EditRecordDlg;
        	dlg->exec();

	        if (ok_flag)
	        {
	                sqlite3 *db;
	                char *zErrMsg = 0;
					//rc用于接收数据库命令返回的值
	                int rc;
	                rc = sqlite3_open("data.db", &db);
	                
					//数据库是否正确打开
	                if (rc) {
			            fprintf(stderr, "Can't open database: %s\n",sqlite3_errmsg(db));
	                     sqlite3_close(db);
	                     exit(1);
	                }

					 rc = sqlite3_exec(db,"create table basic(Person_ID varchar(10),
                            Name varchar(10),Sex varchar(20),Birth varchar(15),
                            Salary smallint);", 0, 0, &zErrMsg);
	               
					if( rc!=SQLITE_OK ){
						fprintf(stderr, "SQL error: %s\n", zErrMsg);
						sqlite3_free(zErrMsg);
	                }
	                char ss[100]; memset(ss, 0, 100);

	                //写入数据
	                sprintf(ss, "insert into %s values('%s', '%s', '%s', '%s' ,%d);",
                     table[table_status], Person_ID, Name, Sex, Birth, Salary);
	                rc = sqlite3_exec(db, ss, 0, 0, &zErrMsg);
	                sqlite3_close(db);
	                memset(ss, 0, 100);
	                sprintf(ss, "select * from %s;", table[table_status]);
	                sql_for_tableWidget("data.db", ss);
	        }
    }
    
	//如果当前是选中TABLE_Speciality 
    if(table_status==TABLE_Speciality)
        {
		
		//打开EditRecordDlg_speciality用于输入新的值
			EditRecordDlg_speciality *dlg = new EditRecordDlg_speciality;
        	dlg->exec();
	        if (ok_flag)
	        {
	                sqlite3 *db;
	                char *zErrMsg = 0;
	                int rc;
	                rc = sqlite3_open("data.db", &db);
	                
	                if (rc) {
	                        fprintf(stderr, "Can't open database: %s\n",
                            sqlite3_errmsg(db));
	                        sqlite3_close(db);
	                        exit(1);
	                }
	                
	                rc = sqlite3_exec(db,"create table speciality(Person_ID
                     varchar(10),Speciality varchar(10),TechnicalTitle varchar(10),
                   EnglishLevel varchar(10),SpecialityYear smallint);", 0, 0, &zErrMsg);
	                
					if( rc!=SQLITE_OK ){
						fprintf(stderr, "SQL error: %s\n", zErrMsg);
						sqlite3_free(zErrMsg);
					}

	                char ss[100]; memset(ss, 0, 100);

	                //写入数据
	                sprintf(ss, "insert into %s values('%s', '%s', '%s', '%s' ,%d);",
                     table[table_status], Person_ID, Speciality, TechnicalTitle,
                     EnglishLevel, SpecialityYear);
	                rc = sqlite3_exec(db, ss, 0, 0, &zErrMsg);
	                sqlite3_close(db);
	                memset(ss, 0, 100);
	                sprintf(ss, "select * from %s;", table[table_status]);
	                sql_for_tableWidget("data.db", ss);
	        }
    }
}
//删除数据库表中的选中的记录
void ManagementForm::on_pushButton_Delete_clicked()
{
       if(table_status==TABLE_Basic)
{
	 //提示框 
        if(QMessageBox::question(this,"Question",tr("Do you want to delete the current record?"),QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok)==QMessageBox::Cancel)
        {
                return;
        }
        sqlite3 *db;
        char *zErrMsg = 0;
        int rc;
        //打开数据库 
        rc = sqlite3_open("data.db", &db);
        if( rc ){
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
                sqlite3_close(db);
                exit(1);
        }

        //获取当前tableWidget的行数 
        int row=ui.tableWidget_basic->currentRow();
        //int column=ui.tableWidget->columnCount();//4
        char id_str[10];memset(id_str,0,10);
        QTableWidgetItem *item=ui.tableWidget_basic->item(row,0);
        QString str=item->text();
        sprintf(id_str,"%s",(str.toLatin1()).data());

        char name_str[10];memset(name_str,0,10);
        item=ui.tableWidget_basic->item(row,1);
        str=item->text();
        sprintf(name_str,"%s",(str.toLatin1()).data());

        char sex_str[20];memset(sex_str,0,20);
        item=ui.tableWidget_basic->item(row,2);
        str=item->text();
        sprintf(sex_str,"%s",(str.toLatin1()).data());
        
        char birth_str[15];memset(birth_str,0,15);
        item=ui.tableWidget_basic->item(row,3);
        str=item->text();
        sprintf(birth_str,"%s",(str.toLatin1()).data());

        int salary_str;
        item=ui.tableWidget_basic->item(row,4);
        str=item->text();
        salary_str=str.toInt();

        char sql_str[200];memset(sql_str,0,200);
		//赋予sql_str删除数据库表一条记录的命令
        sprintf(sql_str,"delete from %s where Person_ID='%s' and Name='%s' and Sex='%s'
         and Birth='%s' and 
          Salary=%d;",table[table_status],id_str,name_str,sex_str,birth_str,salary_str);
       
         rc = sqlite3_exec(db,sql_str, 0, 0, &zErrMsg);  
        sqlite3_close(db);
        memset(sql_str,0,200);
        sprintf(sql_str,"select * from %s;",table[table_status]);
        
        //fprintf(stderr, "This is : %s\n", "11111");
		//将删除数据库表一条记录的命令传给执行函数
        sql_for_tableWidget("data.db",sql_str);
        //fprintf(stderr, "This is : %s\n","22222");
}
        if(table_status==TABLE_Speciality){ 
	        if(QMessageBox::question(this,"Question",tr("Do you want to delete the         current record?"),QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok)==QMessageBox::Canc
el)
	        {
	                return;
	        }
	        sqlite3 *db;
	        char *zErrMsg = 0;
	        int rc;

	        //打开数据库 
	        rc = sqlite3_open("data.db", &db);
	        
	        if( rc ){
	        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
	                sqlite3_close(db);
	                exit(1);
	        }
	
	        //获取当前tableWidget的行数 
	        int row=ui.tableWidget_speciality->currentRow();
	        //int column=ui.tableWidget->columnCount();//4
	        char id_str[10];memset(id_str,0,10);
	        QTableWidgetItem *item=ui.tableWidget_speciality->item(row,0);
	        QString str=item->text();
	        sprintf(id_str,"%s",(str.toLatin1()).data());
	
	        char speciality_str[10];memset(speciality_str,0,10);
	        item=ui.tableWidget_speciality->item(row,1);
	        str=item->text();
	        sprintf(speciality_str,"%s",(str.toLatin1()).data());
	
	        char technical_str[10];memset(technical_str,0,10);
	        item=ui.tableWidget_speciality->item(row,2);
	        str=item->text();
	        sprintf(technical_str,"%s",(str.toLatin1()).data());
	        
	        char english_str[10];memset(english_str,0,10);
	        item=ui.tableWidget_speciality->item(row,3);
	        str=item->text();
	        sprintf(english_str,"%s",(str.toLatin1()).data());
	
	        int year_str;
	        item=ui.tableWidget_speciality->item(row,4);
	        str=item->text();
	        year_str=str.toInt();
	
	        char sql_str[200];memset(sql_str,0,200);
	        sprintf(sql_str,"delete from %s where Person_ID='%s' and Speciality='%s' and TechnicalTitle='%s' and EnglishLevel='%s' and SpecialityYear=%d;",table[table_status],id_str,speciality_str,technical_str,english_str,year_str);
	        rc = sqlite3_exec(db,sql_str, 0, 0, &zErrMsg);  
	        sqlite3_close(db);
	        memset(sql_str,0,200);
	        sprintf(sql_str,"select * from %s;",table[table_status]);
	        //fprintf(stderr, "This is : %s\n", "11111");
	        sql_for_tableWidget("data.db",sql_str);
	        //fprintf(stderr, "This is : %s\n","22222");
        } 

        return;
}
//修改数据库表中的选中的记录
void ManagementForm::on_pushButton_Modify_clicked()
{
        sqlite3 *db;
        char *zErrMsg = 0;
        int rc;
        rc = sqlite3_open("data.db", &db);
        if( rc ){
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
                sqlite3_close(db);
                exit(1);
        }
	if(table_status==TABLE_Basic){
        int row=ui.tableWidget_basic->currentRow();
        //int column=ui.tableWidget->columnCount();//4

        char id_str[10];memset(id_str,0,10);
        QTableWidgetItem *item=ui.tableWidget_basic->item(row,0);
        QString str=item->text();
        sprintf(id_str,"%s",(str.toLatin1()).data());

        char name_str[10];memset(name_str,0,10);
        item=ui.tableWidget_basic->item(row,1);
        str=item->text();
        sprintf(name_str,"%s",(str.toLatin1()).data());

        char sex_str[20];memset(sex_str,0,20);
        item=ui.tableWidget_basic->item(row,2);
        str=item->text();
        sprintf(sex_str,"%s",(str.toLatin1()).data());
        
        char birth_str[15];memset(birth_str,0,15);
        item=ui.tableWidget_basic->item(row,3);
        str=item->text();
        sprintf(birth_str,"%s",(str.toLatin1()).data());

        int salary_str;
        item=ui.tableWidget_basic->item(row,4);
        str=item->text();
        salary_str=str.toInt();

        ok_flag=false;
                memset(Person_ID,0,10);strcat(Person_ID,id_str);
        memset(Name,0,10);strcat(Name,name_str);
        memset(Sex,0,20);strcat(Sex,sex_str);
        memset(Birth,0,15);strcat(Birth,birth_str);
                Salary=salary_str;

        EditRecordDlg *dlg=new EditRecordDlg;
        dlg->exec();
        if(!ok_flag)
        {
                return;
        }

        char sql_str[200];memset(sql_str,0,200);
        sprintf(sql_str,"update %s set Person_ID='%s', Name='%s',Sex='%s',Birth='%s',Salary=%d where Person_ID='%s' and Name='%s' and Sex='%s' and Birth='%s'and Salary=%d;",table[table_status],Person_ID,Name,Sex,Birth,Salary,id_str,name_str,sex_str,birth_str,salary_str);
        rc = sqlite3_exec(db,sql_str, 0, 0, &zErrMsg);
        sqlite3_close(db);
        memset(sql_str,0,200);
        sprintf(sql_str,"select * from %s;",table[table_status]);
        sql_for_tableWidget("data.db",sql_str);
}
if(table_status==TABLE_Speciality)
		{        	
	        int row=ui.tableWidget_speciality->currentRow();
	        //int column=ui.tableWidget->columnCount();//4
	
	        char id_str[10];memset(id_str,0,10);
	        QTableWidgetItem *item=ui.tableWidget_speciality->item(row,0);
	        QString str=item->text();
	        sprintf(id_str,"%s",(str.toLatin1()).data());
	
	        char speciality_str[10];memset(speciality_str,0,10);
	        item=ui.tableWidget_speciality->item(row,1);
	        str=item->text();
	        sprintf(speciality_str,"%s",(str.toLatin1()).data());
	
	        char technical_str[10];memset(technical_str,0,10);
	        item=ui.tableWidget_speciality->item(row,2);
	        str=item->text();
	        sprintf(technical_str,"%s",(str.toLatin1()).data());
	        
	        char english_str[15];memset(english_str,0,15);
	        item=ui.tableWidget_speciality->item(row,3);
	        str=item->text();
	        sprintf(english_str,"%s",(str.toLatin1()).data());
	
	        int year_str;
	        item=ui.tableWidget_speciality->item(row,4);
	        str=item->text();
	        year_str=str.toInt();
	
	        ok_flag=false;
	        
	        memset(Person_ID,0,10);strcat(Person_ID,id_str);
	        memset(Speciality,0,10);strcat(Speciality,speciality_str);
	        memset(TechnicalTitle,0,10);strcat(TechnicalTitle,technical_str);
	        memset(EnglishLevel,0,10);strcat(EnglishLevel,english_str);
	                SpecialityYear=year_str;
	
	        EditRecordDlg_speciality *dlg=new EditRecordDlg_speciality;
	        dlg->exec();
	        if(!ok_flag)
	        {
	                return;
	        }
	
	        char sql_str[200];memset(sql_str,0,200);
	        sprintf(sql_str,"update %s set Person_ID='%s', Speciality='%s',TechnicalTitle='%s',EnglishLevel='%s',SpecialityYear=%d where Person_ID='%s' and Speciality='%s' and TechnicalTitle='%s' and EnglishLevel='%s' and SpecialityYear='%d';",table[table_status],Person_ID,Speciality,TechnicalTitle,EnglishLevel,SpecialityYear,id_str,speciality_str,technical_str,english_str,year_str);
	        rc = sqlite3_exec(db,sql_str, 0, 0, &zErrMsg);
	        sqlite3_close(db);
	        memset(sql_str,0,200);
	        sprintf(sql_str,"select * from %s;",table[table_status]);
	        sql_for_tableWidget("data.db",sql_str);
    }
	return;
}

猜你喜欢

转载自blog.csdn.net/frozennet/article/details/86532277