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

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

?? treewidget.cpp

?? 跨平臺,多數據庫查看編輯和查詢工具,平臺支持windows,linux,數據庫支持oracle,odbc,mysql,slite等
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
{
	QTreeWidgetItem *item=currentItem();
	if(!item)
		return;
	QString tname=getTableName(item);
	insertField(&db,tname);
	loadTableName();
}

void TreeWidget::onEditTableName()
{
	QTreeWidgetItem *item=currentItem();
	if(!item)
		return;
	QTreeWidgetItem *pitem=item;
	while(pitem->parent())
	   pitem=pitem->parent();
	QString tname=pitem->text(0);
	QString table_name=getTableName(item);
	bool bOK=false;
	tname=QInputDialog::getText(this,"輸入表名稱","輸入表名稱",QLineEdit::Normal,tname,&bOK);
	if(bOK)
	{
		
		QString sql=tr("UPDATE dm_table set memo='%1' WHERE upper(table_name)=upper('%2') and connection_id=%3").arg(tname).arg(table_name).arg(connectionSetup.id);
		global_db->exec(sql);		
		item->setText(0,tname);
		
	}
	
}

void TreeWidget::onEditFieldName()
{
	QTreeWidgetItem *item=currentItem();
	if(!item)
		return;
	QTreeWidgetItem *pitem=item;
	while(pitem->parent())
	   pitem=pitem->parent();
	QString table_name=pitem->data(0,Qt::UserRole).toString();
	QString field_name=item->text(1);
	QString memo=item->text(0);
	bool bOK=false;
	memo=QInputDialog::getText(this,"輸入字段名稱","輸入字段名稱",QLineEdit::Normal,memo,&bOK);
	if(bOK)
	{
		
		QString sql=tr("UPDATE dm_field set memo='%1' WHERE upper(field_name)=upper('%2') and upper(table_name)=upper('%3') and connection_id=%4").arg(memo).arg(field_name).arg(table_name).arg(connectionSetup.id);
		global_db->exec(sql);		
		item->setText(0,memo);
		//onEditTable();
		
	}
	
}

void TreeWidget::onEditTable()
{
	QTreeWidgetItem *item=currentItem();
	if(!item)
		return;
	QString tname=getTableName(item);
  
	if(!db.isOpen())
	{
		if(!reConnect())
		  return;
	}

	QStringList list=db.tables(QSql::Tables);
	if(!list.contains(tname))
	{
	  int ret = QMessageBox::question(this, "",
		"表 "+tname+" 不存在,不能打開!\n是從緩存中刪除此表?",
		QMessageBox::Yes | QMessageBox::No);
		if(ret==QMessageBox::Yes)
		{
			QString sql=tr("delete from dm_table where connection_id=%1 and upper(table_name)=upper('%2')").arg(connectionSetup.id).arg(tname);
			global_db->exec(sql);
			sql=tr("delete from dm_field where connection_id=%1 and upper(table_name)=upper('%2')").arg(connectionSetup.id).arg(tname);
			global_db->exec(sql);
			delete item;
		}

		return;
	}
	
	try{
	
	QString sql;
	model=new MySqlTableModel(0,db);
	clock_t startTime,endTime;
	startTime=clock();
	model->connectName=connectName;	
	model->setTable(tname);

	//model->setSort(0,Qt::AscendingOrder);
	QApplication::setOverrideCursor(Qt::WaitCursor);	
	//qDebug()<<"here 1"<<model->tableName();
	
	if(model->selectResult())
	{
	//qDebug()<<"here 2";
	
    QSqlQuery query(*global_db);		
    sql=tr("select field_name from dm_field where connection_id=%1 and upper(table_name)=upper('%2') and upper(is_primarykey)='YES'").arg(connectionSetup.id).arg(tname);
    QSqlIndex index;
    if(query.exec(sql))
    {
    	while(query.next())
      {
      	index.append(model->record().field(query.record().field("field_name").value().toString()));
      }
    }

    if(!index.isEmpty())
    {
    	model->setKeyField(index);
    }

		setupRelation(model);
		model->setEditStrategy(QSqlTableModel::OnManualSubmit);	  
    

    endTime=clock();
    double dseconds=(double)(endTime - startTime)/CLOCKS_PER_SEC;

  	QString message="編輯表 "+tname +tr("  檢索耗時 %1 秒").arg(dseconds);
  	emit showMessage(message);
  	//qDebug()<<"after\n----------------------------------------------";  	
  	QTreeWidgetItem *pitem=item;
  	while(pitem->parent())
  	pitem=pitem->parent();
  	QString caption=pitem->text(0);
  	emit setTableModel(model,caption);
  	  	

  }
  else
  {
  	delete model;
  	model=0;
  	//emit setTableModel(NULL);	
  	QString message;
  	message="model select error: "+model->lastError().text();
  	emit showMessage(message);
  	
  }
  }
  catch(...)
  {
  	QApplication::restoreOverrideCursor();
  	QMessageBox::warning(this,"",model->lastError().text());
  }

  QApplication::restoreOverrideCursor();

}

