📄
字号:
// 导出建库脚本Dlg.cpp : 实现文件
//
#include "stdafx.h"
#include "导出建库脚本.h"
#include "导出建库脚本Dlg.h"
#include "ADOHelpmate.h"
#include "Markup.h"
#include "FileHelpmate.h"
#include "Tinyhelp.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// C导出建库脚本Dlg 对话框
C导出建库脚本Dlg::C导出建库脚本Dlg(CWnd* pParent /*=NULL*/)
: CDialog(C导出建库脚本Dlg::IDD, pParent)
, m_strConnStr(_T("Provider=OraOLEDB.Oracle.1;Password=KFSX;\r\nPersist Security Info=True;User ID=KFSX;Data Source=ORA9I"))
, m_StrDataBase(_T("htsvr"))
, m_strUserName(_T("KCDJKJ"))
, m_strUserName2(_T("KCDJKJ"))
, m_strPaswd2(_T("KCDJKJ"))
, m_strPaswd(_T("KCDJKJ"))
, m_strPort(_T("1521"))
, m_nSelection(1)
, m_nSDE(FALSE)
, m_spConn(NULL)
, m_spConn2(NULL)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void C导出建库脚本Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_strConnStr);
DDX_Text(pDX, IDC_EDIT2, m_StrDataBase);
DDX_Text(pDX, IDC_EDIT3, m_strUserName);
DDX_Text(pDX, IDC_EDIT6, m_strUserName2);
DDX_Text(pDX, IDC_EDIT4, m_strPaswd);
DDX_Text(pDX, IDC_EDIT7, m_strPaswd2);
DDX_Text(pDX, IDC_EDIT5, m_strPort);
DDX_Radio(pDX, IDC_RADIO1, m_nSelection);
DDX_Radio(pDX, IDC_RADIO3, m_nSDE);
}
BEGIN_MESSAGE_MAP(C导出建库脚本Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDOK, &C导出建库脚本Dlg::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &C导出建库脚本Dlg::OnBnClickedCancel)
ON_BN_CLICKED(IDC_RADIO3, &C导出建库脚本Dlg::OnBnClickedRadio3)
ON_BN_CLICKED(IDC_RADIO4, &C导出建库脚本Dlg::OnBnClickedRadio4)
END_MESSAGE_MAP()
// C导出建库脚本Dlg 消息处理程序
BOOL C导出建库脚本Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void C导出建库脚本Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void C导出建库脚本Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR C导出建库脚本Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void C导出建库脚本Dlg::OnBnClickedOk()
{
CWaitCursor wait;
UpdateData(TRUE);
if ( m_nSelection == 0 )
{
m_strConnStr.Replace(_T("\r"),_T(""));
m_strConnStr.Replace(_T("\n"),_T(""));
}
else
{
if ( m_strUserName.Trim().IsEmpty() || m_strPaswd.Trim().IsEmpty() )
{
MessageBox(_T("信息填写不完整!"),_T("系统信息"),MB_ICONINFORMATION);
return;
}
if ( m_nSDE && (m_strUserName2.Trim().IsEmpty() || m_strPaswd2.Trim().IsEmpty() ) )
{
MessageBox(_T("信息填写不完整!"),_T("系统信息"),MB_ICONINFORMATION);
return;
}
m_strConnStr.Format(_T("Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;User ID=%s;Data Source=%s"),
m_strPaswd,m_strUserName,m_StrDataBase);;
}
if ( m_spConn == NULL )
{
HRESULT hr = m_spConn.CreateInstance("ADODB.Connection");
}
else
{
m_spConn->Close();
}
HRESULT hr = m_spConn->raw_Open( (_bstr_t)m_strConnStr, _bstr_t(_T("")), _bstr_t(_T("")), ADODB::adConnectUnspecified);
if ( FAILED(hr) )
{
MessageBox(_T("数据源连接失败!"),_T("系统信息"),MB_ICONINFORMATION);
return;
}
CString strTmp = _T("");
CTime tm = CTime::GetCurrentTime();
strTmp.Format("%s_%s_%d%02d%02d.xml",m_StrDataBase.MakeUpper(),m_strUserName.MakeUpper(),tm.GetYear(),tm.GetMonth(),tm.GetDay());
CFileDialog fileDlg(FALSE,"*.xml",(LPCTSTR)strTmp,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"建库脚本(*.xml)|*.xml||");
CString strPath = FileHelpmate::GetExePath();
fileDlg.m_ofn.lpstrInitialDir = strPath;
if (fileDlg.DoModal()!=IDOK)
return ;
CString sPath = fileDlg.GetPathName();
if ( !sPath.IsEmpty())
{
if ( m_nSDE )
{
OutPutSDEDBXML( (LPCTSTR)sPath );
}
else
{
OutPutADODBXML( (LPCTSTR)sPath );
}
}
}
BOOL C导出建库脚本Dlg::OutPutSDEDBXML(LPCTSTR szXML)
{
NULL_RETURN_EX(m_spConn,FALSE);
/////////////////////////////////NULLABLE/////////////////////////////////////////
m_strConnStr.Format(_T("Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;User ID=%s;Data Source=%s"),
m_strPaswd2,m_strUserName2,m_StrDataBase);
if ( m_spConn2 == NULL )
{
HRESULT hr = m_spConn2.CreateInstance("ADODB.Connection");
}
else
{
m_spConn2->Close();
}
if ( m_spConn2 )
{
m_spConn2->raw_Open( (_bstr_t)m_strConnStr, _bstr_t(_T("")), _bstr_t(_T("")), ADODB::adConnectUnspecified);
}
//////////////////////////////////////////////////////////////////////////
CString strTmp = _T("");
strTmp.Format("select ID,NAME,ALIASNAME from gdb_objectclasses where owner = '%s'",m_strUserName2.MakeUpper());
ADODB::_RecordsetPtr spRst = NULL;
ADOHelper::ShellExecuteSqlEx(m_spConn,(LPCTSTR)strTmp,spRst);
RETURN_EX( ADOHelper::RstEmpty(spRst) ,FALSE);
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 nID = 0;
CString sNAME=_T(""),sALIASNAME=_T(""),strDataType=_T(""),strDataLen=_T(""),strFieldName = _T("");
while (spRst->adoEOF==VARIANT_FALSE)
{
sNAME = (LPCTSTR)ADOHelper::GetAdoStrValue(spRst,_T("NAME"));
if ( 0==sNAME.Right(3).CompareNoCase(_T("_ZJ")) )
{
spRst->raw_MoveNext();
continue;
}
sALIASNAME = (LPCTSTR)ADOHelper::GetAdoStrValue(spRst,_T("ALIASNAME"));
xml.AddElem("TABLE");
xml.AddAttrib("NAME",(LPCTSTR)sNAME);
xml.AddAttrib("TABLENAME",(LPCTSTR)sNAME);
xml.AddAttrib("ALIASNAME",(LPCTSTR)sALIASNAME);
xml.AddAttrib("TABLECODE",(LPCTSTR)sNAME);
nID = ADOHelper::GetAdoLongValue(spRst,_T("ID"));
ADODB::_RecordsetPtr spRst2 = NULL;
m_PrimeKeyMap.clear();
////////////////////////////////NULLABLE//////////////////////////////////////////
if ( m_spConn2 )
{
strTmp.Format("SELECT COLUMN_NAME ,NULLABLE FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '%s' AND COLUMN_NAME <>'OBJECTID' AND COLUMN_NAME <>'SHAPE' ORDER BY COLUMN_ID",sNAME);
ADOHelper::ShellExecuteSqlEx(m_spConn2,(LPCTSTR)strTmp,spRst2);
CString A,B;
while ( spRst2 && spRst2->adoEOF==VARIANT_FALSE)
{
A = (LPCTSTR)ADOHelper::GetAdoStrValue(spRst2,_T("COLUMN_NAME"));
B = (LPCTSTR)ADOHelper::GetAdoStrValue(spRst2,_T("NULLABLE")) ;
m_PrimeKeyMap.insert(std::make_pair(A ,B));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -