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

📄

📁 将ORACLE数据库结构导出为自定义XML文件,支持整库导出,支持SDE空间库脚本导出
💻
📖 第 1 页 / 共 2 页
字号:
				spRst2->raw_MoveNext();
			}

			spRst2->Close();
		}
		//////////////////////////////////////////////////////////////////////////

		strTmp.Format("select COLUMN_NAME,F.ALIASNAME ,T.GEOMETRYTYPE,SDE_TYPE,COLUMN_SIZE from column_registry C ,gdb_fieldinfo F ,gdb_featureclasses T\
		where C.owner = '%s'AND C.TABLE_NAME  = '%s' AND F.CLASSID = %ld AND F.FIELDNAME <>'shape' and F.FIELDNAME <>'OBJECTID' AND F.FIELDNAME <>'SHAPE' \
		AND F.FIELDNAME = C.COLUMN_NAME AND T.OBJECTCLASSID = %ld",m_strUserName2.MakeUpper(),sNAME,nID,nID);

		
		ADOHelper::ShellExecuteSqlEx(m_spConn,(LPCTSTR)strTmp,spRst2);

		if ( !ADOHelper::RstEmpty(spRst2) )
		{
			long  geometrytype =  ADOHelper::GetAdoLongValue(spRst2,_T("GEOMETRYTYPE"));			
			if ( geometrytype <=2 )
			{
				xml.AddAttrib("TYPE",_T("点"));  
			}
			else if ( geometrytype==3 )
			{
				xml.AddAttrib("TYPE",_T("线"));  
			}
			else if (  geometrytype == 4 )
			{
				xml.AddAttrib("TYPE",_T("面"));  
			}
			else
			{
				xml.AddAttrib("TYPE",_T("multipatch"));  
			}
			
			xml.AddAttrib("RANK",_T(""));  

			xml.IntoElem(); 

			while (spRst2->adoEOF==VARIANT_FALSE)
			{
				xml.AddElem("FIELD"); 

				strFieldName = (LPCTSTR)ADOHelper::GetAdoStrValue(spRst2,_T("COLUMN_NAME"));

				xml.AddAttrib("NAME",(LPCTSTR)strFieldName );  
				xml.AddAttrib("ALIASNAME",(LPCTSTR)ADOHelper::GetAdoStrValue(spRst2,_T("ALIASNAME")) ); 

				nID = ADOHelper::GetAdoLongValue(spRst2,_T("SDE_TYPE"));					

				switch(nID)
				{
				case 1:
				case 2:
					strDataType = _T("整型");
					break;
				case 3:
				case 4:
					strDataType = _T("双精度浮点型");
					break;
				case 5:
				case 14:
					strDataType = _T("字符型");
					strDataLen.Format("%ld",ADOHelper::GetAdoLongValue(spRst2,_T("COLUMN_SIZE")));
					break;
				case 6:
					strDataType = _T("二进制");					
					break;
				case 7:
					strDataType = _T("日期型");
					break;				
				default:	
					assert(0);
					strDataType.Format("%ld",nID);
					break;
				}

				xml.AddAttrib("TYPE",  (LPCTSTR)strDataType);  
				xml.AddAttrib("LENGTH",(LPCTSTR)strDataLen );	strDataLen.Empty();
				xml.AddAttrib("ISERRFLAG",  _T("0")); 

				Iter =  m_PrimeKeyMap.find(strFieldName) ;

				if ( Iter != m_PrimeKeyMap.end() && Iter->second.Compare(_T("N"))==0 )
				{
					xml.AddAttrib("ISNULL",  _T("-1"));  
				}
				else 
				{
					xml.AddAttrib("ISNULL",  _T("0"));  
				}
				
				xml.AddAttrib("ISPKEY",  _T("0"));  

				spRst2->raw_MoveNext();
			}

			xml.OutOfElem(); 
		}	

		spRst->raw_MoveNext();
	}	


	if ( xml.Save(szXML) )
	{
		MessageBox(_T("保存成功!"),_T("系统信息"),MB_ICONINFORMATION);
	}
	else
	{
		MessageBox(_T("保存失败!"),_T("系统信息"),MB_ICONINFORMATION);
	}

	return TRUE;
}

