亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? treewidget.cpp

?? 跨平臺,多數據庫查看編輯和查詢工具,平臺支持windows,linux,數據庫支持oracle,odbc,mysql,slite等
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include <QtSql>
#include <QtDebug>

#include "treewidget.h"
#include "setupasso.h"
#include <sys/types.h>
#include <time.h>

extern QString g_connectName;

TreeWidget::TreeWidget(QWidget *parent ):QTreeWidget(parent)
{
	//setAttribute(Qt::WA_DeleteOnClose);
	//global_db=QSqlDatabase::database(g_connectName);
	
	
	model=0;
	setColumnCount(2);
	header()->setResizeMode(QHeaderView::ResizeToContents);
	setContextMenuPolicy(Qt::ActionsContextMenu);
	connect(this,SIGNAL(itemDoubleClicked ( QTreeWidgetItem *, int)),this,SLOT(doubleClick( QTreeWidgetItem *, int)));
	
	QMenu *menuCache=new QMenu(this);
	QAction *action;
	
	action=new QAction(QIcon(":/image/table_edit.png"),"編輯表內容",this);	
	connect(action,SIGNAL(triggered()),this,SLOT(onEditTable()));
	addAction(action);

	action=new QAction(QIcon(":/image/refresh.png"),"清除緩存",this);	
	connect(action,SIGNAL(triggered()),this,SLOT(clearCache()));
	menuCache->addAction(action);

	action=new QAction(QIcon(":/image/refresh.png"),"刷新表名稱緩存",this);	
	connect(action,SIGNAL(triggered()),this,SLOT(insertTable()));
	menuCache->addAction(action);

	action=new QAction(QIcon(":/image/refresh.png"),"重建表緩存",this);	
	connect(action,SIGNAL(triggered()),this,SLOT(reInsertTable()));
	menuCache->addAction(action);

	action=new QAction("編輯表名稱",this);	
	connect(action,SIGNAL(triggered()),this,SLOT(onEditTableName()));
	addAction(action);
	editTableNameAction=action;
	

	action=new QAction(QIcon(":/image/refresh.png"),"刷新字段緩存",this);	
	connect(action,SIGNAL(triggered()),this,SLOT(onInsertField()));	
	refreshFieldAction=action;
	menuCache->addAction(refreshFieldAction);
	
	action=new QAction(QIcon(":/image/refresh.png"),"重建字段緩存",this);	
	connect(action,SIGNAL(triggered()),this,SLOT(reInsertField()));
	menuCache->addAction(action);

	//refreshFieldAction->setEnabled(false);

	action=new QAction(this);
  action->setSeparator(true);
  addAction(action);

	action=new QAction("編輯字段名稱...",this);	
	connect(action,SIGNAL(triggered()),this,SLOT(onEditFieldName()));
	addAction(action);
	editFieldNameAction=action;

	action=new QAction(QIcon(":/image/key.png"),"主鍵設置與取消",this);	
	connect(action,SIGNAL(triggered()),this,SLOT(onSetupPrimaryKey()));
	addAction(action);
	setupPrimayKey=action;

	action=new QAction(QIcon(":/image/asso.png"),"設置關聯屬性...",this);	
	connect(action,SIGNAL(triggered()),this,SLOT(onSetupAsso()));
	addAction(action);
	setupAssoAction=action;
	
	action=new QAction(this);
  action->setSeparator(true);
  addAction(action);

	action=new QAction("重新連接",this);
	connect(action,SIGNAL(triggered()),this,SLOT(reConnect()));
	addAction(action);

	action=new QAction(this);
  action->setSeparator(true);
  addAction(action);
	
	
	
	
	action=new QAction("緩存管理",this);
  action->setMenu(menuCache);
  addAction(action);
	
	action=new QAction(this);
  action->setSeparator(true);
  addAction(action);

	action=new QAction(QIcon(":/image/refresh.png"),"刷新列表",this);
	connect(action,SIGNAL(triggered()),this,SLOT(loadTableName()));
	addAction(action);



  connect(this,SIGNAL(currentItemChanged(QTreeWidgetItem * , QTreeWidgetItem * )),this,SLOT(onCurrentItemChanged ( QTreeWidgetItem * ,QTreeWidgetItem * ) ));
  connect(this,SIGNAL(itemExpanded ( QTreeWidgetItem *)),this,SLOT(onItemExpanded ( QTreeWidgetItem *)));
}

