亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
免费观看30秒视频久久| 91香蕉视频mp4| 成人在线综合网| 欧美日韩免费一区二区三区| 久久先锋影音av| 手机精品视频在线观看| 成人网页在线观看| 欧美草草影院在线视频| 香蕉成人伊视频在线观看| 国产激情一区二区三区四区| 欧美一区二区三区人| 夜夜爽夜夜爽精品视频| 93久久精品日日躁夜夜躁欧美| 国产亚洲精品7777| 激情丁香综合五月| 精品国精品国产| 精品综合免费视频观看| 欧美一区二视频| 天天色天天操综合| 欧美日韩一级二级| 亚洲成人动漫一区| 欧美在线|欧美| 一区二区三区**美女毛片| 99久久99精品久久久久久| 国产精品麻豆99久久久久久| 国产不卡在线播放| 欧美极品xxx| 波多野结衣的一区二区三区| 欧美激情一区二区三区蜜桃视频| 日韩av高清在线观看| 91精品在线观看入口| 日本美女一区二区三区| 日韩一区二区三免费高清| 蜜臀99久久精品久久久久久软件| 欧美一级日韩免费不卡| 蜜桃av噜噜一区| 欧美tickling挠脚心丨vk| 精品一区二区三区在线播放视频 | 欧美日韩一区精品| 亚洲一卡二卡三卡四卡| 欧洲视频一区二区| 日韩福利电影在线观看| 日韩欧美亚洲另类制服综合在线| 狠狠色丁香九九婷婷综合五月| 精品理论电影在线观看| 国产成人精品影视| 国产精品久久久久影院亚瑟| 色综合久久66| 日韩**一区毛片| 亚洲精品一区二区精华| 成人丝袜视频网| 亚洲精品久久久蜜桃| 色偷偷久久人人79超碰人人澡| 天天影视网天天综合色在线播放| 日韩精品中文字幕一区二区三区| 国产九九视频一区二区三区| 亚洲视频免费在线观看| 欧美日韩一区二区在线观看视频 | 成人av在线资源网站| 曰韩精品一区二区| 日韩欧美第一区| 成人午夜av影视| 三级一区在线视频先锋| 2020国产精品久久精品美国| 91在线一区二区| 免费观看久久久4p| 亚洲日本在线看| 日韩欧美一区二区不卡| 9色porny自拍视频一区二区| 天天综合色天天| 18成人在线观看| 日韩免费一区二区| 日本韩国欧美国产| 国产精品一二三四| 亚洲国产日韩a在线播放 | 欧美一区二区三区在| 不卡的av中国片| 久久精品国产99久久6| 亚洲精品综合在线| 久久久精品黄色| 欧美四级电影在线观看| 风间由美一区二区三区在线观看| 一区二区三区中文字幕| 国产丝袜欧美中文另类| 9191国产精品| 色妞www精品视频| 东方欧美亚洲色图在线| 日av在线不卡| 午夜精品影院在线观看| 成人免费视频在线观看| 久久久久久久久一| 日韩欧美一级二级三级| 欧美天堂亚洲电影院在线播放| www.久久精品| 国产精品资源网站| 久久精品国产77777蜜臀| 亚洲第一在线综合网站| 亚洲欧美日韩在线| 国产精品夫妻自拍| 国产精品污www在线观看| 精品久久久久久久久久久久包黑料| 欧美日韩日日夜夜| 欧美熟乱第一页| 欧美性三三影院| 欧美综合久久久| 在线观看日韩精品| 色综合色狠狠天天综合色| proumb性欧美在线观看| 成人av网址在线| 波波电影院一区二区三区| 国产成人夜色高潮福利影视| 国产一区二三区好的| 精品一二三四区| 国产在线精品视频| 夜夜精品视频一区二区| 一区二区三区四区中文字幕| 亚洲乱码国产乱码精品精的特点| 综合婷婷亚洲小说| 亚洲免费av高清| 亚洲无人区一区| 秋霞午夜av一区二区三区| 理论电影国产精品| 狠狠色丁香久久婷婷综| 成人在线视频一区| 色噜噜久久综合| 在线电影国产精品| 日韩精品一区二区三区四区视频| 久久亚洲一区二区三区明星换脸| 精品久久久久99| 中文字幕日本不卡| 亚洲国产精品一区二区久久恐怖片 | 在线观看精品一区| 欧美日韩三级在线| 精品国产一区久久| 国产精品嫩草99a| 一区二区三区欧美日| 日韩精品一级二级| 成人在线视频一区| 欧美老年两性高潮| 欧美精品一区二区三区蜜桃| 国产精品天美传媒| 亚洲一线二线三线视频| 麻豆精品国产传媒mv男同| 国产精品夜夜爽| 欧美情侣在线播放| 国产香蕉久久精品综合网| 亚洲欧美偷拍卡通变态| 久久精品国产精品青草| 99久久婷婷国产综合精品| 欧美男男青年gay1069videost| 欧美变态tickling挠脚心| 国产精品国产三级国产aⅴ入口| 亚洲摸摸操操av| 久久成人av少妇免费| eeuss鲁片一区二区三区| 欧美三区免费完整视频在线观看| 精品电影一区二区三区| 一区二区三区欧美在线观看| 国产久卡久卡久卡久卡视频精品| 精品视频在线免费| 国产欧美日本一区视频| 日韩av网站在线观看| 91麻豆文化传媒在线观看| 精品国产99国产精品| 亚洲成av人片| 99免费精品视频| 久久五月婷婷丁香社区| 亚洲chinese男男1069| 成人av影院在线| 国产午夜精品久久久久久免费视| 亚洲国产精品久久一线不卡| 成人福利视频在线| 久久中文娱乐网| 日韩电影在线免费看| 色哟哟精品一区| 国产精品午夜电影| 国产麻豆精品久久一二三| 717成人午夜免费福利电影| 中文字幕一区二区三区在线播放| 久久精品国产99国产| 欧美一区二区视频网站| 亚洲欧美日韩系列| 国内精品视频666| 欧美一区二区三区四区在线观看| 悠悠色在线精品| proumb性欧美在线观看| 欧美tickling网站挠脚心| 天天爽夜夜爽夜夜爽精品视频| www.久久精品| 国产精品国产a级| 99热在这里有精品免费| 中文字幕av不卡| 国产成人日日夜夜| 欧美国产成人在线| eeuss鲁片一区二区三区| 一区免费观看视频| 不卡的av电影| 亚洲欧美国产毛片在线| 色悠悠久久综合| 夜夜精品视频一区二区|