⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conndialog.cpp

📁 跨平台,多数据库查看编辑和查询工具,平台支持windows,linux,数据库支持oracle,odbc,mysql,slite等
💻 CPP
字号:
#include "connDialog.h"
#include "struct.h"
#include "treewidget.h"


extern QString g_connectName;


ConnDialog::ConnDialog(QWidget *parent /* = 0 */):QDialog(parent)
{
	splashScreen=0;
	QGridLayout *layout = new QGridLayout;
	
	QLabel		*label;
	label = new QLabel(tr("数据库类型"));
	layout->addWidget(label,0,0);
	comboType = new QComboBox();
	comboType->addItem(tr("SQL lite"),QVariant(tr("QSQLITE")));
	comboType->addItem(tr("Oracle"),QVariant(tr("QOCI")));
	comboType->addItem(tr("MySql"),QVariant(tr("QMYSQL")));
	comboType->addItem(tr("ODBC"),QVariant(tr("QODBC")));
	comboType->addItem(tr("Sybase"),QVariant(tr("QTDS")));
	comboType->addItem(tr("IBM DB2"),QVariant(tr("QDB2")));	
	layout->addWidget(comboType,0,1);

	label = new QLabel(tr("服务器"));
	layout->addWidget(label,1,0);
	editServer = new QLineEdit(this);
	layout->addWidget(editServer,1,1);

	label = new QLabel(tr("数据库"));
	layout->addWidget(label,2,0);
	editDatabase = new QLineEdit(this);
	QFileInfo info(QApplication::applicationDirPath()+"/dm.db");	
	if(info.exists() && info.size()>0)
	{
		editDatabase->setText(QApplication::applicationDirPath()+"/dm.db");
	}
	else
	{
		QSettings settings(qApp->applicationName(), "dbmanager");
		comboType->setCurrentIndex(comboType->findData(settings.value("type", "QSQLITE")));
	}
	layout->addWidget(editDatabase,2,1);

  label  =	new	QLabel(tr("用户名"));
  layout->addWidget(label,3,0);
	editUsername = new QLineEdit(this);
	layout->addWidget(editUsername,3,1);
	label = new	QLabel(tr("密码"));
	layout->addWidget(label,4,0);	
	editPassword  = new QLineEdit(this);
	editPassword->setEchoMode(QLineEdit::Password);
	layout->addWidget(editPassword,4,1);

  QDialogButtonBox *box=new QDialogButtonBox(this);
  box->addButton(QDialogButtonBox::Ok);
  box->addButton(QDialogButtonBox::Cancel);
  connect(box,SIGNAL(accepted()), this, SLOT(myAccept()));
  connect(box,SIGNAL(rejected()), this,SLOT(reject()));

	QVBoxLayout *layoutMain=new QVBoxLayout(this);
	QGroupBox *groupBox=new QGroupBox(tr(""),this);
	groupBox->setLayout(layout);
	layoutMain->addWidget(groupBox);
	layoutMain->addStretch();
	layoutMain->addWidget(box,Qt::AlignHCenter);
	setLayout(layoutMain);	

	setFixedWidth(300);

	setWindowTitle("连接数据库");
}


void ConnDialog::myAccept()
{
	QString type;
	QVariant vtype = comboType->itemData(comboType->currentIndex());
	if (vtype.isValid())
		type=vtype.toString();
	
	db=QSqlDatabase::addDatabase(type,g_connectName);
	db.setHostName(editServer->text());
	db.setDatabaseName(editDatabase->text());
	if(db.open(editUsername->text(),editPassword->text()))
	{
		QSettings settings(qApp->applicationName(), "dbmanager");
		settings.setValue("type",QVariant(type));
		createTables();
		accept();
	}
	else
		QMessageBox::warning(this,"","连接错误,请检查输入项!");	
}