void C导出建库脚本Dlg::GetPrimeKey()
{
	NULL_RETURN(m_spConn);

	CString	strTmp = _T(""),sTableName = _T(""),sKey = _T("");

	strTmp.Format("SELECT TABLE_NAME , COLUMN_NAME FROM USER_CONS_COLUMNS WHERE constraint_name IN  (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE constraint_type = 'P' AND OWNER = '%s' )",
		m_strUserName);

	ADODB::_RecordsetPtr	spRst = NULL;
	ADOHelper::ShellExecuteSqlEx(m_spConn,(LPCTSTR)strTmp,spRst);

	RETURN( ADOHelper::RstEmpty(spRst) );	

	while (spRst->adoEOF==VARIANT_FALSE)
	{
		sTableName = (LPCTSTR)ADOHelper::GetAdoStrValue(spRst,_T("TABLE_NAME"));
		sKey	   = (LPCTSTR)ADOHelper::GetAdoStrValue(spRst,_T("COLUMN_NAME"));
		
		m_PrimeKeyMap.insert(std::make_pair(sTableName,sKey));

		spRst->raw_MoveNext();
	}
}

BOOL C导出建库脚本Dlg::OutPutADODBXML(LPCTSTR szXML)
{
	CString	strTmp = _T("");

	strTmp.Format("SELECT TABLE_NAME FROM ALL_TABLES WHERE  OWNER  = '%s'",m_strUserName.MakeUpper());

	ADODB::_RecordsetPtr	spRst = NULL;
	ADOHelper::ShellExecuteSqlEx(m_spConn,(LPCTSTR)strTmp,spRst);

	if ( ADOHelper::RstEmpty(spRst) )	{ return FALSE; }

	GetPrimeKey();

	CMarkup xml;     
	xml.SetDoc(_T("<?xml version=\"1.0\" encoding=\"gb2312\"?>\r\n"));     

	xml.AddElem("DBPZROOT"); 
	xml.AddAttrib("NAME",_T("标准配置"));     

	xml.IntoElem();  

	xml.AddElem("DBPZITEM"); 
	xml.AddAttrib("NAME",_T("弘图地籍数据库标准"));  
	xml.AddAttrib("USED",_T("1")); 
	
	xml.IntoElem();  

	long	nDataLen = 0;

	CString strTableName = _T(""),strFieldName = _T(""),strDataType = _T(""),strDataLen = _T(""), strEmpty = _T(""),strKey = _T("");

	while ( spRst->adoEOF==VARIANT_FALSE )
	{
		//<TABLE NAME="统计报表_台帐表" TABLENAME="TJBB_TZ" ALIASNAME="统计报表_台帐表" TABLECODE="TJBB_TZ" TYPE="点" RANK="6">
		xml.AddElem("TABLE"); 

		strTableName = (LPCTSTR)ADOHelper::GetAdoStrValue(spRst,_T("TABLE_NAME"));

		xml.AddAttrib("NAME",(LPCTSTR)strTableName);  
		xml.AddAttrib("TABLENAME",(LPCTSTR)strTableName);  
		xml.AddAttrib("ALIASNAME",(LPCTSTR)strTableName);  
		xml.AddAttrib("TABLECODE",(LPCTSTR)strTableName);  
		xml.AddAttrib("TYPE",_T("属性表"));  
		xml.AddAttrib("RANK",_T(""));  

		xml.IntoElem(); 

		strTmp.Format("SELECT COLUMN_NAME ,DATA_TYPE,DATA_LENGTH,DATA_PRECISION,CHAR_LENGTH,NULLABLE FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '%s' ORDER BY COLUMN_ID",strTableName);

		ADODB::_RecordsetPtr	spRst2 = NULL;
		ADOHelper::ShellExecuteSqlEx(m_spConn,(LPCTSTR)strTmp,spRst2);

		Iter =  m_PrimeKeyMap.find(strTableName) ;

		if ( Iter != m_PrimeKeyMap.end() )
		{
			strKey = Iter->second;
		}
		else
		{
			strKey.Empty();
		}


		if ( !	ADOHelper::RstEmpty(spRst2) )
		{
			while (spRst2->adoEOF == VARIANT_FALSE)
			{
				//<FIELD NAME="QSDWDM2" ALIASNAME="权属单位代码2" TYPE="字符型" LENGTH="19" ISYSDM="-1" ISERRFLAG="0" ISNULL="-1" ISPKEY="0"/>
				xml.AddElem("FIELD"); 

				strFieldName = (LPCTSTR)ADOHelper::GetAdoStrValue(spRst2,_T("COLUMN_NAME")) ; 
				xml.AddAttrib("NAME",(LPCTSTR)strFieldName );  
				xml.AddAttrib("ALIASNAME",(LPCTSTR)strFieldName ); 

				strDataType = (LPCTSTR)ADOHelper::GetAdoStrValue(spRst2,_T("DATA_TYPE")) ;
				strDataType =  strDataType.MakeUpper();

				if ( strDataType.Find("CHAR") != -1)
				{
					strDataType = _T("字符型");
					nDataLen = ADOHelper::GetAdoLongValue(spRst2,_T("CHAR_LENGTH"));
					strDataLen.Format(_T("%ld"),nDataLen);
				}				
				else if ( strDataType.Find("INTEGER") != -1 || strDataType.Find("LONG") != -1)
				{
					strDataType = _T("整型");		
				}
				else if ( strDataType.Find("DATE") != -1)
				{
					strDataType = _T("日期型");					
				}
				else if ( strDataType.Find("FLOAT") != -1 )
				{
					strDataType = _T("双精度浮点型");				
				}
				else if ( strDataType.CompareNoCase("NUMBER") == 0 )
				{
					nDataLen = ADOHelper::GetAdoLongValue(spRst2,_T("DATA_PRECISION"));
					if ( nDataLen >0 ) //38, 8
					{
						strDataType = _T("双精度浮点型");				
					}
					else
					{
						strDataType = _T("整型");			
					}					
				}
				else if ( strDataType.Find("BLOB") != -1)
				{
					strDataType = _T("二进制");						
				}
				else
				{
					assert(0);
				}

				xml.AddAttrib("TYPE",  (LPCTSTR)strDataType);  
				xml.AddAttrib("LENGTH",(LPCTSTR)strDataLen );	strDataLen.Empty();

				strEmpty =  (LPCTSTR)ADOHelper::GetAdoStrValue(spRst2,_T("NULLABLE"));

				if ( strEmpty.CompareNoCase(_T("N"))==0)
				{
					xml.AddAttrib("NULLABLE",_T("-1"));  
				}
				else
				{
					xml.AddAttrib("NULLABLE",_T("0"));  
				}
				
				xml.AddAttrib("ISYSDM",_T("-1"));
				xml.AddAttrib("ISERRFLAG",_T("-1"));

				if ( 0 == strKey.Compare(strFieldName) )
				{	
					xml.AddAttrib("ISPKEY",_T("-1"));					
				}
				else
				{
					xml.AddAttrib("ISPKEY",_T("0"));		
				}				

				spRst2->raw_MoveNext();
			}
		}

		xml.OutOfElem();  

		spRst->raw_MoveNext();
	}


	if ( xml.Save(szXML) )
	{
		MessageBox(_T("保存成功!"),_T("系统信息"),MB_ICONINFORMATION);
	}
	else
	{
		MessageBox(_T("保存失败!"),_T("系统信息"),MB_ICONINFORMATION);
	}

	return TRUE;
}

void C导出建库脚本Dlg::OnBnClickedCancel()
{
	OnCancel();
}

void C导出建库脚本Dlg::OnBnClickedRadio3()
{
	SetDlgItemText(IDC_STATIC1,_T("用户名:"));
	SetDlgItemText(IDC_STATIC2,_T("密码:"));	

	GetDlgItem(IDC_EDIT1)->EnableWindow(TRUE);
	GetDlgItem(IDC_EDIT6)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_EDIT7)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_STATIC3)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC4)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC5)->ShowWindow(SW_HIDE);	
}

void C导出建库脚本Dlg::OnBnClickedRadio4()
{
	SetDlgItemText(IDC_STATIC1,_T("SDE用户:"));
	SetDlgItemText(IDC_STATIC2,_T("SDE密码:"));	

	GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT6)->ShowWindow(SW_NORMAL);
	GetDlgItem(IDC_EDIT7)->ShowWindow(SW_NORMAL);

	GetDlgItem(IDC_STATIC3)->ShowWindow(SW_NORMAL);
	GetDlgItem(IDC_STATIC4)->ShowWindow(SW_NORMAL);	
	GetDlgItem(IDC_STATIC5)->ShowWindow(SW_NORMAL);	
}

⌨️ 快捷键说明

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