bool TreeWidget::reConnect()
{
		setConnectionSetup(global_db,connectionSetup);
		return db.isOpen();

}

TreeWidget::~TreeWidget()
{
	if(model)
	{
		//model->submitAll();
		//delete model;
		//model=0;
	}
	closeDb();

}


void TreeWidget::setConnectionSetup(QSqlDatabase *gdb,ConnectionSetup cs)
{
	global_db=gdb;

	connectionSetup.id=cs.id;
	connectionSetup.type=cs.type;
	connectionSetup.server=cs.server;
	connectionSetup.database=cs.database;
	connectionSetup.username=cs.username;
	connectionSetup.password=cs.password;
	connectionSetup.memo=cs.memo;
	
	
	connectName=tr("dm_connect_%1").arg(connectionSetup.id);	
	//qWarning(connectName.toLatin1());
	//QSqlDatabase::removeDatabase(connectName);
	db=QSqlDatabase::addDatabase(connectionSetup.type,connectName);
	db.setHostName(connectionSetup.server);
	db.setDatabaseName(connectionSetup.database);
	
	//qWarning(connectName.toLatin1());

	openDatabase();

}

void TreeWidget::showEvent ( QShowEvent * event ) 
{
	if(topLevelItemCount()==0)
	  loadTableName();	
	emit onShow( connectName);
	
	bool bEdit;
	if(currentItem())
		bEdit=true;
	else
		bEdit=false;
	emit canEdit(bEdit);
}

void TreeWidget::doubleClick( QTreeWidgetItem *item , int col)
{
	//onEditTable();
}

void TreeWidget::loadTableName()
{
	clear();
	QString sql;
	
	
	if(!global_db->isOpen())
		return;
		
	QSqlQuery query(*global_db);
	
	if(!db.isOpen())
		openDatabase();
	if(!db.isOpen())
		return;
		
	//QApplication::setOverrideCursor(Qt::WaitCursor);
 	QString message="檢索表......";
 	emit showMessage(message);
 	
 	QStringList list=db.tables(QSql::Tables);
 		
 	QStringList tableList;
 	sql=tr("SELECT table_name FROM dm_table where connection_id=%1 ").arg(connectionSetup.id);
 	if(query.exec(sql))
 	{
 		while(query.next())
 		   tableList.append(query.record().field(0).value().toString());
 		query.clear();
 	}
 	
 	
 	foreach(QString tname,list)
 	{
 		if(tname.contains("."))
 			continue;
 		if(!tableList.contains(tname))  //是新表,緩存中沒有
 		{
 			//qDebug()<<tname;
 			insertTable(&db,tname);
 		} 		
 	}
 	
	sql=tr("SELECT count(*) FROM dm_field WHERE connection_id=%1").arg(connectionSetup.id);
	if(query.exec(sql) && query.next())
	{
		if(query.record().field(0).value().toInt()==0)
		{
			insertField();
		}
		query.clear();
	}

	  sql=tr("SELECT table_name,memo as display FROM dm_table where connection_id=%1 order by table_name ").arg(connectionSetup.id);
		//qWarning(sql.toLatin1().data());
		if(query.exec(sql))
		{
			while(query.next())
		  {
		  	QStringList list;
		  	QString tableName=query.record().field(0).value().toString().trimmed();
		  	QString display=query.record().field(1).value().toString().trimmed();
		  	if(display.length()==0)
		  		display=tableName;
		  	list<<display<<tableName;
			  QTreeWidgetItem *item=new QTreeWidgetItem(this,list);
			  item->setData(0,Qt::UserRole,QVariant(tableName));
			  item->setIcon(0,QIcon(":/image/table.png"));
			  item->setToolTip(0,tableName);
			  insertTopLevelItem(topLevelItemCount(),item);
			  item->insertChild(0,new QTreeWidgetItem(item));
		  }		  
		}		
 	  message="";
 	  emit showMessage(message);
 	  query.clear();

		//QApplication::restoreOverrideCursor();    
}

void TreeWidget::closeDb()
{
	clear();
	if(db.driver() && db.driver()->hasFeature(QSqlDriver::Transactions))
	{
		db.commit();
	}

	if(db.driver()) db.driver()->close();
	db.close();

	//QSqlDatabase::removeDatabase(connectName);	
}

void TreeWidget::insertTable(QSqlDatabase *dbname,QString tableName)
{
	QString sql;
	if(!global_db->isOpen())
		return;
		
	if(!dbname->isOpen())
		return;

	QSqlQuery query(*global_db);
	

	QApplication::setOverrideCursor(Qt::WaitCursor);
 	QString message="檢索表和字段......";
 	emit showMessage(message);
	
	  QStringList list=dbname->tables(QSql::Tables);
		foreach(QString tname,list)
		{
			if(tableName.length()>0)
			{
				if(tableName!=tname)
					continue;
			}
			if(!tname.contains("."))
			{
				sql=tr("SELECT count(*) FROM dm_table WHERE connection_id=%1 and upper(table_name)=upper('%2')").arg(connectionSetup.id).arg(tname);
				if(query.exec(sql) && query.next())
				{
					if(query.record().field(0).value().toInt()==0)
					{					
				    sql=tr("INSERT INTO dm_table(connection_id,table_name) values(%1,'%2')").arg(connectionSetup.id).arg(tname);				
				    global_db->exec(sql);
				    insertField(dbname,tname);
				  }
			  }				
		  }
	  }
	  
 	  message="";
 	  emit showMessage(message);
		QApplication::restoreOverrideCursor();    
}

void TreeWidget::insertTable()
{
	if(!db.isOpen())
		openDatabase();
	insertTable(&db);
	loadTableName();

}

void TreeWidget::insertField()
{
	QString sql;
	if(!global_db->isOpen())
		return;

	QSqlQuery query(*global_db);
	QSqlQuery query2(*global_db);
	
	
	if(!db.isOpen())
		openDatabase();

	QApplication::setOverrideCursor(Qt::WaitCursor);
 	QString message="檢索表和字段......";
 	emit showMessage(message);
	
	sql=tr("SELECT table_name FROM dm_table WHERE connection_id=%1").arg(connectionSetup.id);
	if(query.exec(sql))
	{
		while(query.next())
		{
			QString tname=query.record().field(0).value().toString();
			insertField(&db,tname);
	  }
	}
	  
		
 	  message="";
 	  emit showMessage(message);
		QApplication::restoreOverrideCursor();    
	query.clear();
	
	
}

void TreeWidget::insertField(QSqlDatabase *dbname,QString tname)
{
	QString sql;
	if(!global_db->isOpen())
		return;

	if(!dbname->isOpen())
		return;

	QSqlQuery query(*global_db);
	QSqlQuery query2(*global_db);
	
	

	QApplication::setOverrideCursor(Qt::WaitCursor);
 	QString message="檢索表和字段......";
 	emit showMessage(message);
	
	QSqlRecord record = dbname->record(tname);
	 	  for (int i = 0; i < record.count(); i++) 
		  {		  	
	   	  	QString fieldName=record.field(i).name();
	   	  	sql=tr("SELECT count(*) FROM dm_field WHERE connection_id=%1 and upper(table_name)=upper('%2') and upper(field_name)=upper('%3')").arg(connectionSetup.id).arg(tname).arg(fieldName);
				  if(query2.exec(sql) && query2.next())
				  {
  					if(query2.record().field(0).value().toInt()==0)
  					{
	   	  	    sql=tr("INSERT INTO dm_field(connection_id,table_name,field_name,field_xh) values(%1,'%2','%3',%4)").arg(connectionSetup.id).arg(tname).arg(fieldName).arg(i+1);
	   	  	    //qWarning(sql.toLatin1().data());
	   	  	    //qApp->processEvents();
	   	  	    global_db->exec(sql);
	   	  	    if(global_db->lastError().isValid())
	   	  	    {
	   	  	    	message=global_db->lastError().text();
	   	  	    	emit showMessage(message);
	   	  	    	break;
	   	  	    }
	   	      }
	   	      query2.clear();
	   	    
	   	    }
		  }
		
		if(!global_db->lastError().isValid())
		{
 	    message="";
 	    emit showMessage(message);
 	  }
 	  
 	 
	QSqlIndex index=dbname->primaryIndex(tname);
	if(!index.isEmpty())
	{
		for(int i=0;i<index.count();i++)
		{
			sql=tr("update dm_field set is_primarykey='yes',primarykey_name='%1' where connection_id=%2 and upper(table_name)=upper('%3') and upper(field_name)=upper('%4')").arg(index.name()).arg(connectionSetup.id).arg(tname).arg(index.fieldName(i));
			//qWarning(sql.toLatin1().data());
			global_db->exec(sql);
		}
	}
	

		QApplication::restoreOverrideCursor();    
	query.clear();
}

QString TreeWidget::getTableName(QTreeWidgetItem *item)
{
	QString tname;
	QTreeWidgetItem *pitem=item;
	while(pitem->parent())
	      pitem=pitem->parent();
	tname=pitem->data(0,Qt::UserRole).toString();
	return tname;
}

void TreeWidget::onInsertField()

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级资源在线| 最新欧美精品一区二区三区| 国产精品免费久久久久| 婷婷一区二区三区| 成人av综合在线| 精品欧美一区二区三区精品久久| 亚洲免费色视频| 国产69精品久久久久777| 欧美一区二区在线不卡| 亚洲精品国产第一综合99久久| 国产一区二区三区在线观看免费 | 亚洲国产高清在线观看视频| 亚洲成人免费视| 一本到不卡免费一区二区| 国产农村妇女毛片精品久久麻豆| 免费在线观看日韩欧美| 欧美剧情电影在线观看完整版免费励志电影| 国产精品青草综合久久久久99| 美国十次综合导航| 欧美日本不卡视频| 亚洲午夜羞羞片| 色999日韩国产欧美一区二区| 国产亚洲欧美一区在线观看| 久久99国产精品免费| 欧美电影免费观看高清完整版在线| 亚洲一区电影777| 欧美视频中文字幕| 亚洲一区二区三区激情| 欧美性猛交xxxxxx富婆| 亚洲国产综合视频在线观看| 欧美性猛片xxxx免费看久爱| 一区二区在线观看视频| 波多野结衣精品在线| 国产精品免费免费| 91婷婷韩国欧美一区二区| 日韩理论在线观看| 91黄视频在线观看| 亚洲va中文字幕| 日韩精品最新网址| 国产精品18久久久久久久久 | 日韩精品专区在线影院重磅| 久久成人羞羞网站| 久久久九九九九| www.成人网.com| 亚洲黄色小说网站| 精品视频一区三区九区| 日韩国产一二三区| 久久免费美女视频| 99精品在线观看视频| 亚洲一区在线免费观看| 欧美一区二区三区免费视频| 韩国毛片一区二区三区| 日本一区二区三区高清不卡| 色综合久久中文综合久久97 | 欧美久久久久久久久中文字幕| 香蕉久久夜色精品国产使用方法| 日韩欧美中文字幕制服| 高清不卡在线观看| 亚洲综合一区二区精品导航| 日韩一区二区三区免费看| 风间由美中文字幕在线看视频国产欧美| 久久精品人人做人人综合| 99久久伊人久久99| 美女视频第一区二区三区免费观看网站| 欧美一区二区精品久久911| 国产一区二区伦理| 亚洲国产综合91精品麻豆| 26uuu色噜噜精品一区二区| 99久久久久久| 久久精品免费观看| 亚洲人成精品久久久久| 日韩欧美国产系列| 色狠狠桃花综合| 日韩在线卡一卡二| 国产精品的网站| 欧美一区二区三区人| 91啪九色porn原创视频在线观看| 日韩av网站免费在线| 亚洲日本中文字幕区| 久久精品亚洲乱码伦伦中文| 欧美日韩国产a| 99国产麻豆精品| 国模冰冰炮一区二区| 亚洲国产毛片aaaaa无费看| 国产日产欧美一区二区三区| 日韩一区国产二区欧美三区| 91丨porny丨户外露出| 久久99久久99精品免视看婷婷 | 亚洲欧洲成人精品av97| 精品国产乱码91久久久久久网站| www.欧美日韩| 国产不卡视频在线观看| 日精品一区二区| 亚洲国产欧美在线| 亚洲欧美激情小说另类| 国产精品黄色在线观看| 久久精品人人做人人综合 | 蜜臀av性久久久久蜜臀aⅴ四虎| 黑人巨大精品欧美黑白配亚洲| 亚洲精品国产精品乱码不99 | 国产一区福利在线| 日韩电影在线一区| 亚洲va天堂va国产va久| 亚洲一区在线播放| 亚洲精品免费视频| 亚洲青青青在线视频| 亚洲国产精品av| 国产日产欧美一区| 久久综合九色综合97_久久久| 日韩久久精品一区| 日韩欧美亚洲国产另类| 日韩精品中文字幕一区二区三区| 51久久夜色精品国产麻豆| 欧美精品tushy高清| 在线91免费看| 日韩欧美激情一区| 久久久影院官网| 欧美激情在线免费观看| 国产精品久久久久精k8| 亚洲卡通欧美制服中文| 亚洲男人的天堂av| 日韩精品欧美成人高清一区二区| 午夜影院久久久| 青娱乐精品在线视频| 精品一区二区三区影院在线午夜| 国产一区二区视频在线播放| 成人亚洲一区二区一| 一本一本久久a久久精品综合麻豆| 在线亚洲精品福利网址导航| 3d动漫精品啪啪1区2区免费| 日韩美女天天操| 国产日韩精品一区| 国产精品青草久久| 亚洲成av人片在线| 国产一区不卡精品| 91在线码无精品| 91精品欧美综合在线观看最新| 精品国产凹凸成av人网站| 中文字幕乱码日本亚洲一区二区| 亚洲日本欧美天堂| 日本伊人精品一区二区三区观看方式| 精品一区二区在线观看| 成人高清视频免费观看| 欧美日韩亚洲综合| 日韩免费观看2025年上映的电影| 中文字幕精品一区二区精品绿巨人| 亚洲欧美另类综合偷拍| 久久99精品视频| 95精品视频在线| 精品精品国产高清a毛片牛牛| 国产精品国产自产拍高清av| 日韩国产一区二| av激情亚洲男人天堂| 欧美不卡激情三级在线观看| 亚洲男人的天堂av| 狠狠狠色丁香婷婷综合久久五月| 99精品国产99久久久久久白柏| 日韩一级免费观看| 亚洲色图欧美在线| 国产九九视频一区二区三区| 欧美日韩一区视频| 亚洲欧洲日产国码二区| 美女精品一区二区| 欧美手机在线视频| 成人欧美一区二区三区1314| 日本女人一区二区三区| 在线一区二区视频| 国产欧美日本一区二区三区| 免费在线观看一区| 欧美午夜精品一区二区蜜桃| 中文字幕第一区综合| 久久99精品国产.久久久久久| 欧美三电影在线| 亚洲精品中文字幕在线观看| 国产成人精品一区二| 欧美xxxx在线观看| 日韩av电影免费观看高清完整版 | 99视频在线精品| 久久蜜桃av一区二区天堂 | 2023国产一二三区日本精品2022| 夜夜操天天操亚洲| 99久久久精品| 亚洲欧洲一区二区三区| 成人永久aaa| 中文乱码免费一区二区| 国产精品香蕉一区二区三区| 久久中文字幕电影| 久久99精品久久久| 欧美成人官网二区| 久久国产精品第一页| 欧美一卡二卡在线| 日韩高清一级片| 欧美丰满高潮xxxx喷水动漫| 午夜av一区二区| 欧美乱熟臀69xxxxxx| 亚洲高清不卡在线| 在线不卡免费欧美| 蜜桃精品视频在线| 欧美精品一区男女天堂| 国产老女人精品毛片久久|