void ConnDialog::createTables()
{
	if(splashScreen)
	{
		hide();
		splashScreen->show();
		splashScreen->showMessage("正在初始化缓存,请稍候...",Qt::AlignCenter|Qt::AlignBottom);
	}
QString sql1,sql2,sql3,sql4;
sql1="CREATE TABLE dm_application\n" \
"(\n" \
"  id INTEGER not null            ,             \n" \
"  application_name varchar(100),               \n" \
"  constraint pk_dm_application primary key(id) \n" \
")\n" ;
sql2="CREATE TABLE dm_connection \n" \
"(\n" \
"  id       INTEGER not null,   \n" \
"  application_id varchar(100),  \n" \
"  type     varchar(20) not null, \n" \
"  server   varchar(100) ,        \n" \
"  dbname       varchar(100),      \n" \
"  username varchar(100),      \n" \
"  password varchar(100),      \n" \
"  memo     varchar(255),       \n" \
"  constraint pk_dm_connection_type primary key(id) \n" \
")\n" ;
sql3="CREATE TABLE dm_table\n" \
"(\n" \
"   connection_id INTEGER,       \n" \
"   table_name varchar(100),     \n" \
"   memo       varchar(100),     \n" \
"   constraint pk_dm_table primary key(connection_id,table_name)  \n" \
")\n" ;
sql4="CREATE TABLE dm_field\n" \
"(\n" \
"   connection_id INTEGER,        \n" \
"   table_name varchar(100),   \n" \
"   field_name varchar(100),    \n" \
"   field_xh   INTEGER,          \n" \
"   can_filter varchar(3),       \n" \
"   asso_table_name varchar(100), \n" \
"   asso_field_name varchar(100),  \n" \
"   asso_field_display varchar(100), \n" \
"   memo  varchar(100),           \n" \
"   is_primarykey varchar(3),      \n" \
"   primarykey_name varchar(100),   \n" \
"   constraint pk_dm_field primary key(connection_id,table_name,field_name) \n" \
")" ;
QString sqlType="create table dm_type(id varchar(10),name varchar(10))";
QString sqlInitApplication="insert into dm_application(id,application_name) values(1,'数据库')";
QString sqlExampleConnection="insert into dm_connection(id,application_id,type,dbname,memo) values(1,1,'QSQLITE',':memory:','Example')";
QStringList list=db.tables(QSql::Tables);
foreach(QString tname,list)
{
	if(tname.toLower()=="dm_application")
		sql1.clear();
	if(tname.toLower()=="dm_connection")
		sql2.clear();
	if(tname.toLower()=="dm_table")
		sql3.clear();
	if(tname.toLower()=="dm_field")
		sql4.clear();
	if(tname.toLower()=="dm_type")
		sqlType.clear();
}

if(sql1.length()) 
{
		db.exec(sql1);
		if(db.lastError().isValid()) QMessageBox::warning(0,"",db.lastError().text());
		db.exec(sqlInitApplication);
		if(db.lastError().isValid()) QMessageBox::warning(0,"",db.lastError().text());
}
if(sql2.length()) 
{
	db.exec(sql2);
	if(db.lastError().isValid()) QMessageBox::warning(0,"",db.lastError().text());
	db.exec(sqlExampleConnection);
	if(db.lastError().isValid()) QMessageBox::warning(0,"",db.lastError().text());
} 
if(sql3.length()) 
{
	db.exec(sql3); 
	if(db.lastError().isValid()) QMessageBox::warning(0,"",db.lastError().text());
}
if(sql4.length()) 
{
	db.exec(sql4); 
	if(db.lastError().isValid()) QMessageBox::warning(0,"",db.lastError().text());
}
	

ConnectionSetup connection;
connection.id=0;
connection.type     = comboType->itemData(comboType->currentIndex()).toString();
connection.server   = editServer->text();
connection.database = editDatabase->text();
connection.username = editUsername->text();
connection.password = editPassword->text();
connection.memo     = "system";
TreeWidget *tree = new TreeWidget(this);	   	 
tree->setConnectionSetup(&db,connection);	   	 
tree->insertTable(&db);
delete tree;

QString sql;

if(sqlType.length())
{
	db.exec(sqlType);
	if(db.lastError().isValid()) 
		QMessageBox::warning(0,"",db.lastError().text());
sql="insert into dm_type(id,name) values('QSQLITE','SQL lite')";	 db.exec(sql);
sql="insert into dm_type(id,name) values('QOCI','Oracle')";		 db.exec(sql);
sql="insert into dm_type(id,name) values('QODBC','ODBC')";		 db.exec(sql);
sql="insert into dm_type(id,name) values('QMYSQL','MySql')";		 db.exec(sql);
sql="insert into dm_type(id,name) values('QTDS','Sybase')";		 db.exec(sql);
sql="insert into dm_type(id,name) values('QDB2','IBM DB2')";		 db.exec(sql);


	sql="update dm_field set asso_table_name='DM_TYPE',asso_field_name='ID',asso_field_display='NAME' where connection_id=0 and upper(table_name)='DM_CONNECTION' and upper(field_name)='TYPE'";
  db.exec(sql);
  if(db.lastError().isValid()) QMessageBox::warning(0,"",db.lastError().text());
	sql="update dm_field set asso_table_name='DM_APPLICATION',asso_field_name='ID',asso_field_display='APPLICATION_NAME' where connection_id=0 and upper(table_name)='DM_CONNECTION' and upper(field_name)='APPLICATION_ID'";
  db.exec(sql);
  if(db.lastError().isValid()) QMessageBox::warning(0,"",db.lastError().text());
  	
  
}
	if(db.driver() && db.driver()->hasFeature(QSqlDriver::Transactions))
	{
		db.rollback();
		db.transaction();
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -