//--------------------------------------------------------------------------- #include #pragma hdrstop #include "main.h" #include "initsetup.h" #include "db.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mysql.h" #include TForm1 *Form1; bool i_start, NT; bool IsForce = false; bool IsVariables = false; bool IsProcess = false ; bool IsDatabases = false; bool new_line = 0; bool ya = true; bool yy = true; bool rinit = false; AnsiString vpath; AnsiString vip; MYSQL_RES *res_1; static unsigned long q = 0; bool preport = false; bool treport = false; bool ereport = false; AnsiString mainroot; bool IsMySQLNode = false; MYSQL *MySQL; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { i_start = true; IsConnect = false; if (ParamCount() > 0){ if (ParamStr(1) == "-h" || ParamStr(1) == "h" ) { ShowHelp(); Application->Terminate(); } else if (ParamStr(1) == "-w" || ParamStr(1) == "w") { i_start = false; ContinueLoad(); } } else { ContinueLoad(); Hide(); GetServerOptions(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::DrawItem(TMessage& Msg) { IconDrawItem((LPDRAWITEMSTRUCT)Msg.LParam); TForm::Dispatch(&Msg); } //--------------------------------------------------------------------------- void __fastcall TForm1::MyNotify(TMessage& Msg) { POINT MousePos; switch(Msg.LParam) { case WM_RBUTTONUP: if (GetCursorPos(&MousePos)){ PopupMenu1->PopupComponent = Form1; SetForegroundWindow(Handle); PopupMenu1->Popup(MousePos.x, MousePos.y);} else Show(); break; case WM_LBUTTONUP: if (GetCursorPos(&MousePos)){ PopupMenu1->PopupComponent = Form1; SetForegroundWindow(Handle); PopupMenu1->Popup(MousePos.x, MousePos.y); } ToggleState(); break; default: break; } TForm::Dispatch(&Msg); } //--------------------------------------------------------------------------- bool __fastcall TForm1::TrayMessage(DWORD dwMessage) { NOTIFYICONDATA tnd; PSTR pszTip; pszTip = TipText(); tnd.cbSize = sizeof(NOTIFYICONDATA); tnd.hWnd = Handle; tnd.uID = IDC_MYICON; tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; tnd.uCallbackMessage = MYWM_NOTIFY; if (dwMessage == NIM_MODIFY){ tnd.hIcon = IconHandle(); if (pszTip)lstrcpyn(tnd.szTip, pszTip, sizeof(tnd.szTip)); else tnd.szTip[0] = '\0'; } else { tnd.hIcon = NULL; tnd.szTip[0] = '\0'; } return (Shell_NotifyIcon(dwMessage, &tnd)); } //--------------------------------------------------------------------------- HANDLE __fastcall TForm1::IconHandle(void) { if (!NT){ if (MySQLSignal()){Image3->Visible = false; Image2->Visible = true; return (Image2->Picture->Icon->Handle); } else {Image2->Visible = false; Image3->Visible = true; return (Image3->Picture->Icon->Handle); } } else { if (TheServiceStatus()){Image3->Visible = false; Image2->Visible = true; return (Image2->Picture->Icon->Handle); } else if (MySQLSignal()){Image3->Visible = false; Image2->Visible = true; return (Image2->Picture->Icon->Handle); } else {Image2->Visible = false; Image3->Visible = true; return (Image3->Picture->Icon->Handle); } } } //--------------------------------------------------------------------------- void __fastcall TForm1::ToggleState(void) { TrayMessage(NIM_MODIFY); if (!NT){ if (MySQLSignal()){SSW9->Caption = "ShutDown the Server"; Image3->Visible = false; Image2->Visible = true; } else {SSW9->Caption = "Start the Server"; Image2->Visible = false; Image3->Visible = true; } } else { if (TheServiceStart()) { Standa->Enabled = false; if (TheServiceStatus()) {RService->Enabled = false; StopS->Enabled = true; StopS->Caption = "Stop the Service"; Image3->Visible = false; Image2->Visible = true; } else {RService->Enabled = true; StopS->Enabled = true; RService->Caption = "Remove the Service"; StopS->Caption = "Start the Service"; Image2->Visible = false; Image3->Visible = true; } } else { Standa->Enabled = true; StopS->Enabled = false; if (MySQLSignal()) { RService->Enabled = false; Standa->Caption = "ShutDown the Server Standalone"; Image3->Visible = false; Image2->Visible = true; } else { RService->Enabled = true; RService->Caption = "Install the Service"; Standa->Caption = "Start the Server Standalone"; Image2->Visible = false; Image3->Visible = true; } } } } //--------------------------------------------------------------------------- PSTR __fastcall TForm1::TipText(void) { char* status = StatusLine->SimpleText.c_str(); return status; } //--------------------------------------------------------------------------- void __fastcall TForm1::WMQueryEndSession(TWMQueryEndSession &msg) { if (!NT) { if (MySQLSignal()){ StatusLine->SimpleText = "Shutdown in progress....."; Show(); Shutd(); msg.Result = 1; } else { StatusLine->SimpleText = "The Server already is down......"; Show(); msg.Result = 1; Close(); } } else { Show(); if (!TheServiceStart()) { if (MySQLSignal()) Shutd(); } msg.Result = 1; } } //--------------------------------------------------------------------------- LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi) { HICON hIcon; hIcon = (HICON)LoadImage(g_hinst, MAKEINTRESOURCE(lpdi->CtlID), IMAGE_ICON, 16, 16, 0); if (!hIcon) return(false); DrawIconEx(lpdi->hDC, lpdi->rcItem.left, lpdi->rcItem.top, hIcon, 16, 16, 0, NULL, DI_NORMAL); return(true); } //--------------------------------------------------------------------------- AnsiString __fastcall TForm1::TheComputer() { AnsiString theword; DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1; char szBuf[MAX_COMPUTERNAME_LENGTH + 1]; szBuf[0] = '\0'; GetComputerName(szBuf, &dwSize); theword = (AnsiString) szBuf; delete [] szBuf; return theword; } //--------------------------------------------------------------------------- AnsiString __fastcall TForm1::TheOS() { AnsiString theword; OSVERSIONINFO info; info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&info); switch (info.dwPlatformId) { case VER_PLATFORM_WIN32s: NT = false; theword = "Win32s detected"; break; case VER_PLATFORM_WIN32_WINDOWS: NT = false; theword = "Win 95 or Win 98 detected"; break; case VER_PLATFORM_WIN32_NT: NT = true; theword = "Windows NT detected"; break; } return theword; } ///--------------------------------------------------------------------------- AnsiString __fastcall TForm1::TheUser() { AnsiString theword; DWORD dwSize = 0; GetUserName(NULL, &dwSize); char *szBuf = new char[dwSize]; szBuf[0] = '\0'; GetUserName(szBuf, &dwSize); theword = (AnsiString) szBuf; delete [] szBuf; return theword; } //--------------------------------------------------------------------------- void __fastcall TForm1::TakeIP(void) { WORD wVersionRequested; WSADATA WSAData; wVersionRequested = MAKEWORD(1,1); WSAStartup(wVersionRequested,&WSAData); hostent *P; char s[128]; in_addr in; char *P2; gethostname(s, 128); P = gethostbyname(s); Memo2->Lines->Clear(); Memo2->Lines->Add((AnsiString)P->h_name); mainroot = P->h_name; in.S_un.S_un_b.s_b1 = P->h_addr_list[0][0]; in.S_un.S_un_b.s_b2 = P->h_addr_list[0][1]; in.S_un.S_un_b.s_b3 = P->h_addr_list[0][2]; in.S_un.S_un_b.s_b4 = P->h_addr_list[0][3]; P2 = inet_ntoa(in); vip = P2; mainroot += " ( " + (AnsiString)P2 + " )"; Memo2->Lines->Add(P2); } //--------------------------------------------------------------------------- void __fastcall TForm1::GetmemStatus(void) { MEMORYSTATUS ms; ms.dwLength = sizeof(MEMORYSTATUS); GlobalMemoryStatus(&ms); Edit2->Text = AnsiString((double)ms.dwTotalPhys / 1024000.0) + " MB RAM"; } //--------------------------------------------------------------------------- void __fastcall TForm1::ShowHelp(void) { Application->MessageBox("Usage: WinMySQLadmin.EXE [OPTIONS]\n\n-w Run the tool without start the Server.\n-h Shows this message and exit ", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); } //--------------------------------------------------------------------------- void __fastcall TForm1::ContinueLoad(void) { OS->Text = TheOS(); Localhost->Text = TheComputer(); Localuser->Text = TheUser(); GetmemStatus(); ClearBox(); TakeIP(); MyODBC(); IsMyIniUp(); if (!NT) { WinNT->Enabled = false; NtVer->Enabled = false; Win9->Enabled = true; } else { WinNT->Enabled = true; Win9->Enabled = false; } if (i_start) { // NT never is started from the prompt if ((!NT) && (!MySQLSignal())) mysqldstart(); { TrayMessage(NIM_MODIFY); SeekErrFile(); } } Hide(); } //--------------------------------------------------------------------------- void __fastcall TForm1::MyODBC(void) { TRegistry *Registry = new TRegistry(); Memo3->Lines->Clear(); try { Registry->RootKey = HKEY_LOCAL_MACHINE; // the basic data of myodbc if (Registry->OpenKey("Software\\ODBC\\ODBCINST.INI\\MySQL", false)) { Memo3->Lines->Add("Driver Version\t" + Registry->ReadString("DriverODBCVer")); Memo3->Lines->Add("Driver\t\t" + Registry->ReadString("Driver")); Memo3->Lines->Add("API Level\t\t" + Registry->ReadString("APILevel")); Memo3->Lines->Add("Setup\t\t" + Registry->ReadString("Setup")); Memo3->Lines->Add("SQL Level\t" + Registry->ReadString("SQLLevel")); } else Memo3->Lines->Add("Not Found"); } catch (...) { delete Registry; } Memo3->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::IsMyIniUp(void) { // we see if the my.ini is Up AnsiString asFileName = FileSearch("my.ini", TheWinDir()); if (asFileName.IsEmpty()) { IsForce = true; i_start = false; QuickSearch(); } else { Memo1->Enabled = true; Memo1->Lines->Clear(); FillMyIni(); GetBaseDir(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::QuickSearch(void) { AnsiString asFileName = FileSearch("mysql.exe", "c:/mysql/bin"); if (!asFileName.IsEmpty()) BaseDir->Text = "c:/mysql"; } //--------------------------------------------------------------------------- AnsiString __fastcall TForm1::TheWinDir() { AnsiString WinDir; UINT BufferSize = GetWindowsDirectory(NULL,0); WinDir.SetLength(BufferSize+1); GetWindowsDirectory(WinDir.c_str(),BufferSize); char* dirw = WinDir.c_str(); return dirw ; } //--------------------------------------------------------------------------- void __fastcall TForm1::FillMyIni(void) { Memo1->Lines->LoadFromFile(TheWinDir() + "\\my.ini"); } //--------------------------------------------------------------------------- void __fastcall TForm1::GetBaseDir(void) { char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char file[_MAX_FNAME]; char ext[_MAX_EXT]; TIniFile *pIniFile = new TIniFile(TheWinDir() + "\\my.ini"); BaseDir->Text = pIniFile->ReadString("mysqld","basedir","") ; AnsiString lx = pIniFile->ReadString("WinMySQLadmin","Server","") ; _splitpath((lx).c_str(),drive,dir,file,ext); AnsiString lw = (AnsiString) file + ext; if ( lw == "mysqld-shareware.exe") {ShareVer->Checked = true;} if ( lw == "mysqld.exe") {MysqldVer->Checked = true;} if ( lw == "mysqld-opt.exe") {OptVer->Checked = true;} if ( lw == "mysqld-nt.exe") {NtVer->Checked = true;} delete pIniFile; } //--------------------------------------------------------------------------- void __fastcall TForm1::Showme1Click(TObject *Sender) { if(Showme1->Caption == "Show me") { TrayMessage(NIM_DELETE); Showme1->Caption = "Hide me"; Show(); } else { TrayMessage(NIM_ADD); TrayMessage(NIM_MODIFY); Showme1->Caption = "Show me"; Hide(); } } //--------------------------------------------------------------------------- bool __fastcall TForm1::MySQLSignal() { HANDLE hEventShutdown; hEventShutdown=OpenEvent(EVENT_MODIFY_STATE, 0, "MySqlShutdown"); if(hEventShutdown) { CloseHandle(hEventShutdown); return true; } else { CloseHandle(hEventShutdown); return false; } } //--------------------------------------------------------------------------- bool __fastcall TForm1::mysqldstart() { memset(&pi, 0, sizeof(pi)); memset(&si, 0, sizeof(si)); si.cb = sizeof(si); si.dwFlags |= STARTF_USESHOWWINDOW; si.wShowWindow |= SW_SHOWNORMAL; TIniFile *pIniFile = new TIniFile(TheWinDir() + "\\my.ini"); if (NT) vpath = pIniFile->ReadString("WinMySQLadmin","Server","") + " --standalone\0" ; else vpath = pIniFile->ReadString("WinMySQLadmin","Server","") + "\0" ; if ( ! CreateProcess(0,vpath.c_str(), 0, 0, 0, 0, 0, 0, &si,&pi)) { TrayMessage(NIM_MODIFY); return false; } else { TrayMessage(NIM_MODIFY); return true; } } //--------------------------------------------------------------------------- bool __fastcall TForm1::SeekErrFile() { Memo4->Enabled = true; Memo4->Lines->Clear(); AnsiString asFileName = FileSearch("mysql.err", BaseDir->Text + "/data"); if (!asFileName.IsEmpty()) { FName = BaseDir->Text + "/data/mysql.err"; ifstream in((FName).c_str()); in.seekg(0, ios::end); string s, line; deque v; deque lines; streampos sp = in.tellg(); if (sp <= 1000) in.seekg(0, ios::beg); else { in.seekg(0, ios::beg); in.seekg((sp - 1000)); } do { lines.push_back(line); }while (getline(in, line)); if( lines.size() <= 15) { deque::reverse_iterator r; for(r = lines.rbegin(); r != lines.rend() ; r++) { if (ereport) Memo5->Lines->Add((*r).c_str()); Memo4->Lines->Add((*r).c_str()); } } else { int k = 0; deque::reverse_iterator r; for(r = lines.rbegin(); r != lines.rend(); r++) { if (ereport) Memo5->Lines->Add((*r).c_str()); Memo4->Lines->Add((*r).c_str()); if (++k >= 15) { break;} } } in.close(); return true; } else return false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { Showme1->Caption = "Show me"; TrayMessage(NIM_ADD); TrayMessage(NIM_MODIFY); Hide(); if (IsForce) {Form2->Show();} Timer1->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::GetServerFile() { AnsiString FileName; if(!NT) { FileName = FileSearch("mysqld-opt.exe", ExtractFilePath(Application->ExeName)); if (FileName.IsEmpty()) FileName = FileSearch("mysqld.exe", ExtractFilePath(Application->ExeName)); if (FileName.IsEmpty()) FileName = FileSearch("mysqld-shareware.exe", ExtractFilePath(Application->ExeName)); if (!FileName.IsEmpty()){ if ( FileName == "mysqld-opt.exe") {OptVer->Checked = true;} if ( FileName == "mysqld.exe") {MysqldVer->Checked= true;} if ( FileName == "mysqld-shareware.exe") {ShareVer->Checked= true;} } } else { FileName = FileSearch("mysqld-nt.exe", ExtractFilePath(Application->ExeName)); if (FileName.IsEmpty()) FileName = FileSearch("mysqld.exe", ExtractFilePath(Application->ExeName)); if (FileName.IsEmpty()) FileName = FileSearch("mysqld-shareware.exe", ExtractFilePath(Application->ExeName)); if (!FileName.IsEmpty()) { if ( FileName == "mysqld-nt.exe") {NtVer->Checked = true;} if ( FileName == "mysqld.exe") {MysqldVer->Checked= true;} if ( FileName == "mysqld-shareware.exe") {ShareVer->Checked= true;} } } } //--------------------------------------------------------------------------- void __fastcall TForm1::CreateMyIniFile(void) { char szFileName[6]; int iFileHandle; AnsiString jk; Memo1->Enabled = true; Memo1->Lines->Clear(); strcpy(szFileName,"\\my.ini"); iFileHandle = FileCreate(TheWinDir() + szFileName ); jk = "#This File was made using the WinMySQLadmin 1.0 Tool\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#" + Now() + "\n\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#Uncomment or Add only the keys that you know how works.\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#Read the MySQL Manual for instructions\n\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "[mysqld]\n\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "basedir=" + TheDir() + "\n"; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#bind-address=" + vip + "\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#datadir=" + TheDir() + "/data\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#language=" + TheDir() + "/share/your language directory\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#delay-key-write-for-all-tables\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#log-long-format\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#slow query log=#\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#tmpdir=#\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#ansi\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#new\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#port=3306\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#safe\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#skip-name-resolve\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#skip-networking\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#skip-new\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#skip-host-cache\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#set-variable = key_buffer=16M\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#set-variable = max_allowed_packet=1M\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#set-variable = thread_stack=128K\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#set-variable = flush_time=1800\n\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "[mysqldump]\n\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#quick\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#set-variable = max_allowed_packet=16M\n\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "[mysql]\n\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#no-auto-rehash\n\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "[isamchk]\n\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "#set-variable= key=16M\n\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "[WinMySQLadmin]\n\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); if (ShareVer->Checked) { jk = "Server=" + TheDir() + "/bin/mysqld-shareware.exe\n\n";} if (MysqldVer->Checked) {jk = "Server=" + TheDir() + "/bin/mysqld.exe\n\n";} if (OptVer->Checked) {jk = "Server=" + TheDir() + "/bin/mysqld-opt.exe\n\n";} if (NtVer->Checked) {jk = "Server=" + TheDir() + "/bin/mysqld-nt.exe\n\n";} FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "user=" + Form2->Edit1->Text + "\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); jk = "password=" + Form2->Edit2->Text + "\n" ; FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); FileClose(iFileHandle); FillMyIni(); } //--------------------------------------------------------------------------- bool __fastcall TForm1::CreatingShortCut() { // Where is The Start Menu in this Machine ? LPITEMIDLIST pidl; LPMALLOC pShellMalloc; char szDir[MAX_PATH + 16]; AnsiString file; AnsiString jk = "\\WinMySQLadmin.lnk" ; if(SUCCEEDED(SHGetMalloc(&pShellMalloc))) { if(SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_STARTUP, &pidl))) { if(!SHGetPathFromIDList(pidl, szDir)) { pShellMalloc->Release(); pShellMalloc->Free(pidl); return false; } pShellMalloc->Free(pidl); } pShellMalloc->Release(); StrCat(szDir, jk.c_str()); } // the create IShellLink* pLink; IPersistFile* pPersistFile; if(SUCCEEDED(CoInitialize(NULL))) { if(SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **) &pLink))) { pLink->SetPath((ExtractFilePath(Application->ExeName) + "WinMySQLadmin.exe").c_str()); pLink->SetDescription("WinMySQLadmin Tool"); pLink->SetShowCmd(SW_SHOW); if(SUCCEEDED(pLink->QueryInterface(IID_IPersistFile, (void **)&pPersistFile))) { WideString strShortCutLocation(szDir); pPersistFile->Save(strShortCutLocation.c_bstr(), TRUE); pPersistFile->Release(); } pLink->Release(); } CoUninitialize(); } return true; } //--------------------------------------------------------------------------- AnsiString __fastcall TForm1::TheDir() { AnsiString buffer; char s[_MAX_PATH + 1]; StrCopy(s, ( BaseDir->Text).c_str()) ; for (int i = 0; s[i] != NULL; i++) if (s[i] != '\\') buffer += s[i]; else buffer += "/"; return buffer; } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { Application->HelpCommand(HELP_FINDER,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer2Timer(TObject *Sender) { ToggleState(); } //--------------------------------------------------------------------------- bool __fastcall TForm1::TheServiceStart() { bool thatok; char *SERVICE_NAME = "MySql"; SC_HANDLE myService, scm; scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS | GENERIC_WRITE); if (scm) { myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS); if (myService) thatok = true; else thatok = false; } CloseServiceHandle(myService); CloseServiceHandle(scm); return thatok; } //--------------------------------------------------------------------------- bool __fastcall TForm1::TheServicePause() { bool thatok; char *SERVICE_NAME = "MySql"; SC_HANDLE myService, scm; scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); if (scm) { myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS); if (myService) { // stop the service if (IsConnect) { mysql_kill(MySQL,mysql_thread_id(MySQL)); StatusLine->SimpleText = ""; q = 0; } SERVICE_STATUS ss; thatok = ControlService(myService, SERVICE_CONTROL_STOP, &ss); } else thatok = false; } else thatok = false; CloseServiceHandle(myService); CloseServiceHandle(scm); return thatok; } //--------------------------------------------------------------------------- bool __fastcall TForm1::TheServiceResume() { bool thatok; char *SERVICE_NAME = "MySql"; SC_HANDLE myService, scm; scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); if (scm) { myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS); if (myService) { // start the service thatok = StartService(myService, 0, NULL); } else thatok = false; } else thatok = false; CloseServiceHandle(myService); CloseServiceHandle(scm); return thatok; } //--------------------------------------------------------------------------- bool __fastcall TForm1::TheServiceStatus() { bool thatok; bool k; char *SERVICE_NAME = "MySql"; SC_HANDLE myService, scm; SERVICE_STATUS ss; DWORD dwState = 0xFFFFFFFF; scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); if (scm) { myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS); if (myService) { memset(&ss, 0, sizeof(ss)); k = QueryServiceStatus(myService,&ss); if (k) { dwState = ss.dwCurrentState; if (dwState == SERVICE_RUNNING) thatok = true; } else thatok = false; } else thatok = false; } else thatok = false; CloseServiceHandle(myService); CloseServiceHandle(scm); return thatok; } //--------------------------------------------------------------------------- bool __fastcall TForm1::TheServiceCreate() { bool thatok; char *SERVICE_NAME = "MySql"; char *szFullPath = vpath.c_str(); SC_HANDLE myService, scm; scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); if (scm) { myService = CreateService( scm, SERVICE_NAME, SERVICE_NAME, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START , SERVICE_ERROR_NORMAL, szFullPath, NULL, NULL, NULL, NULL, NULL); if (myService) thatok = true; else thatok = false; } CloseServiceHandle(myService); CloseServiceHandle(scm); return thatok; } //--------------------------------------------------------------------------- void __fastcall TForm1::Swin9Click(TObject *Sender) { if(Application->MessageBox("Shutdown this tool", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::SSW9Click(TObject *Sender) { if (MySQLSignal()) { if(Application->MessageBox("Shutdown the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { if (Shutd()) { IsConnect = false; IsVariables = false; IsProcess = false; IsDatabases = false; ya = false; ClearBox(); Sleep(500); TrayMessage(NIM_MODIFY); } else Application->MessageBox("Fails to Shutdown the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } } else { if(Application->MessageBox("Start the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { if (mysqldstart()) { TrayMessage(NIM_MODIFY); ya = true; } else Application->MessageBox("Fails to Start the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } } } //--------------------------------------------------------------------------- void __fastcall TForm1::ShutDownBoth1Click(TObject *Sender) { if (MySQLSignal()) { if(Application->MessageBox("Shutdown the MySQL Server and this tool ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { if (Shutd()) Close(); else { Application->MessageBox("Fails to Shutdown the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } } } else if(Application->MessageBox("Shutdown this tool ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::ShutDownthisTool1Click(TObject *Sender) { if(Application->MessageBox("Shutdown this tool ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::StopSClick(TObject *Sender) { AnsiString theWarning; theWarning = "Are you sure to stop the Service ?\n\nAll the connections will be loss !" ; if (TheServiceStatus()) { if(Application->MessageBox(theWarning.c_str(), "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { if (TheServicePause()) { TrayMessage(NIM_MODIFY); IsConnect = false; IsVariables = false; IsProcess = false; IsDatabases = false; ya = false; ClearBox(); } else Application->MessageBox("Fails to stop the Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } } else { if(Application->MessageBox("Start the Service Manager for the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { if (TheServiceResume()) { ya = true; TrayMessage(NIM_MODIFY); } else Application->MessageBox("Fails to start the Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } } } //--------------------------------------------------------------------------- void __fastcall TForm1::RServiceClick(TObject *Sender) { if (TheServiceStart()) { if(Application->MessageBox("Remove the MySQL Server service ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { if (!TheServiceRemove()) Application->MessageBox("Fails to Remove The MySQL Server Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } } else { if(Application->MessageBox("Install the MySQL Server service ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { if (!TheServerPath()) Application->MessageBox("Please create first the my.ini setup", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); else { if (!TheServiceCreate()) Application->MessageBox("Fails to Install The MySQL Server Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } } } } //--------------------------------------------------------------------------- void __fastcall TForm1::StandaClick(TObject *Sender) { if (MySQLSignal()) { if(Application->MessageBox("Shutdown the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { if (Shutd()) { IsConnect = false; IsVariables = false; IsProcess = false; IsDatabases = false; ya = false; ClearBox(); Sleep(500); TrayMessage(NIM_MODIFY); } else Application->MessageBox("Fails to Shutdown the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } } else { if(Application->MessageBox("Start the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { if (mysqldstart()) { StatusLine->SimpleText = ""; TrayMessage(NIM_MODIFY); } else Application->MessageBox("Fails to Start the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } } } //--------------------------------------------------------------------------- bool __fastcall TForm1::Shutd() { // from Irena HANDLE hEventShutdown; hEventShutdown=OpenEvent(EVENT_MODIFY_STATE, 0, "MySqlShutdown"); if (IsConnect) { mysql_kill(MySQL,mysql_thread_id(MySQL)); mysql_shutdown(MySQL); StatusLine->SimpleText = ""; } q = 0; if(hEventShutdown) { SetEvent(hEventShutdown); CloseHandle(hEventShutdown); TrayMessage(NIM_MODIFY); IsConnect = false; return true; } else { TrayMessage(NIM_MODIFY); return false; } } //--------------------------------------------------------------------------- void __fastcall TForm1::ClearBox(void) { st22->Text = ""; st23->Text = ""; st24->Text = ""; st25->Text = ""; st26->Text = ""; st27->Text = ""; st28->Text = ""; st29->Text = ""; Edit3->Text = ""; Edit4->Text = ""; Edit5->Text = ""; Edit6->Text = ""; } //--------------------------------------------------------------------------- bool __fastcall TForm1::TheServiceRemove() { bool thatok; char *SERVICE_NAME = "MySql"; SC_HANDLE myService, scm; scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); if (scm) { myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS); if (myService) { if(DeleteService(myService)) { CloseServiceHandle(myService); CloseServiceHandle(scm); thatok = true; } else { CloseServiceHandle(myService); CloseServiceHandle(scm); thatok = false; } } else { CloseServiceHandle(myService); CloseServiceHandle(scm); thatok = false; } } else { thatok = false; CloseServiceHandle(scm); } return thatok; } //--------------------------------------------------------------------------- bool __fastcall TForm1::TheServerPath() { TIniFile *pIniFile = new TIniFile(TheWinDir() + "\\my.ini"); vpath = pIniFile->ReadString("WinMySQLadmin","Server","") ; delete pIniFile; if (vpath.IsEmpty()) return false; else return true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button5Click(TObject *Sender) { if (!SeekErrFile()) Application->MessageBox("Fails to find mysql.err", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); } //--------------------------------------------------------------------------- void __fastcall TForm1::IsMySQLInit(void) { AnsiString theCommand; char *host = NULL,*password=0,*user=0 ; TIniFile *pIniFile = new TIniFile(TheWinDir() + "\\my.ini"); AnsiString MyUser = pIniFile->ReadString("WinMySQLadmin","user","") ; AnsiString MyPass = pIniFile->ReadString("WinMySQLadmin","password","") ; delete pIniFile; if (!MyUser.IsEmpty() && MyUser.Length() && !MyPass.IsEmpty() && MyPass.Length()) { if (!IsConnect) { MySQL = mysql_init(MySQL); if (mysql_real_connect(MySQL, "localhost",(MyUser).c_str(), (MyPass).c_str() , 0, 0, NULL, 0)) IsConnect = true; else { if(mysql_real_connect(MySQL,host,user,password , 0, 0, NULL, 0)) { IsConnect = true; theCommand = "GRANT ALL PRIVILEGES ON *.* TO "; theCommand += "'" + MyUser + "' @localhost IDENTIFIED BY "; theCommand += "'" + MyPass + "' with GRANT OPTION"; char* los = theCommand.c_str(); if(!mysql_query(MySQL, los )) StatusLine->SimpleText = " "; } } } } else { if (!IsConnect) { MySQL = mysql_init(MySQL); if(mysql_real_connect(MySQL,host,user,password , 0, 0, NULL, 0)) IsConnect = true; } } } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer3Timer(TObject *Sender) { if ((NT) && TheServiceStatus()) {IsMySQLInit(); } if ((NT) && !TheServiceStatus() && MySQLSignal()) {IsMySQLInit(); } if (!(NT) && MySQLSignal()) {IsMySQLInit(); } if (IsConnect) { GetServerStatus(); if (!IsMySQLNode) GetMainRoot(); Extended->Enabled = true; if (!IsProcess && !GetProcess()) StatusLine->SimpleText = ""; if (!IsVariables && !GetVariables()) StatusLine->SimpleText = ""; Timer3->Interval = 10000; } else Extended->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::GetServerStatus(void) { GetExtendedStatus(); Edit3->Text = mysql_get_server_info(MySQL); Edit4->Text = mysql_get_host_info(MySQL); Edit5->Text = mysql_get_client_info(); Edit6->Text = mysql_get_proto_info(MySQL); } //--------------------------------------------------------------------------- bool __fastcall TForm1::GetProcess() { MYSQL_RES *res; MYSQL_ROW row; unsigned int i; int k = 0; int therow = 1; new_line=1; StringGrid2->RowCount= 2; if (!(res=mysql_list_processes(MySQL))) { return false; } while ((row=mysql_fetch_row(res)) != 0) { mysql_field_seek(res,0); StringGrid2->Cells[0][0] = "PID"; StringGrid2->Cells[1][0] = "User"; StringGrid2->Cells[2][0] = "Host"; StringGrid2->Cells[3][0] = "DB"; StringGrid2->Cells[4][0] = "Command"; StringGrid2->Cells[5][0] = "Time"; StringGrid2->Cells[6][0] = "State"; StringGrid2->Cells[7][0] = "Info"; for (i=0 ; i < mysql_num_fields(res); i++) { if (k <= 6 ) { StringGrid2->Cells[k][therow] = row[i]; k++; } else { StringGrid2->Cells[(k)][therow] = row[i]; k = 0; therow++ ; StringGrid2->RowCount++; } } } StringGrid2->RowCount--; mysql_free_result(res); StringGrid5->RowCount--; IsProcess = true; return true; } //--------------------------------------------------------------------------- bool __fastcall TForm1::GetVariables() { MYSQL_RES *res; MYSQL_ROW row; unsigned int i; int k = 1; new_line=1; bool left = true; AnsiString report; StringGrid1->RowCount = 2; if (mysql_query(MySQL,"show variables") || !(res=mysql_store_result(MySQL))) { return false; } while ((row=mysql_fetch_row(res)) != 0) { mysql_field_seek(res,0); StringGrid1->Cells[0][0] = "Variable Name"; StringGrid1->Cells[1][0] = "Value"; for (i=0 ; i < mysql_num_fields(res); i++) { if (left) { if (treport) report = GetString(row[i]); StringGrid1->Cells[0][k++] = row[i]; left = false; } else { if (treport) Memo5->Lines->Add(report + row[i]); StringGrid1->RowCount++; StringGrid1->Cells[1][--k] = row[i]; k++; left = true; } } } StringGrid1->RowCount--; mysql_free_result(res); IsVariables = true; return true; } //--------------------------------------------------------------------------- bool __fastcall TForm1::nice_time(AnsiString buff) { unsigned long sec; unsigned long tmp; AnsiString mytime; sec = StrToInt(buff); if (sec >= 3600L*24) { tmp=sec/(3600L*24); sec-=3600L*24*tmp; mytime = IntToStr(tmp); if (tmp > 1) mytime+= " days "; else mytime+= " day "; } if (sec >= 3600L) { tmp=sec/3600L; sec-=3600L*tmp; mytime += IntToStr(tmp); if (tmp > 1) mytime+= " hours "; else mytime+= " hour "; } if (sec >= 60) { tmp=sec/60; sec-=60*tmp; mytime += IntToStr(tmp); mytime+= " min "; } mytime += IntToStr(sec); mytime+= " sec "; st29->Text = mytime ; return true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button11Click(TObject *Sender) { if (IsConnect) { if (GetVariables()) StatusLine->SimpleText = ""; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button10Click(TObject *Sender) { if (IsConnect) { if (GetProcess()) StatusLine->SimpleText = ""; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button6Click(TObject *Sender) { if (IsConnect) { if (mysql_refresh(MySQL,REFRESH_HOSTS)) StatusLine->SimpleText = ""; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button7Click(TObject *Sender) { if (IsConnect) { if (mysql_refresh(MySQL,REFRESH_LOG)) StatusLine->SimpleText = ""; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button8Click(TObject *Sender) { if (IsConnect) { if (mysql_refresh(MySQL,REFRESH_TABLES)) StatusLine->SimpleText = ""; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Memo1->Enabled = true; Memo1->Lines->Clear(); AnsiString asFileName = FileSearch("my.ini", TheWinDir()); if (asFileName.IsEmpty()) Application->MessageBox("Don't found my.ini file on the Win Directory", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); else FillMyIni(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { TIniFile *pIniFile = new TIniFile(TheWinDir() + "\\my.ini"); if (!Memo1->GetTextLen()) Application->MessageBox("The Memo Box is Empty", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); else { if(Application->MessageBox("Are you sure to write the modifications into My.ini file.", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { Memo1->Lines->SaveToFile(TheWinDir() + "\\my.ini"); Memo1->Lines->Clear(); Memo1->Enabled = true; Memo1->Lines->Clear(); if (NtVer->Checked) pIniFile->WriteString("WinMySQLadmin","Server",TheDir() + "/bin/mysqld-nt.exe"); if (MysqldVer->Checked == true) pIniFile->WriteString("WinMySQLadmin","Server", TheDir() + "/bin/mysqld.exe"); if (ShareVer->Checked) pIniFile->WriteString("WinMySQLadmin","Server",TheDir() + "/bin/mysqld-shareware.exe"); if (OptVer->Checked) pIniFile->WriteString("WinMySQLadmin","Server", TheDir() + "/bin/mysqld-opt.exe"); FillMyIni(); Application->MessageBox("My.ini was modificated", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); } } delete pIniFile; Memo1->Lines->Clear(); FillMyIni(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if(CreatingShortCut()) Application->MessageBox("The ShortCut on Start Menu was created", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); else Application->MessageBox("Fails the Operation of Create the ShortCut", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton2Click(TObject *Sender) { BROWSEINFO info; char szDir[MAX_PATH]; char szDisplayName[MAX_PATH]; LPITEMIDLIST pidl; LPMALLOC pShellMalloc; if(SHGetMalloc(&pShellMalloc) == NO_ERROR) { memset(&info, 0x00,sizeof(info)); info.hwndOwner = Handle; info.pidlRoot = 0; info.pszDisplayName = szDisplayName; info.lpszTitle = "Search MySQL Base Directory"; info.ulFlags = BIF_RETURNONLYFSDIRS; info.lpfn = 0; pidl = SHBrowseForFolder(&info); if(pidl) { if(SHGetPathFromIDList(pidl, szDir)) {BaseDir->Text = szDir; } pShellMalloc->Free(pidl); } pShellMalloc->Release(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { if (IsConnect) { Memo3->Lines->Add(mysql_stat(MySQL)); } } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton3Click(TObject *Sender) { if(Showme1->Caption == "Show me") { TrayMessage(NIM_DELETE); Showme1->Caption = "Hide me"; Show(); } else { TrayMessage(NIM_ADD); TrayMessage(NIM_MODIFY); Showme1->Caption = "Show me"; Hide(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::ExtendedClick(TObject *Sender) { if (ya) { Extended->Caption = "Start Extended Server Status"; ya = false; ClearBox(); } else { Extended->Caption = "Stop Extended Server Status"; ya = true; } } //--------------------------------------------------------------------------- void __fastcall TForm1::GetServerOptions(void) { AnsiString FileName; FileName = FileSearch("mysqld-opt.exe", ExtractFilePath(Application->ExeName)); if (FileName.IsEmpty()) {OptVer->Enabled = false; } FileName = FileSearch("mysqld-shareware.exe", ExtractFilePath(Application->ExeName)); if (FileName.IsEmpty()) {ShareVer->Enabled = false; } FileName = FileSearch("mysqld.exe", ExtractFilePath(Application->ExeName)); if (FileName.IsEmpty()) {MysqldVer->Enabled = false; } FileName = FileSearch("mysqld-nt.exe", ExtractFilePath(Application->ExeName)); if (FileName.IsEmpty()) {NtVer->Enabled = false; } } //--------------------------------------------------------------------------- void __fastcall TForm1::GetReportServer(void) { AnsiString strspace; Memo5->Lines->Clear(); Memo5->Lines->Add("This Report was made using the WinMySQLadmin 1.0 Tool"); Memo5->Lines->Add(""); Memo5->Lines->Add(Now()); Memo5->Lines->Add(""); preport = true; Memo5->Lines->Add(""); Memo5->Lines->Add("Server Status Values"); Memo5->Lines->Add(""); Memo5->Lines->Add(GetString("Server Info") + mysql_get_server_info(MySQL)); Memo5->Lines->Add(GetString("Host Info") + mysql_get_host_info(MySQL)); Memo5->Lines->Add(GetString("Client Info") + mysql_get_client_info()); Memo5->Lines->Add(GetString("Proto Info") + mysql_get_proto_info(MySQL)); GetExtendedStatus(); preport = false; treport = true; Memo5->Lines->Add(""); Memo5->Lines->Add("Variables Values"); Memo5->Lines->Add(""); GetVariables(); treport = false; ereport = true; Memo5->Lines->Add(""); Memo5->Lines->Add("Last Lines from Err File"); Memo5->Lines->Add(""); SeekErrFile(); ereport = false; } void __fastcall TForm1::SpeedButton4Click(TObject *Sender) { if(IsConnect) GetReportServer(); else Application->MessageBox("The Server must be connected", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton5Click(TObject *Sender) { AnsiString PathName; SaveFileDialog->FileName = PathName; if (SaveFileDialog->Execute() ){ PathName= SaveFileDialog->FileName; Caption = ExtractFileName(PathName); Memo5->Lines->SaveToFile(PathName); Memo5->Modified = false; } } //--------------------------------------------------------------------------- String __fastcall TForm1::GetString(String k) { int i = 35 - k.Length(); for (int y = 1 ; y <= i ;y++ ) k+= " "; return k ; } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton6Click(TObject *Sender) { PrinterSetupDialog1->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton7Click(TObject *Sender) { AnsiString PathName; if (PrintDialog1->Execute()){ try { Memo5->Print(PathName); } catch(...){ Printer()->EndDoc(); throw; } } } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton8Click(TObject *Sender) { Memo5->CutToClipboard(); } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton9Click(TObject *Sender) { Memo5->CopyToClipboard(); } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton10Click(TObject *Sender) { Memo5->PasteFromClipboard(); } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton11Click(TObject *Sender) { Memo5->ClearSelection(); } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton12Click(TObject *Sender) { Memo5->SelectAll(); } //--------------------------------------------------------------------------- bool __fastcall TForm1::GetMainRoot() { MYSQL_RES *res; MYSQL_ROW row; unsigned int i; AnsiString command; CleanGrid(); CleanGridI(); TakeIP(); MySQLNode = DBView->Items->Add(NULL, mainroot.UpperCase()); MySQLNode->ImageIndex = 0; if (!(res=mysql_list_dbs(MySQL,"%"))) { return false; } while ((row=mysql_fetch_row(res)) != 0) { mysql_field_seek(res,0); for (i=0 ; i < mysql_num_fields(res); i++) { MySQLDbs = DBView->Items->AddChild(MySQLNode, row[i]); MySQLDbs->ImageIndex = 1; MySQLDbs->SelectedIndex = 1; } } mysql_free_result(res); MySQLNode->Expanded = true; IsMySQLNode = true; return true; } //--------------------------------------------------------------------------- void __fastcall TForm1::DeleteDatabaseSClick(TObject *Sender) { AnsiString alert; if (IsConnect) { if(DBView->Selected == MySQLNode ) Application->MessageBox("Invalid database row selected.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); else if ( DBView->Selected == NULL ) Application->MessageBox("Invalid database row selected.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); else { if (DBView->Selected->Text.UpperCase() == "MYSQL") Application->MessageBox("You cann't use this tool to drop the MySQL Database.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); else { alert = "Are you sure to drop the < "; alert+= DBView->Selected->Text.c_str(); alert+= " > database."; if(Application->MessageBox(alert.c_str(), "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { char* lese = DBView->Selected->Text.c_str(); if (!mysql_drop_db(MySQL, lese )) { DBView->Items->Clear(); GetMainRoot(); } else Application->MessageBox("Fails to drop the Database.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } } } } else Application->MessageBox("The Server must be connected", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } //--------------------------------------------------------------------------- bool __fastcall TForm1::IsDatabase(String Name) { MYSQL_RES *res; MYSQL_ROW row; unsigned int i; AnsiString command; CleanTree(); command = "use "; command+= Name.c_str(); char* das = command.c_str(); char* lis = Name.c_str(); if (mysql_query(MySQL, das ) || !(res=mysql_list_tables(MySQL,"%"))) return false; MySQLNodeT = TableView->Items->Add(NULL, lis); MySQLNodeT->ImageIndex = 1; MySQLNodeT->SelectedIndex = 1; while ((row=mysql_fetch_row(res)) != 0) { mysql_field_seek(res,0); for (i=0 ; i < mysql_num_fields(res); i++) { MySQLTbs = TableView->Items->AddChild(MySQLNodeT, row[i]); MySQLTbs->ImageIndex = 2; MySQLTbs->SelectedIndex = 2; } MySQLNodeT->Expanded = true; } mysql_free_result(res); return true; } //--------------------------------------------------------------------------- void __fastcall TForm1::DBViewClick(TObject *Sender) { if (IsConnect) { if (DBView->Selected != MySQLNode && DBView->Selected != NULL ) { IsDatabase(DBView->Selected->Text); } else { CleanTree(); } } } //--------------------------------------------------------------------------- void __fastcall TForm1::TableViewClick(TObject *Sender) { if (IsConnect) { if (DBView->Selected != MySQLNodeT ) { IsTable(TableView->Selected->Text); IsIndex(TableView->Selected->Text); } else { CleanGrid(); CleanGridI(); } } } //--------------------------------------------------------------------------- bool __fastcall TForm1::IsTable(String Name) { MYSQL_RES *res; MYSQL_ROW row; unsigned int i; int k = 0; int therow = 1; new_line=1; AnsiString command; AnsiString commandt; CleanGrid(); CleanGridI(); command = "use "; command+= DBView->Selected->Text.c_str(); char* las = command.c_str(); commandt = "desc "; commandt+= Name.c_str(); char* les = commandt.c_str(); if (mysql_query(MySQL, las )) return false; if (mysql_query(MySQL, les ) || !(res=mysql_store_result(MySQL))) return false ; StringGrid4->Cells[0][0] = "Field"; StringGrid4->Cells[1][0] = "Type"; StringGrid4->Cells[2][0] = "Null"; StringGrid4->Cells[3][0] = "Key"; StringGrid4->Cells[4][0] = "Default"; StringGrid4->Cells[5][0] = "Extra"; StringGrid4->Cells[6][0] = "Previleges"; int thecounter; String u = GetNumberServer(); if ( u == "3.22") { StringGrid3->ColCount = 7; thecounter = 4; } else thecounter = 5; while ((row=mysql_fetch_row(res)) != 0) { mysql_field_seek(res,0); for (i=0 ; i < mysql_num_fields(res); i++) { if (k <= thecounter ) { StringGrid4->Cells[k][therow] = row[i]; k++; } else { StringGrid4->Cells[(k)][therow] = row[i]; k = 0; therow++ ; StringGrid4->RowCount++; } } } StringGrid4->RowCount--; mysql_free_result(res); return true; } //--------------------------------------------------------------------------- void __fastcall TForm1::TableViewChange(TObject *Sender, TTreeNode *Node) { if (IsConnect) { if (DBView->Selected != MySQLNodeT ) { IsTable(TableView->Selected->Text); IsIndex(TableView->Selected->Text); } else { CleanGrid(); CleanGridI(); } } } //--------------------------------------------------------------------------- void __fastcall TForm1::DBViewChange(TObject *Sender, TTreeNode *Node) { if (IsConnect) { if (DBView->Selected != MySQLNode ) { IsDatabase(DBView->Selected->Text); } else { CleanTree(); } } } //--------------------------------------------------------------------------- void __fastcall TForm1::RefreshSClick(TObject *Sender) { MYSQL_RES *res; MYSQL_ROW row; unsigned int i; AnsiString command; if (IsConnect) { IsMySQLNode = false; CleanTree(); DBView->Items->Clear(); TakeIP(); MySQLNode = DBView->Items->Add(NULL, mainroot.UpperCase()); MySQLNode->ImageIndex = 0; if (!(res=mysql_list_dbs(MySQL,"%"))) { /*do nothing;*/ } while ((row=mysql_fetch_row(res)) != 0) { mysql_field_seek(res,0); for (i=0 ; i < mysql_num_fields(res); i++) { MySQLDbs = DBView->Items->AddChild(MySQLNode, row[i]); MySQLDbs->ImageIndex = 1; MySQLDbs->SelectedIndex = 1; } } mysql_free_result(res); IsMySQLNode = true; MySQLNode->Expanded = true; } } //--------------------------------------------------------------------------- void __fastcall TForm1::CreateDatabaseSClick(TObject *Sender) { if (IsConnect) { dbfrm->Show(); } else ShowMessage("Precisa estar conectado"); } //--------------------------------------------------------------------------- void __fastcall TForm1::CleanTree(void) { StringGrid4->RowCount= 2; StringGrid4->Cells[0][1] = ""; StringGrid4->Cells[1][1] = ""; StringGrid4->Cells[2][1] = ""; StringGrid4->Cells[3][1] = ""; StringGrid4->Cells[4][1] = ""; StringGrid4->Cells[5][1] = ""; TableView->Items->Clear(); } //--------------------------------------------------------------------------- void __fastcall TForm1::CleanGrid(void) { StringGrid4->RowCount= 2; StringGrid4->Cells[0][1] = ""; StringGrid4->Cells[1][1] = ""; StringGrid4->Cells[2][1] = ""; StringGrid4->Cells[3][1] = ""; StringGrid4->Cells[4][1] = ""; StringGrid4->Cells[5][1] = ""; } //--------------------------------------------------------------------------- bool __fastcall TForm1::CreatingDB() { if (mysql_create_db(MySQL, dbfrm->Edit1->Text.c_str())) return true; else return false; } //--------------------------------------------------------------------------- void __fastcall TForm1::OutRefresh(void) { RefreshSClick(dbfrm->SpeedButton1); } //--------------------------------------------------------------------------- void __fastcall TForm1::FlushHosts1Click(TObject *Sender) { if (IsConnect) { if (mysql_refresh(MySQL,REFRESH_HOSTS)) StatusLine->SimpleText = ""; } } //--------------------------------------------------------------------------- void __fastcall TForm1::FlushLogs1Click(TObject *Sender) { if (IsConnect) { if (mysql_refresh(MySQL,REFRESH_LOG)) StatusLine->SimpleText = ""; } } //--------------------------------------------------------------------------- void __fastcall TForm1::FlushTables1Click(TObject *Sender) { if (IsConnect) { if (mysql_refresh(MySQL,REFRESH_TABLES)) StatusLine->SimpleText = ""; } } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- bool __fastcall TForm1::IsIndex(String Name) { MYSQL_RES *res; MYSQL_ROW row; unsigned int i; int k = 0; int therow = 1; new_line=1; AnsiString command; AnsiString commandt; i = 0; CleanGridI(); command = "use "; command+= DBView->Selected->Text.c_str(); char* las = command.c_str(); commandt = "show index from "; commandt+= Name.c_str(); char* les = commandt.c_str(); if (mysql_query(MySQL, las )) return false; if (mysql_query(MySQL, les ) || !(res=mysql_store_result(MySQL))) return false ; StringGrid3->RowCount= 2; StringGrid3->Cells[0][0] = "Table"; StringGrid3->Cells[1][0] = "Non_unique"; StringGrid3->Cells[2][0] = "Key_name"; StringGrid3->Cells[3][0] = "Seq_in_index"; StringGrid3->Cells[4][0] = "Col_name"; StringGrid3->Cells[5][0] = "Collation"; StringGrid3->Cells[6][0] = "Card."; StringGrid3->Cells[7][0] = "Sub_part"; StringGrid3->Cells[8][0] = "Packed"; StringGrid3->Cells[9][0] = "Comment"; int thecounter; String u = GetNumberServer(); if ( u == "3.22") { StringGrid3->ColCount = 8; thecounter = 6; } else thecounter = 8; while ((row=mysql_fetch_row(res)) != 0) { mysql_field_seek(res,0); for (i=0 ; i < mysql_num_fields(res); i++) { if (k <= thecounter ) { StringGrid3->Cells[k][therow] = row[i]; k++; } else { StringGrid3->Cells[(k)][therow] = row[i]; k = 0; therow++ ; StringGrid3->RowCount++; } } } if (i) StringGrid3->RowCount--; mysql_free_result(res); return true; } //--------------------------------------------------------------------------- void __fastcall TForm1::CleanGridI(void) { StringGrid3->RowCount= 2; StringGrid3->Cells[0][1] = ""; StringGrid3->Cells[1][1] = ""; StringGrid3->Cells[2][1] = ""; StringGrid3->Cells[3][1] = ""; StringGrid3->Cells[4][1] = ""; StringGrid3->Cells[5][1] = ""; StringGrid3->Cells[6][1] = ""; StringGrid3->Cells[7][1] = ""; } //--------------------------------------------------------------------------- bool __fastcall TForm1::CreatingTable(String TheTable) { if (!mysql_query(MySQL, TheTable.c_str())) return true; else return false; } //--------------------------------------------------------------------------- bool __fastcall TForm1::GetExtendedStatus() { if (!ya && !preport) return true; MYSQL_RES *res; MYSQL_ROW row; unsigned int i; int k = 1; new_line=1; bool left = true; bool open_tables = false; bool open_files = false; bool uptime = false; bool running_threads = false; bool open_streams = false; bool slow_queries = false; bool opened_tables = false; bool questions = false; AnsiString report; if (yy) StringGrid5->RowCount = 2; if (mysql_query(MySQL,"show status") || !(res=mysql_store_result(MySQL))) { return false; } while ((row=mysql_fetch_row(res)) != 0) { mysql_field_seek(res,0); StringGrid5->Cells[0][0] = "Variable Name"; StringGrid5->Cells[1][0] = "Value"; for (i=0 ; i < mysql_num_fields(res); i++) { if (left) { if (preport) report = GetString(row[i]); if ( (String) row[i] == "Open_tables") open_tables = true; else open_tables = false; if ( (String) row[i] == "Open_files") open_files = true; else open_files = false; if ((String) row[i] == "Uptime") uptime = true; else uptime = false; if ( (String) row[i] == "Opened_tables") opened_tables = true; else opened_tables = false; if ( (String) row[i] == "Threads_running" || (String) row[i] == "Running_threads") running_threads = true; else running_threads = false; if ( (String) row[i] == "Open_streams") open_streams = true; else open_streams = false; if ( (String) row[i] == "Slow_queries") slow_queries = true; else slow_queries = false; if ( (String) row[i] == "Questions") questions = true; else questions = false; if (yy) StringGrid5->Cells[0][k++] = row[i]; left = false; } else { if (preport) Memo5->Lines->Add(report + row[i]); if (open_tables) st22->Text = row[i]; if (open_files) st23->Text = row[i]; if (uptime) nice_time(row[i]); if (running_threads) st27->Text = row[i]; if (open_streams) st24->Text = row[i]; if (slow_queries) st28->Text = row[i]; if (opened_tables) st25->Text = row[i]; if (questions){ q++; st26->Text = StrToInt64(row[i]) - q; } if (yy){ StringGrid5->RowCount++; StringGrid5->Cells[1][--k] = row[i]; k++; } left = true; } } } if (rinit) StringGrid5->RowCount--; mysql_free_result(res); yy = false; return true; } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton13Click(TObject *Sender) { yy = true; // rinit = true; } //--------------------------------------------------------------------------- String __fastcall TForm1::GetNumberServer() { String TheVersion; TheVersion = mysql_get_server_info(MySQL) ; TheVersion.SetLength(4); return TheVersion; } //--------------------------------------------------------------------------- void __fastcall TForm1::KillProcess1Click(TObject *Sender) { if (IsConnect) KillPID(); else Application->MessageBox("The Server must be connected", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); } //--------------------------------------------------------------------------- bool __fastcall TForm1::KillPID() { String s = "Are you sure to kill the process PID no. "; s+= StringGrid2->Cells[0][StringGrid2->Row]; s+= " of the USER "; s+= StringGrid2->Cells[1][StringGrid2->Row]; unsigned long xx = mysql_thread_id(MySQL); unsigned long yy = StrToInt(StringGrid2->Cells[0][StringGrid2->Row]); if ( xx != yy) { if(Application->MessageBox(s.c_str(), "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) { if (!mysql_kill(MySQL,yy)) { GetProcess(); return true; } } } else { Application->MessageBox("From here you can't kill the PID of this tool", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); return true; } return true; } void __fastcall TForm1::FlushThreads1Click(TObject *Sender) { if (IsConnect) { if (mysql_refresh(MySQL,REFRESH_THREADS)) StatusLine->SimpleText = ""; } } //---------------------------------------------------------------------------