版权声明:未经允许,不得转载 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;
}