void TreeWidget::onCurrentItemChanged ( QTreeWidgetItem * curItem,QTreeWidgetItem * preItem)
{
	if(!curItem)
	{
		refreshFieldAction->setEnabled(false);
		editFieldNameAction->setEnabled(false);
		setupAssoAction->setEnabled(false);
	  setupPrimayKey->setEnabled(false);
		emit canEdit(false);
		return;
		
	}
	if(curItem->parent())
	{
		editTableNameAction->setEnabled(false);
		refreshFieldAction->setEnabled(false);
		editFieldNameAction->setEnabled(true);
		setupAssoAction->setEnabled(true);
	  setupPrimayKey->setEnabled(true);
	}
	else
	{
		editTableNameAction->setEnabled(true);
		refreshFieldAction->setEnabled(true);
		editFieldNameAction->setEnabled(false);
		setupAssoAction->setEnabled(false);
	  setupPrimayKey->setEnabled(false);

	}
	emit canEdit(true);
	
}

bool TreeWidget::openDatabase()
{
	QString message="正在連接 " + connectionSetup.memo + "...";
	emit showMessage(message);
	//qWarning(message.toLatin1());
	if(db.open(connectionSetup.username,connectionSetup.password))
	{
		if(db.driver() && db.driver()->hasFeature(QSqlDriver::Transactions))
		{
			db.transaction();
		}
		message="";
	  emit showMessage(message);
	}
	else
	{		
	  	message=db.lastError().text();
	  	emit showMessage(message);
	}	
	
	if(connectionSetup.database.toLower()==":memory:")
	{
		QString sql;
		sql="create table TEST(ID INTEGER,NAME varchar,SEX int,constraint pk_test primary key(ID))";
		
		db.exec(sql);
		for(int i=0;i<100;i++)
		{
			sql=tr("insert into test(id,name,sex) values(%1,'test name %2',%3)").arg(i+1).arg(i+1).arg(i%2);
			db.exec(sql);
		}
		sql="create table SEX(ID INTEGER ,NAME varchar(4),constraint pk_sex primary key(id))";
		db.exec(sql);
		sql="insert into sex(id,name) values(0,'女')";db.exec(sql);
		sql="insert into sex(id,name) values(1,'男')";db.exec(sql);
		
		sql=tr("delete from dm_table where connection_id=%1").arg(connectionSetup.id);
		global_db->exec(sql);
		sql=tr("delete from dm_field where connection_id=%1").arg(connectionSetup.id);
		global_db->exec(sql);
		
		insertTable();
		sql=tr("update dm_table set memo='測試表' where connection_id=%1 and table_name='TEST'").arg(connectionSetup.id);
		global_db->exec(sql);
		sql=tr("update dm_field set memo='姓名' where connection_id=%1 and table_name='TEST' and field_name='NAME'").arg(connectionSetup.id);
		global_db->exec(sql);
		sql=tr("update dm_field set memo='性別',asso_table_name='SEX',asso_field_name='ID',asso_field_display='NAME' where connection_id=%1 and table_name='TEST' and field_name='SEX'").arg(connectionSetup.id);
		global_db->exec(sql);
		if(db.driver() && db.driver()->hasFeature(QSqlDriver::Transactions))
		{
			db.commit();
			db.transaction();
		}

	}

	return db.isOpen();

}


void TreeWidget::onItemExpanded ( QTreeWidgetItem *item)
{
	
	QTreeWidgetItem *child=item->child(0);
	if(child->text(0).length()>0)
		return;
	
	QTreeWidgetItem * delItem=item->takeChild(0) ;		
	if(delItem) delete delItem;		
	
	QString tname=getTableName(item);

			  QSqlQuery queryField(*global_db);
			  QString sql=tr("select field_name,memo,lower(is_primarykey) as iskey,asso_table_name from dm_field where connection_id=%1 and upper(table_name)=upper('%2') order by field_xh").arg(connectionSetup.id).arg(tname);
			  QStringList list;
			  if(queryField.exec(sql))
			  {
			  	while(queryField.next())
			  	{
			  		QString fieldName=queryField.record().field("field_name").value().toString().trimmed();
			  		QString memo=     queryField.record().field("memo").value().toString().trimmed();
			  		QString isKey=     queryField.record().field("iskey").value().toString().trimmed();
			  		QString asso_table_name=     queryField.record().field("asso_table_name").value().toString().trimmed();
			  		if(memo.isNull()||memo.length()==0)
			  			memo=fieldName;
		  			list.clear();
		  			list<<memo<<fieldName;
			  		QTreeWidgetItem *fieldItem=new QTreeWidgetItem(item,list);
			  		if(isKey=="yes")
			  		  fieldItem->setIcon(0,QIcon(":/image/key.png"));
			  		else
			  		  fieldItem->setIcon(0,QIcon(":/image/dot.png"));
			  	}
			  	queryField.clear();
			  }
}

void TreeWidget::setupRelation(MySqlTableModel *tableModel)
{
		QSqlQuery query(*global_db);		
		QString tname=tableModel->tableName();
	  for(int i=0;i<model->columnCount();i++)
    {     
 	     QString sql=tr("SELECT field_name,memo,asso_table_name,asso_field_name,asso_field_display,lower(is_primarykey) as iskey 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(model->headerData(i,Qt::Horizontal).toString());
       query.exec(sql);     	 
       if(query.isSelect() && query.next())
       {
     	 	  QString field_name=query.record().field("field_name").value().toString().trimmed();
     	 	  QString memo=query.record().field("memo").value().toString().trimmed();
     	 	  QString iskey=query.record().field("iskey").value().toString().trimmed();
     	 	  QString asso_table_name=query.record().field("asso_table_name").value().toString().trimmed();
     	 	  QString asso_field_name=query.record().field("asso_field_name").value().toString().trimmed();
     	 	  QString asso_field_display=query.record().field("asso_field_display").value().toString().trimmed();     	 	  
     	 	  if(iskey=="yes")
     	 	  {
     	 	  	model->setHeaderData(i,Qt::Horizontal,QVariant(QIcon(":/image/key.png")),Qt::DecorationRole);
     	 	  	model->setHeaderData(i,Qt::Horizontal,QVariant(1),Qt::ToolTipRole);
     	 	  	//model->setHeaderData(i,Qt::Horizontal,QVariant(QColor(0,0,200)),Qt::TextColorRole);
     	 	  	//continue;
     	 	  }
     	 	  else
     	 	  	model->setHeaderData(i,Qt::Horizontal,QVariant(0),Qt::ToolTipRole);
     	 	  if(asso_table_name.length()>0)
     	 	  {
			  			model->setHeaderData(i,Qt::Horizontal,QVariant(QIcon(":/image/asso.png")),Qt::DecorationRole);			  			
			  	}
			  		
     	 	  if(memo.length()==0)
     	 	  	memo=field_name;
     	 	  model->setHeaderData(i,Qt::Horizontal,QVariant(memo));
     	 	  if(asso_table_name.length()>0)
     	 	  {     	 	  	
     	 	  	model->setRelation(i, QSqlRelation(asso_table_name, asso_field_name, asso_field_display));
     	 	  }
       }
       query.clear();
       
       //qWarning("type:%d\n",model->record().field(i).type());
       if(
       	model->record().field(i).type()==QVariant::Double||
       	model->record().field(i).type()==QVariant::Int||
       	model->record().field(i).type()==QVariant::UInt||
       	model->record().field(i).type()==QVariant::LongLong||
       	model->record().field(i).type()==QVariant::ULongLong
       	)
       {
          model->setHeaderData(i,Qt::Horizontal,QVariant(Qt::AlignRight|Qt::AlignVCenter),Qt::UserRole);
          //qWarning("column:%d  type:%d\n",i,model->record().field(i).type());
       }
          

    }
}

	
void TreeWidget::onSetupPrimaryKey()
{
	QTreeWidgetItem *item=currentItem();
	if(!item || !item->parent())
		return;
	
	QString table_name=getTableName(item);
	QString field_name=item->text(1);		
		
	QSqlQuery query(*global_db);
	QString sql;
	sql=tr("select is_primarykey from dm_field where connection_id=%1 and upper(table_name)=upper('%2') and upper(field_name)=upper('%3')").arg(connectionSetup.id).arg(table_name).arg(field_name);
	if(query.exec(sql) && query.next())
	{
		QString isKey=query.record().field(0).value().toString().trimmed().toLower();
		if(isKey=="yes")
		  sql=tr("UPDATE dm_field set is_primarykey='' WHERE upper(field_name)=upper('%1') and upper(table_name)=upper('%2') and connection_id=%3").arg(field_name).arg(table_name).arg(connectionSetup.id);
		else
			sql=tr("UPDATE dm_field set is_primarykey='yes' WHERE upper(field_name)=upper('%1') and upper(table_name)=upper('%2') and connection_id=%3").arg(field_name).arg(table_name).arg(connectionSetup.id);
	  global_db->exec(sql);		
	  if(global_db->lastError().isValid())
	  	QMessageBox::warning(this,"",global_db->lastError().text());
	  else
	  {
  		if(isKey=="yes")
  		  item->setIcon(0,QIcon(":/image/dot.png"));
  		else
  		  item->setIcon(0,QIcon(":/image/key.png"));
	  }
	  
	}
	else
		QMessageBox::warning(this,"",query.lastError().text());
		
		
	

}


void TreeWidget::onSetupAsso()
{
	QTreeWidgetItem *item=currentItem();
	if(!item || !item->parent())
		return;

	QString table_name=getTableName(item);
	QString field_name=item->text(1);		

	SetupAsso dlg(global_db,connectionSetup.id,table_name,field_name,this);
	dlg.exec();
}

void TreeWidget::clearCache()
{
	QString sql=tr("delete from dm_field where connection_id=%1").arg(connectionSetup.id);
	global_db->exec(sql);
	qDebug()<<sql;
	sql=tr("delete from dm_table where connection_id=%1").arg(connectionSetup.id);
	qDebug()<<sql;
	global_db->exec(sql);
	insertTable();
	loadTableName();
}

void TreeWidget::reInsertField()
{
	QString sql=tr("delete from dm_field where connection_id=%1").arg(connectionSetup.id);
	qDebug()<<sql;
	global_db->exec(sql);
	//insertTable();
	loadTableName();

}
void TreeWidget::reInsertTable()
{
	QString sql=tr("delete from dm_table where connection_id=%1").arg(connectionSetup.id);
	qDebug()<<sql;
	global_db->exec(sql);	
	insertTable();
	loadTableName();

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产寡妇亲子伦一区二区| 日本不卡一区二区| 一区二区三区精品在线| 日韩成人精品在线| 麻豆精品蜜桃视频网站| aaa国产一区| 欧美一区二区三区四区久久| 亚洲色图都市小说| 国内精品伊人久久久久影院对白| 成a人片亚洲日本久久| 精品播放一区二区| 一区二区三区国产豹纹内裤在线| 久久爱另类一区二区小说| 色94色欧美sute亚洲线路一ni| 欧美成人r级一区二区三区| 亚洲三级在线免费观看| 成人免费视频网站在线观看| 69av一区二区三区| 亚洲欧美偷拍卡通变态| 成人午夜精品一区二区三区| 欧美成人三级在线| 一级特黄大欧美久久久| 91偷拍与自偷拍精品| 久久精品一二三| 丝袜美腿亚洲一区二区图片| 欧美在线观看视频一区二区三区| 久久九九全国免费| 精品亚洲免费视频| 26uuu久久综合| 另类小说欧美激情| 欧美另类变人与禽xxxxx| 亚洲第四色夜色| 色婷婷av一区二区三区软件| 一区二区欧美视频| 97久久精品人人做人人爽| 欧美激情一区二区三区四区| 国产成人一区二区精品非洲| 精品久久久久久久久久久院品网 | 欧美日韩亚洲综合一区二区三区 | 亚洲欧洲日韩一区二区三区| 麻豆成人久久精品二区三区小说| 欧美男同性恋视频网站| 亚洲第一福利视频在线| 91玉足脚交白嫩脚丫在线播放| 国产精品高潮久久久久无| 成人性生交大合| 国产日韩一级二级三级| 成人午夜电影网站| 中文字幕一区二区三中文字幕| 国产精品自在在线| 国产色婷婷亚洲99精品小说| 国产又粗又猛又爽又黄91精品| 精品盗摄一区二区三区| 国产乱码精品一区二区三区忘忧草| 精品免费日韩av| 国产老妇另类xxxxx| 26uuu国产电影一区二区| 东方欧美亚洲色图在线| 欧美精品xxxxbbbb| 日韩精品午夜视频| 中文字幕一区不卡| 一本久久综合亚洲鲁鲁五月天| 午夜欧美视频在线观看| 日韩精品自拍偷拍| 福利电影一区二区| 亚洲国产成人高清精品| 欧美一区二区三区在线| 久久成人av少妇免费| 久久久综合激的五月天| 99re在线精品| 看片的网站亚洲| 中文字幕一区二区不卡| 欧美专区亚洲专区| 国产在线精品一区二区| 亚洲视频香蕉人妖| 欧美精品乱人伦久久久久久| 国产在线播放一区| 亚洲久草在线视频| 久久久精品国产免大香伊| a级精品国产片在线观看| 亚洲丶国产丶欧美一区二区三区| 久久中文娱乐网| 日本精品一级二级| 美女脱光内衣内裤视频久久网站 | 亚洲免费观看高清完整版在线观看熊| 色婷婷亚洲一区二区三区| 日本三级韩国三级欧美三级| 日韩理论在线观看| 欧美一区二区视频在线观看2022| 国产成人免费在线视频| 蜜桃视频在线一区| 亚洲丝袜另类动漫二区| 国产亚洲一区二区三区在线观看| 欧美性生活久久| 成人精品亚洲人成在线| 国产一区二区调教| 午夜精品视频一区| 最新热久久免费视频| 国产偷国产偷精品高清尤物| 欧美群妇大交群的观看方式| 成人av电影在线网| 久久国内精品视频| 亚洲成av人在线观看| 欧美国产激情二区三区| 欧美精品在线一区二区| 欧美日韩免费在线视频| 91麻豆国产精品久久| www.综合网.com| 成人免费高清视频在线观看| 日韩高清不卡一区二区三区| 日韩黄色小视频| 亚洲综合色视频| 亚洲国产综合91精品麻豆| 亚洲免费观看视频| 最新不卡av在线| 亚洲一区二区中文在线| 亚洲老司机在线| 中文字幕视频一区二区三区久| 国产亚洲欧洲997久久综合| 日韩欧美一级精品久久| 欧美成人三级在线| 精品国产sm最大网站| 欧美最猛黑人xxxxx猛交| 91久久精品一区二区| av动漫一区二区| 欧美在线观看18| 欧美日韩一区二区不卡| 国产成人在线观看| 91免费国产视频网站| 91麻豆国产自产在线观看| 欧美色图12p| 欧美日韩久久久| 91麻豆精品国产91久久久久久久久 | 国产一区免费电影| 久久国产人妖系列| 国产精品亚洲第一区在线暖暖韩国| 成人av小说网| 91蜜桃视频在线| 成人av电影观看| 欧美电影一区二区| 欧美肥妇bbw| 国产精品欧美久久久久一区二区| 中文一区二区在线观看| 国产日韩欧美一区二区三区乱码| 欧美激情艳妇裸体舞| 国产精品免费人成网站| 亚洲成人免费在线观看| 免费人成网站在线观看欧美高清| 久久精品国产99国产精品| 免费在线观看一区二区三区| 久久国产精品无码网站| av中文字幕一区| 精品视频一区二区三区免费| 欧美mv日韩mv国产网站app| 国产人妖乱国产精品人妖| 亚洲欧美中日韩| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产一区欧美一区| 国产精品99久久久久久有的能看| 99精品国产一区二区三区不卡| 一本在线高清不卡dvd| 2019国产精品| 一区二区三区久久| 亚洲天天做日日做天天谢日日欢| 伊人一区二区三区| 国产一区二区三区四区五区美女 | 欧美高清在线精品一区| 日韩av电影天堂| www.色综合.com| 在线成人免费观看| 国产精品免费丝袜| 日韩av一级电影| 色拍拍在线精品视频8848| 精品欧美乱码久久久久久| 国产精品毛片高清在线完整版| 亚洲午夜久久久久久久久电影网| 国内外成人在线视频| 欧美色视频一区| 国产日韩欧美激情| 久久国产尿小便嘘嘘| 制服丝袜日韩国产| 亚洲免费av观看| 成人高清免费在线播放| 欧美精品一区在线观看| 一区二区三区在线视频播放| 9色porny自拍视频一区二区| 日韩色视频在线观看| 日本成人在线电影网| 色噜噜狠狠一区二区三区果冻| 国产日韩一级二级三级| 韩国女主播一区| 欧美一级片免费看| 裸体一区二区三区| 欧美无乱码久久久免费午夜一区| 亚洲综合在线视频| 91在线精品一区二区| 欧美国产在线观看| 国产综合成人久久大片91| 精品国产麻豆免费人成网站| 天堂午夜影视日韩欧美一区二区|