summaryrefslogtreecommitdiff
path: root/VC++Files/mysqlmanager/mysqlmanagerview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'VC++Files/mysqlmanager/mysqlmanagerview.cpp')
-rw-r--r--VC++Files/mysqlmanager/mysqlmanagerview.cpp849
1 files changed, 849 insertions, 0 deletions
diff --git a/VC++Files/mysqlmanager/mysqlmanagerview.cpp b/VC++Files/mysqlmanager/mysqlmanagerview.cpp
new file mode 100644
index 00000000000..1d4756e7d7a
--- /dev/null
+++ b/VC++Files/mysqlmanager/mysqlmanagerview.cpp
@@ -0,0 +1,849 @@
+// MySqlManagerView.cpp : implementation of the CMySqlManagerView class
+//
+
+#include "stdafx.h"
+#include "MySqlManager.h"
+#include "MySqlManagerDoc.h"
+#include "MySqlManagerView.h"
+#include "mainfrm.h"
+#include "ToolSql.h"
+#include "RegisterServer.h"
+
+class XStatus
+{
+public:
+ XStatus ( LPCSTR fmt, ... )
+ {
+ char buf [2048];
+ va_list args;
+ va_start(args, fmt);
+ int ret = vsprintf(buf, fmt, args);
+ MainFrame->StatusMsg ( "%s", buf );
+ va_end(args);
+ }
+ ~XStatus()
+ {
+ MainFrame->StatusMsg ( " ");
+ }
+private:
+ XStatus();
+};
+
+#ifdef _DEBUG
+ #define new DEBUG_NEW
+ #undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+
+IMPLEMENT_DYNCREATE(CMySqlManagerView, CTreeView)
+
+BEGIN_MESSAGE_MAP(CMySqlManagerView, CTreeView)
+//{{AFX_MSG_MAP(CMySqlManagerView)
+ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
+ON_COMMAND(IDM_SQL_TOOL_QUERY, OnSqlToolQuery)
+ON_COMMAND(IDM_REFRESH, OnRefresh)
+ON_COMMAND(IDM_TOOLS_SERVER_PROPERTIES,OnServerProperties)
+ON_COMMAND(IDM_TOOLS_REGISTER_SERVER, OnRegisterServer)
+ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
+//}}AFX_MSG_MAP
+// Standard printing commands
+ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint)
+ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint)
+ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview)
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+
+CMySqlManagerView::CMySqlManagerView()
+: m_pTree(0)
+, m_pImages(0)
+, m_pbmBmp(0)
+, m_pTool(0)
+{
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+CMySqlManagerView::~CMySqlManagerView()
+{
+ if ( m_pbmBmp ) delete m_pbmBmp;
+ if ( m_pImages ) delete m_pImages;
+ if ( m_pTool )
+ {
+ m_pTool->DestroyWindow();
+ delete m_pTool;
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+BOOL CMySqlManagerView::PreCreateWindow(CREATESTRUCT& cs)
+{
+ return CTreeView::PreCreateWindow(cs);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+void CMySqlManagerView::OnDraw(CDC* pDC)
+{
+ CMySqlManagerDoc* pDoc = GetDocument();
+ ASSERT_VALID(pDoc);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+BOOL CMySqlManagerView::OnPreparePrinting(CPrintInfo* pInfo)
+{
+ return DoPreparePrinting(pInfo);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+void CMySqlManagerView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
+{
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+void CMySqlManagerView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
+{
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+#ifdef _DEBUG
+void CMySqlManagerView::AssertValid() const
+{
+ CTreeView::AssertValid();
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+void CMySqlManagerView::Dump(CDumpContext& dc) const
+{
+ CTreeView::Dump(dc);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+CMySqlManagerDoc* CMySqlManagerView::GetDocument() // non-debug version is inline
+{
+ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMySqlManagerDoc)));
+ return (CMySqlManagerDoc*)m_pDocument;
+}
+#endif //_DEBUG
+
+/////////////////////////////////////////////////////////////////////////////
+
+void CMySqlManagerView::OnInitialUpdate()
+{
+
+ CTreeView::OnInitialUpdate();
+
+ m_pTree = & GetTreeCtrl();
+ m_pImages = new CImageList;
+ m_pImages->Create( 16, 16, FALSE, 0, 10 );
+ m_pbmBmp = new CBitmap;
+ m_pbmBmp->LoadBitmap( IDB_BITMAP1 );
+ m_pImages->Add( m_pbmBmp, (COLORREF)0 );
+ m_pTree->SetImageList( m_pImages, TVSIL_NORMAL );
+
+ HTREEITEM h = AddResource ( TVI_ROOT, new CResourceServer ( "MySQL", "localhost", "root", "" ) );
+// AddResource ( h, new CResourceProcesslist () );
+ h = AddResource ( TVI_ROOT, new CResourceServer ( "Test", "localhost", "test", "" ) );
+// AddResource ( h, new CResourceProcesslist () );
+
+ m_pTree->ModifyStyle(0, TVS_HASLINES|TVS_HASBUTTONS);
+
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+HTREEITEM CMySqlManagerView::AddResource ( HTREEITEM hParent, CResource* pRes, HTREEITEM hLastItem )
+{
+
+ TV_INSERTSTRUCT ItemStruct;
+ memset( &ItemStruct, 0, sizeof(ItemStruct) );
+ ItemStruct.hParent = hParent;
+ ItemStruct.hInsertAfter = hLastItem;
+ ItemStruct.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_IMAGE;
+ ItemStruct.item.hItem = 0;
+ ItemStruct.item.state = 0;
+ ItemStruct.item.stateMask = 0;
+ ItemStruct.item.pszText = (LPSTR) pRes->GetDisplayName();
+ ItemStruct.item.cchTextMax = (int) strlen( ItemStruct.item.pszText );
+ ItemStruct.item.iImage = 2;
+ ItemStruct.item.iSelectedImage = 3;
+ ItemStruct.item.cChildren = 0;
+ ItemStruct.item.lParam = (long) pRes;
+ hLastItem = m_pTree->InsertItem( &ItemStruct );
+ return hLastItem;
+}
+
+//int InsertNetResources( LPNETRESOURCE lpNetResource, CTreeCtrl *pTreeCtrl, HTREEITEM hParent, int *pnCount )
+//{
+//
+// DWORD Erc;
+// NETRESOURCE *pNetRes;
+// HANDLE hEnum;
+//
+// if( !pTreeCtrl ) return -1;
+// if( pnCount ) *pnCount = 0;
+// Erc = WNetOpenEnum(
+// RESOURCE_GLOBALNET,//DWORD dwScope, // scope of enumeration
+// RESOURCETYPE_ANY,//DWORD dwType, // resource types to list
+// 0,//DWORD dwUsage, // resource usage to list
+// lpNetResource,//LPNETRESOURCE lpNetResource, // pointer to resource structure
+// &hEnum//LPHANDLE lphEnum // pointer to enumeration handle buffer
+// );
+// if( Erc )
+// {
+// ShowError( Erc );
+// return Erc;
+// }
+//
+//
+// DWORD dwBufferSize = 1024;
+// pNetRes = (NETRESOURCE *)malloc( dwBufferSize );
+//
+// while( TRUE )
+// {
+// DWORD dwCount = 0xFFFFFFFF;
+// Erc = WNetEnumResource(
+// hEnum,//HANDLE hEnum, // handle to enumeration
+// &dwCount,//LPDWORD lpcCount, // pointer to entries to list
+// pNetRes,//LPVOID lpBuffer, // pointer to buffer for results
+// &dwBufferSize//LPDWORD lpBufferSize // pointer to buffer size variable
+// );
+// if( Erc == ERROR_NO_MORE_ITEMS ) return 0;
+// if( Erc )
+// {
+// free( pNetRes );
+// pNetRes = (NETRESOURCE *)malloc( dwBufferSize );
+// Erc = WNetEnumResource(
+// hEnum,//HANDLE hEnum, // handle to enumeration
+// &dwCount,//LPDWORD lpcCount, // pointer to entries to list
+// pNetRes,//LPVOID lpBuffer, // pointer to buffer for results
+// &dwBufferSize//LPDWORD lpBufferSize // pointer to buffer size variable
+// );
+// }
+// if( Erc ){ ShowError( Erc ); return Erc; }
+//
+// TV_INSERTSTRUCT ItemStruct;
+// HTREEITEM hLastItem = TVI_FIRST;
+// DWORD i;
+//
+// if( pnCount ) *pnCount += dwCount;
+// for( i=0; i<dwCount; i++ )
+// {
+// memset( &ItemStruct, 0, sizeof(ItemStruct) );
+// ItemStruct.hParent = hParent;
+// ItemStruct.hInsertAfter = hLastItem;
+// ItemStruct.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_IMAGE;
+// ItemStruct.item.hItem = 0;
+// ItemStruct.item.state = 0;
+// ItemStruct.item.stateMask = 0;
+// ItemStruct.item.pszText = pNetRes[i].lpRemoteName;
+// ItemStruct.item.cchTextMax = strlen( ItemStruct.item.pszText );
+// ItemStruct.item.iImage = 2;
+// ItemStruct.item.iSelectedImage = 3;
+// ItemStruct.item.cChildren = 0;
+// ItemStruct.item.lParam = (long) (new CNetResource( &pNetRes[i] ));
+//
+// hLastItem = pTreeCtrl->InsertItem( &ItemStruct );
+// }
+// }//end while()
+//
+// WNetCloseEnum( hEnum );
+// free( pNetRes );
+// return Erc;
+//}
+
+/////////////////////////////////////////////////////////////////////////////
+
+static void print_top(MYSQL_RES *result)
+{
+ uint length;
+ MYSQL_FIELD *field;
+ mysql_field_seek(result,0);
+ while ((field = mysql_fetch_field(result)))
+ {
+ if ((length= (uint) strlen(field->name)) > field->max_length)
+ field->max_length=length;
+ else
+ length=field->max_length;
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+static void print_header(MYSQL_RES *result,CStringArray& rg)
+{
+ MYSQL_FIELD *field;
+ print_top(result);
+ mysql_field_seek(result,0);
+ while ((field = mysql_fetch_field(result)))
+ {
+// printf(" %-*s|",field->max_length+1,field->name);
+ rg.Add(field->name);
+ }
+ print_top(result);
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+
+static void print_row(MYSQL_RES *result,MYSQL_ROW row,CStringArray& rg)
+{
+ uint i,length;
+ MYSQL_FIELD *field;
+ mysql_field_seek(result,0);
+ for (i=0 ; i < mysql_num_fields(result); i++)
+ {
+ field = mysql_fetch_field(result);
+ length=field->max_length;
+ rg.Add(row[i] ? (char*) row[i] : "");
+// printf(" %-*s|",length+1,row[i] ? (char*) row[i] : "");
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+void CMySqlManagerView::ProcessResultSet ( HTREEITEM hItem, LPVOID r, CResource* pResource )
+{
+
+ MYSQL_RES* result = (MYSQL_RES *) r;
+ MYSQL_ROW row;
+
+ switch (pResource->GetType())
+ {
+ case CResource::eProcesslist:
+ {
+ CResourceProcesslist* p = (CResourceProcesslist*) pResource;
+ CResourceProcesslistItem* pi = new CResourceProcesslistItem ();
+ CString strText;
+ print_header(result,p->m_rgFields);
+ for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
+ {
+ strText += p->m_rgFields[i];
+ strText += " ";
+ }
+ pi->m_strName = strText;
+ AddResource ( hItem, pi );
+ for (int index=0;(row=mysql_fetch_row(result));index++)
+ {
+ pi = new CResourceProcesslistItem ();
+ print_row(result,row,pi->m_rgFields);
+ strText.Empty();
+ for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
+ {
+ strText += pi->m_rgFields[i];
+ strText += " ";
+ }
+ pi->m_strName = strText;
+ AddResource ( hItem, pi );
+ }
+ print_top(result);
+ break;
+ }
+ case CResource::eServer:
+ {
+ CResourceServer* p = (CResourceServer*) pResource;
+ CResourceDatabase* pi = new CResourceDatabase ();
+ CString strText;
+ /* print_header(result,p->m_rgFields); */
+ for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
+ {
+ strText += p->m_rgFields[i];
+ strText += " ";
+ }
+ pi->m_strName = strText;
+ /* AddResource ( hItem, pi ); */
+ for (int index=0;(row=mysql_fetch_row(result));index++)
+ {
+ pi = new CResourceDatabase ();
+ print_row(result,row,pi->m_rgFields);
+ strText.Empty();
+ for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
+ {
+ strText += pi->m_rgFields[i];
+ strText += " ";
+ }
+ pi->m_strName = strText;
+ AddResource ( hItem, pi );
+ }
+ print_top(result);
+ break;
+ }
+ case CResource::eDatabase:
+ {
+ CResourceDatabase* p = (CResourceDatabase*) pResource;
+ CResourceTable* pi = new CResourceTable ();
+ CString strText;
+ /* print_header(result,p->m_rgFields); */
+ for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
+ {
+ strText += p->m_rgFields[i];
+ strText += " ";
+ }
+ pi->m_strName = strText;
+ /* AddResource ( hItem, pi ); */
+ for (int index=0;(row=mysql_fetch_row(result));index++)
+ {
+ pi = new CResourceTable ();
+ print_row(result,row,pi->m_rgFields);
+ strText.Empty();
+ for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
+ {
+ strText += pi->m_rgFields[i];
+ strText += " ";
+ }
+ pi->m_strName = strText;
+ AddResource ( hItem, pi );
+ }
+ print_top(result);
+ break;
+ }
+ case CResource::eTable:
+ {
+ CResourceTable* p = (CResourceTable*) pResource;
+ CResourceField* pi = new CResourceField ();
+ CString strText;
+ /* print_header(result,p->m_rgFields); */
+ for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
+ {
+ strText += p->m_rgFields[i];
+ strText += " ";
+ }
+ pi->m_strName = strText;
+ /* AddResource ( hItem, pi ); */
+ for (int index=0;(row=mysql_fetch_row(result));index++)
+ {
+ pi = new CResourceField ();
+ print_row(result,row,pi->m_rgFields);
+ strText.Empty();
+ for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
+ {
+ strText += pi->m_rgFields[i];
+ strText += " ";
+ }
+ pi->m_strName = strText;
+ AddResource ( hItem, pi );
+ }
+ print_top(result);
+ break;
+ }
+ }
+
+
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+CResource* CMySqlManagerView::GetSelectedResource(HTREEITEM* phItemRet)
+{
+ CResource* pResource = NULL;
+ HTREEITEM hItem = m_pTree->GetSelectedItem();
+ if ( hItem )
+ {
+ TV_ITEM item;
+ memset( &item, 0, sizeof(TV_ITEM) );
+ item.hItem = hItem;
+ item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
+ m_pTree->GetItem( &item );
+ if ( item.lParam )
+ {
+ pResource = (CResource*) item.lParam;
+ }
+ }
+ if (phItemRet)
+ {
+ *phItemRet = hItem;
+ }
+ return pResource;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+CResourceServer* CMySqlManagerView::GetServerResource(HTREEITEM hItem)
+{
+
+ TV_ITEM item;
+
+ memset( &item, 0, sizeof(TV_ITEM) );
+ item.hItem = hItem;
+ item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
+ m_pTree->GetItem( &item );
+ if ( !item.lParam ) return NULL;
+
+ CResource* pResource = (CResource*) item.lParam;
+
+ switch (pResource->GetType())
+ {
+ case CResource::eServer:
+ {
+ return (CResourceServer*) pResource;
+ }
+ case CResource::eDatabase:
+ {
+ HTREEITEM hParent = m_pTree->GetParentItem(hItem);
+ memset( &item, 0, sizeof(TV_ITEM) );
+ item.hItem = hParent;
+ item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
+ m_pTree->GetItem( &item );
+ if ( !item.lParam ) return NULL;
+ return (CResourceServer*) item.lParam;
+ }
+ case CResource::eTable:
+ {
+ HTREEITEM hParent = m_pTree->GetParentItem(m_pTree->GetParentItem(hItem));
+ memset( &item, 0, sizeof(TV_ITEM) );
+ item.hItem = hParent;
+ item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
+ m_pTree->GetItem( &item );
+ if ( !item.lParam ) return NULL;
+ return (CResourceServer*) item.lParam;
+ }
+ }
+
+ return NULL;
+
+}
+/////////////////////////////////////////////////////////////////////////////
+
+void CMySqlManagerView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ HTREEITEM hItem;
+ hItem = m_pTree->GetSelectedItem();
+ *pResult = 0;
+ if ( !hItem ) return;
+
+ TV_ITEM item;
+ memset( &item, 0, sizeof(TV_ITEM) );
+ item.hItem = hItem;
+ item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
+ m_pTree->GetItem( &item );
+
+ if ( ! item.lParam ) return;
+
+ if ( item.cChildren ) return; //if has got children expand only
+
+ CWaitCursor x;
+
+ CResource* pResource = (CResource*) item.lParam;
+
+ MYSQL mysql;
+ MYSQL_RES *result;
+
+ switch (pResource->GetType())
+ {
+ case CResource::eProcesslist:
+ {
+ XStatus x ( "Connecting to server %s on host %s..."
+ , (LPCTSTR) pResource->GetDisplayName()
+ , (LPCTSTR) pResource->GetHostName()
+ );
+ mysql_init(&mysql);
+ if (!mysql_real_connect(&mysql,pResource->GetHostName(), pResource->GetUserName(),pResource->GetPassword(),0,pResource->GetPortNumber(), NullS,0))
+ {
+ PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
+ return;
+ }
+ if (!(result=mysql_list_processes(&mysql)))
+ {
+ return;
+ }
+ ProcessResultSet ( hItem, result, pResource );
+ mysql_free_result(result);
+ mysql_close(&mysql);
+ break;
+ }
+ case CResource::eServer:
+ {
+ MainFrame->StatusMsg ( "Connecting to server %s on host %s..."
+ , (LPCTSTR) pResource->GetDisplayName()
+ , (LPCTSTR) pResource->GetHostName()
+ );
+ mysql_init(&mysql);
+ if (!mysql_real_connect(&mysql,pResource->GetHostName(), pResource->GetUserName(),pResource->GetPassword(),0,pResource->GetPortNumber(), NullS,0))
+ {
+ PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
+ MainFrame->StatusMsg ( "Error: Connecting to server %s... (%s)"
+ , (LPCTSTR) pResource->GetDisplayName()
+ , mysql_error(&mysql)
+ );
+ return;
+ }
+ if (!(result=mysql_list_dbs(&mysql,0)))
+ {
+ }
+ ProcessResultSet ( hItem, result, pResource );
+ mysql_free_result(result);
+ mysql_close(&mysql);
+ MainFrame->StatusMsg ( " " );
+ break;
+ }
+ case CResource::eDatabase:
+ {
+ CResourceServer* pServer = GetServerResource(hItem);
+ if (!pServer) return;
+ MainFrame->StatusMsg ( "Connecting to server %s on host %s..."
+ , (LPCTSTR) pServer->GetDisplayName()
+ , (LPCTSTR) pServer->GetHostName()
+ );
+ mysql_init(&mysql);
+ if (!mysql_real_connect(&mysql,pServer->GetHostName(), pServer->GetUserName(),pServer->GetPassword(),0,pServer->GetPortNumber(), NullS,0))
+ {
+ PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
+ MainFrame->StatusMsg ( "Error: Connecting to server %s... (%s)"
+ , (LPCTSTR) pServer->GetDisplayName()
+ , mysql_error(&mysql)
+ );
+ return;
+ }
+ CResourceDatabase* pRes = (CResourceDatabase*) pResource;
+ CString strDB = pResource->GetDisplayName();
+ strDB.TrimRight();
+ if (mysql_select_db(&mysql,strDB))
+ {
+ MainFrame->StatusMsg ( "Error: Selecting database %s... (%s)"
+ , (LPCTSTR) strDB
+ , mysql_error(&mysql)
+ );
+ return;
+ }
+ if (!(result=mysql_list_tables(&mysql,0)))
+ {
+ }
+ ProcessResultSet ( hItem, result, pRes );
+ mysql_free_result(result);
+ mysql_close(&mysql);
+ MainFrame->StatusMsg ( " " );
+ break;
+ }
+ case CResource::eTable:
+ {
+ CResourceServer* pServer = GetServerResource(hItem);
+ if (!pServer) return;
+ MainFrame->StatusMsg ( "Connecting to server %s on host %s..."
+ , (LPCTSTR) pServer->GetDisplayName()
+ , (LPCTSTR) pServer->GetHostName()
+ );
+ mysql_init(&mysql);
+ if (!mysql_real_connect(&mysql,pServer->GetHostName(), pServer->GetUserName(),pServer->GetPassword(),0,pServer->GetPortNumber(), NullS,0))
+ {
+ PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
+ MainFrame->StatusMsg ( "Error: Connecting to server %s... (%s)"
+ , (LPCTSTR) pServer->GetDisplayName()
+ , mysql_error(&mysql)
+ );
+ return;
+ }
+ HTREEITEM hParent = m_pTree->GetParentItem(hItem);
+ memset( &item, 0, sizeof(TV_ITEM) );
+ item.hItem = hParent;
+ item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
+ m_pTree->GetItem( &item );
+ if ( item.lParam )
+ {
+ CResourceDatabase* pResDatabase = (CResourceDatabase*) item.lParam;
+ CResourceTable* pRes = (CResourceTable*) pResource;
+ CString strDB = pResDatabase->GetDisplayName();
+ CString strTable = pResource->GetDisplayName();
+ strDB.TrimRight();
+ strTable.TrimRight();
+ if (mysql_select_db(&mysql,strDB))
+ {
+ return;
+ }
+ CString str; str.Format("show fields from %s",(LPCTSTR)strTable);
+ if ( mysql_query(&mysql,str)==0 )
+ {
+ MYSQL_RES *result;
+ if ((result=mysql_store_result(&mysql)))
+ {
+ ProcessResultSet ( hItem, result, pRes );
+ mysql_free_result(result);
+ }
+ }
+ }
+ mysql_close(&mysql);
+ break;
+ }
+ }
+
+// InsertNetResources( (LPNETRESOURCE)pTvItem->lParam,
+// &m_TreeCtrl,
+// hItem,
+// &pTvItem->cChildren );
+// pTvItem->mask = TVIF_CHILDREN;
+// m_TreeCtrl.SetItem( pTvItem );
+
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+void CMySqlManagerView::OnRefresh()
+{
+ HTREEITEM hItem = NULL;
+ CResource* pResource = GetSelectedResource(&hItem);
+ if (pResource&&hItem)
+ {
+ switch (pResource->GetType())
+ {
+ case CResource::eTable:
+ {
+
+ TV_ITEM item;
+ MYSQL mysql;
+// MYSQL_RES *result;
+
+ HTREEITEM hParent = m_pTree->GetParentItem(hItem);
+
+ HTREEITEM hChild = m_pTree->GetChildItem(hItem);
+ while (hChild)
+ {
+ HTREEITEM h = m_pTree->GetNextSiblingItem(hChild);
+ BOOL b = m_pTree->DeleteItem(hChild);
+ hChild = h;
+ }
+ mysql_init(&mysql);
+ if (!mysql_real_connect(&mysql,pResource->GetHostName(), pResource->GetUserName(),pResource->GetPassword(),0,pResource->GetPortNumber(), NullS,0))
+ {
+ return;
+ }
+ memset( &item, 0, sizeof(TV_ITEM) );
+ item.hItem = hParent;
+ item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
+ m_pTree->GetItem( &item );
+ if ( item.lParam )
+ {
+ CResourceDatabase* pResDatabase = (CResourceDatabase*) item.lParam;
+ CResourceTable* pRes = (CResourceTable*) pResource;
+ CString strDB = pResDatabase->GetDisplayName();
+ CString strTable = pResource->GetDisplayName();
+ strDB.TrimRight();
+ strTable.TrimRight();
+ if (mysql_select_db(&mysql,strDB))
+ {
+ return;
+ }
+ CString str; str.Format("show fields from %s",(LPCTSTR)strTable);
+ if ( mysql_query(&mysql,str)==0 )
+ {
+ MYSQL_RES *result;
+ if ((result=mysql_store_result(&mysql)))
+ {
+ ProcessResultSet ( hItem, result, pRes );
+ mysql_free_result(result);
+ }
+ }
+ }
+ mysql_close(&mysql);
+ break;
+ }
+ }
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+void CMySqlManagerView::OnRegisterServer()
+{
+ CRegisterServer dlg;
+ if (dlg.DoModal()!=IDOK) return;
+ AddResource (
+ TVI_ROOT,
+ new CResourceServer ( dlg.m_strServer, dlg.m_strHost, dlg.m_strUser, dlg.m_strPassword, dlg.m_strPort )
+ );
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+void CMySqlManagerView::OnServerProperties()
+{
+ HTREEITEM hItem;
+ CResource* pRes = GetSelectedResource(&hItem);
+ if (!pRes) return;
+ if (pRes->GetType()!=CResource::eServer) return;
+ CResourceServer* pResource = (CResourceServer*)pRes;
+ CRegisterServer dlg;
+ dlg.m_strHost = pResource->GetHostName();
+ dlg.m_strUser = pResource->GetUserName();
+ dlg.m_strPassword = pResource->GetPassword();
+ dlg.m_strPort = pResource->GetPortName();
+ if (dlg.DoModal()!=IDOK) return;
+ pResource->m_strHost = dlg.m_strHost ;
+ pResource->m_strUser = dlg.m_strUser ;
+ pResource->m_strPassword = dlg.m_strPassword;
+ pResource->m_strPort = dlg.m_strPort ;
+ TV_ITEM item;
+ memset( &item, 0, sizeof(TV_ITEM) );
+ item.hItem = hItem;
+ item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
+ m_pTree->GetItem( &item );
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+
+void CMySqlManagerView::OnSqlToolQuery()
+{
+
+ HTREEITEM hItem;
+
+ CResource* pResource = GetSelectedResource(&hItem);
+
+ if (!pResource) return;
+
+ CResourceServer* pServer = GetServerResource(hItem);
+ if (!pServer) return; /* Avoid bug when selecting field */
+
+ m_pTool = new CToolSql ( AfxGetMainWnd(), pServer, pResource );
+
+ if ( ! m_pTool->Create(IDD_TOOL_SQL,this) )
+ {
+ delete m_pTool;
+ m_pTool = 0;
+ PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
+ }
+ else
+ {
+ m_pTool->ShowWindow(SW_SHOW);
+ }
+
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+
+BOOL CMySqlManagerView::PreTranslateMessage(MSG* pMsg)
+{
+ if (m_pTool && m_pTool->PreTranslateMessage(pMsg))
+ return TRUE;
+ return CTreeView::PreTranslateMessage(pMsg);
+}
+
+void CMySqlManagerView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
+{
+
+ POINT pt;
+
+ GetCursorPos ( & pt );
+
+ CMenu menu;
+
+ menu.CreatePopupMenu ();
+
+ menu.AppendMenu ( MF_ENABLED , IDM_SQL_TOOL_QUERY, "SQL Query" );
+ menu.AppendMenu ( MF_ENABLED , IDM_REFRESH, "Refresh active item(s)" );
+ menu.AppendMenu ( MF_ENABLED , IDM_TOOLS_REGISTER_SERVER, "Register server" );
+ menu.AppendMenu ( MF_ENABLED , IDM_TOOLS_SERVER_PROPERTIES, "Properties" );
+
+ menu.TrackPopupMenu ( TPM_LEFTALIGN | TPM_RIGHTBUTTON , pt.x, pt.y, CWnd::GetParent(), NULL );
+
+ *pResult = 0;
+
+}