main.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:68k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "main.h"
  5. #include "initsetup.h"
  6. #include "db.h"
  7. //---------------------------------------------------------------------------
  8. #pragma package(smart_init)
  9. #pragma resource "*.dfm"
  10. #include <shellapi.h>
  11. #include <registry.hpp>
  12. #include <winsvc.h>
  13. #include <winsock.h>
  14. #include <shlobj.h>
  15. #include <IniFiles.hpp>
  16. #include <dir.h>
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <string.h>
  20. #include <deque.h>
  21. #include <vector.h>
  22. #include <fstream.h>
  23. #include <iostream.h>
  24. #include <iterator.h>
  25. #include <sstream.h>
  26. #include "mysql.h"
  27. #include <Printers.hpp>
  28. TForm1 *Form1;
  29. bool i_start, NT;
  30. bool IsForce = false;
  31. bool IsVariables = false;
  32. bool IsProcess  = false ;
  33. bool IsDatabases = false;
  34. bool new_line = 0;
  35. bool ya = true;
  36. bool yy = true;
  37. bool rinit = false;
  38. AnsiString vpath;
  39. AnsiString vip;
  40. MYSQL_RES *res_1;
  41. static unsigned long q = 0;
  42. bool preport = false;
  43. bool treport = false;
  44. bool ereport = false;
  45. AnsiString mainroot;
  46. bool IsMySQLNode = false;
  47. MYSQL *MySQL;
  48. //---------------------------------------------------------------------------
  49. __fastcall TForm1::TForm1(TComponent* Owner)
  50.         : TForm(Owner)
  51. {
  52. }
  53. //---------------------------------------------------------------------------
  54. void __fastcall TForm1::FormCreate(TObject *Sender)
  55. {
  56.   i_start = true;
  57.   IsConnect = false;
  58.  if (ParamCount() > 0){
  59.    if (ParamStr(1) == "-h" || ParamStr(1) == "h" ) {
  60.      ShowHelp();  Application->Terminate();  }
  61.    else if (ParamStr(1) == "-w" || ParamStr(1) == "w") {
  62.      i_start = false;  ContinueLoad();   }
  63.   }
  64.  else {
  65.    ContinueLoad();  Hide(); GetServerOptions(); }
  66. }
  67. //---------------------------------------------------------------------------
  68. void __fastcall TForm1::DrawItem(TMessage& Msg)
  69. {
  70.    IconDrawItem((LPDRAWITEMSTRUCT)Msg.LParam);
  71.    TForm::Dispatch(&Msg);
  72. }
  73. //---------------------------------------------------------------------------
  74. void __fastcall TForm1::MyNotify(TMessage& Msg)
  75. {
  76.  POINT MousePos;
  77.  switch(Msg.LParam) {
  78.   case WM_RBUTTONUP:
  79.     if (GetCursorPos(&MousePos)){
  80.        PopupMenu1->PopupComponent = Form1; SetForegroundWindow(Handle);
  81.        PopupMenu1->Popup(MousePos.x, MousePos.y);}
  82.     else  Show();
  83.     break;
  84.   case WM_LBUTTONUP:
  85.     if (GetCursorPos(&MousePos)){
  86.        PopupMenu1->PopupComponent = Form1; SetForegroundWindow(Handle);
  87.        PopupMenu1->Popup(MousePos.x, MousePos.y); }
  88.     ToggleState();
  89.      break;
  90.   default:
  91.      break; }
  92.  TForm::Dispatch(&Msg);
  93. }
  94. //---------------------------------------------------------------------------
  95. bool __fastcall TForm1::TrayMessage(DWORD dwMessage)
  96. {
  97.  NOTIFYICONDATA tnd;
  98.  PSTR pszTip;
  99.  pszTip = TipText();
  100.  tnd.cbSize          = sizeof(NOTIFYICONDATA);
  101.  tnd.hWnd            = Handle;
  102.  tnd.uID             = IDC_MYICON;
  103.  tnd.uFlags          = NIF_MESSAGE | NIF_ICON | NIF_TIP;
  104.  tnd.uCallbackMessage = MYWM_NOTIFY;
  105.  if (dwMessage == NIM_MODIFY){
  106.    tnd.hIcon = IconHandle();
  107.    if (pszTip)lstrcpyn(tnd.szTip, pszTip, sizeof(tnd.szTip));
  108.    else tnd.szTip[0] = ''; }
  109.  else { tnd.hIcon = NULL; tnd.szTip[0] = ''; }
  110.  return (Shell_NotifyIcon(dwMessage, &tnd));
  111. }
  112. //---------------------------------------------------------------------------
  113. HANDLE __fastcall TForm1::IconHandle(void)
  114. {
  115.  if (!NT){
  116.    if (MySQLSignal()){Image3->Visible = false; Image2->Visible = true;
  117.           return (Image2->Picture->Icon->Handle); }
  118.    else              {Image2->Visible = false; Image3->Visible = true;
  119.           return (Image3->Picture->Icon->Handle); }
  120.     }
  121.  else   {
  122.    if (TheServiceStatus()){Image3->Visible = false; Image2->Visible = true;
  123.           return (Image2->Picture->Icon->Handle); }
  124.    else if (MySQLSignal()){Image3->Visible = false; Image2->Visible = true;
  125.           return (Image2->Picture->Icon->Handle); }
  126.    else                   {Image2->Visible = false; Image3->Visible = true;
  127.           return (Image3->Picture->Icon->Handle); }
  128.     }
  129. }
  130. //---------------------------------------------------------------------------
  131. void __fastcall TForm1::ToggleState(void)
  132. {
  133.  TrayMessage(NIM_MODIFY);
  134.  if (!NT){
  135.    if (MySQLSignal()){SSW9->Caption = "ShutDown the Server";
  136.                      Image3->Visible = false; Image2->Visible = true; }
  137.    else              {SSW9->Caption = "Start the Server";
  138.                      Image2->Visible = false; Image3->Visible = true; }
  139.          }
  140.  else    {
  141.    if (TheServiceStart()) {
  142.       Standa->Enabled = false;
  143.       if (TheServiceStatus()) {RService->Enabled = false;
  144.                      StopS->Enabled = true;
  145.                      StopS->Caption = "Stop the Service";
  146.                      Image3->Visible = false;
  147.                      Image2->Visible = true; }
  148.       else                    {RService->Enabled = true;
  149.                      StopS->Enabled = true;
  150.                      RService->Caption = "Remove the Service";
  151.                      StopS->Caption = "Start the Service";
  152.                      Image2->Visible = false;
  153.                      Image3->Visible = true; }
  154.                           }
  155.     else                  {
  156.        Standa->Enabled = true;
  157.        StopS->Enabled = false;
  158.        if (MySQLSignal()) {
  159.                      RService->Enabled = false;
  160.                      Standa->Caption = "ShutDown the Server Standalone";
  161.                      Image3->Visible = false;
  162.                      Image2->Visible = true; }
  163.        else               {
  164.                      RService->Enabled = true;
  165.                      RService->Caption = "Install the Service";
  166.                      Standa->Caption = "Start the Server Standalone";
  167.                      Image2->Visible = false;
  168.                      Image3->Visible = true; }
  169.                            }
  170.           }
  171. }
  172. //---------------------------------------------------------------------------
  173. PSTR __fastcall TForm1::TipText(void)
  174. {
  175.   char* status = StatusLine->SimpleText.c_str();
  176.   return status;
  177. }
  178. //---------------------------------------------------------------------------
  179. void __fastcall TForm1::WMQueryEndSession(TWMQueryEndSession &msg)
  180. {
  181.   if (!NT) {
  182.     if (MySQLSignal()){
  183.                         StatusLine->SimpleText = "Shutdown in progress.....";
  184.                         Show(); Shutd();  msg.Result = 1; }
  185.     else              {
  186.                         StatusLine->SimpleText = "The Server already is down......";
  187.                         Show();  msg.Result = 1;  Close(); }
  188.            }
  189.   else     {
  190.     Show();
  191.     if                 (!TheServiceStart())  { if (MySQLSignal()) Shutd();   }
  192.                         msg.Result = 1;
  193.            }
  194. }
  195. //---------------------------------------------------------------------------
  196. LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi)
  197. {
  198.    HICON hIcon;
  199.    hIcon = (HICON)LoadImage(g_hinst, MAKEINTRESOURCE(lpdi->CtlID), IMAGE_ICON,
  200. 16, 16, 0);
  201.    if (!hIcon)
  202.     return(false);
  203.    DrawIconEx(lpdi->hDC, lpdi->rcItem.left, lpdi->rcItem.top, hIcon,
  204. 16, 16, 0, NULL, DI_NORMAL);
  205.    return(true);
  206. }
  207. //---------------------------------------------------------------------------
  208. AnsiString __fastcall TForm1::TheComputer()
  209. {
  210.   AnsiString theword;
  211.   DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
  212.   char szBuf[MAX_COMPUTERNAME_LENGTH + 1];
  213.   szBuf[0] = '';
  214.   GetComputerName(szBuf, &dwSize);
  215.   theword = (AnsiString) szBuf;
  216.   delete [] szBuf;
  217.   return theword;
  218. }
  219. //---------------------------------------------------------------------------
  220. AnsiString __fastcall TForm1::TheOS()
  221. {
  222.   AnsiString theword;
  223.   OSVERSIONINFO info;
  224.   info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  225.   GetVersionEx(&info);
  226.   switch (info.dwPlatformId)
  227.     {
  228.       case VER_PLATFORM_WIN32s:
  229.         NT = false;
  230.         theword = "Win32s detected";
  231.         break;
  232.       case VER_PLATFORM_WIN32_WINDOWS:
  233.         NT = false;
  234.         theword = "Win 95 or Win 98 detected";
  235.         break;
  236.       case VER_PLATFORM_WIN32_NT:
  237.         NT = true;
  238.         theword = "Windows NT detected";
  239.         break;
  240.      }
  241.      return theword;
  242. }
  243. ///---------------------------------------------------------------------------
  244. AnsiString __fastcall TForm1::TheUser()
  245. {
  246.   AnsiString theword;
  247.   DWORD dwSize = 0;
  248.   GetUserName(NULL, &dwSize);
  249.   char *szBuf = new char[dwSize];
  250.   szBuf[0] = '';
  251.   GetUserName(szBuf, &dwSize);
  252.   theword = (AnsiString) szBuf;
  253.   delete [] szBuf;
  254.   return theword;
  255. }
  256. //---------------------------------------------------------------------------
  257. void __fastcall TForm1::TakeIP(void)
  258. {
  259.   WORD wVersionRequested;
  260.   WSADATA WSAData;
  261.   wVersionRequested = MAKEWORD(1,1);
  262.   WSAStartup(wVersionRequested,&WSAData);
  263.   hostent *P;
  264.   char s[128];
  265.   in_addr in;
  266.   char *P2;
  267.   gethostname(s, 128);
  268.   P = gethostbyname(s);
  269.   Memo2->Lines->Clear();
  270.   Memo2->Lines->Add((AnsiString)P->h_name);
  271.   mainroot = P->h_name;
  272.   in.S_un.S_un_b.s_b1 = P->h_addr_list[0][0];
  273.   in.S_un.S_un_b.s_b2 = P->h_addr_list[0][1];
  274.   in.S_un.S_un_b.s_b3 = P->h_addr_list[0][2];
  275.   in.S_un.S_un_b.s_b4 = P->h_addr_list[0][3];
  276.   P2 = inet_ntoa(in);
  277.   vip = P2;
  278.   mainroot += " ( " + (AnsiString)P2 + " )";
  279.   Memo2->Lines->Add(P2);
  280. }
  281. //---------------------------------------------------------------------------
  282. void __fastcall TForm1::GetmemStatus(void)
  283. {
  284.   MEMORYSTATUS ms;
  285.   ms.dwLength = sizeof(MEMORYSTATUS);
  286.   GlobalMemoryStatus(&ms);
  287.   Edit2->Text = AnsiString((double)ms.dwTotalPhys / 1024000.0) + " MB RAM";
  288. }
  289. //---------------------------------------------------------------------------
  290. void __fastcall TForm1::ShowHelp(void)
  291. {
  292.    Application->MessageBox("Usage: WinMySQLadmin.EXE [OPTIONS]nn-w    Run the tool without start the Server.n-h        Shows this message and exit ", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
  293. }
  294. //---------------------------------------------------------------------------
  295. void __fastcall TForm1::ContinueLoad(void)
  296. {
  297.  OS->Text = TheOS();
  298.  Localhost->Text = TheComputer();
  299.  Localuser->Text = TheUser();
  300.  GetmemStatus();
  301.  ClearBox();
  302.  TakeIP();
  303.  MyODBC();
  304.  IsMyIniUp();
  305.  if (!NT) { WinNT->Enabled = false; NtVer->Enabled = false; Win9->Enabled  = true; }
  306.  else     { WinNT->Enabled = true;   Win9->Enabled  = false;   }
  307.  if (i_start)
  308.    {
  309.      // NT never is started from the prompt
  310.      if ((!NT) && (!MySQLSignal())) mysqldstart();
  311.       {
  312.        TrayMessage(NIM_MODIFY);
  313.        SeekErrFile();
  314.       }
  315.    }
  316.   Hide();
  317. }
  318. //---------------------------------------------------------------------------
  319. void __fastcall TForm1::MyODBC(void)
  320. {
  321.   TRegistry *Registry = new TRegistry();
  322.   Memo3->Lines->Clear();
  323.   try
  324.    {
  325.      Registry->RootKey = HKEY_LOCAL_MACHINE;
  326.      // the basic data of myodbc
  327.      if (Registry->OpenKey("Software\ODBC\ODBCINST.INI\MySQL", false))
  328.        {
  329.          Memo3->Lines->Add("Driver Versiont" + Registry->ReadString("DriverODBCVer"));
  330.          Memo3->Lines->Add("Drivertt" + Registry->ReadString("Driver"));
  331.          Memo3->Lines->Add("API Leveltt" + Registry->ReadString("APILevel"));
  332.          Memo3->Lines->Add("Setuptt" + Registry->ReadString("Setup"));
  333.          Memo3->Lines->Add("SQL Levelt" + Registry->ReadString("SQLLevel"));
  334.        }
  335.       else
  336.          Memo3->Lines->Add("Not Found");
  337.    }
  338.   catch (...)
  339.    {
  340.     delete Registry;
  341.    }
  342.    Memo3->Enabled = false;
  343. }
  344. //---------------------------------------------------------------------------
  345. void __fastcall TForm1::IsMyIniUp(void)
  346. {
  347.   // we see if the my.ini is Up
  348.  AnsiString asFileName = FileSearch("my.ini", TheWinDir());
  349.  if (asFileName.IsEmpty())
  350.    {
  351.      IsForce = true;
  352.      i_start = false;
  353.      QuickSearch();
  354.    }
  355.  else
  356.    {
  357.      Memo1->Enabled = true;
  358.      Memo1->Lines->Clear();
  359.      FillMyIni();
  360.      GetBaseDir();
  361.    }
  362. }
  363. //---------------------------------------------------------------------------
  364. void __fastcall TForm1::QuickSearch(void)
  365. {
  366.  AnsiString asFileName = FileSearch("mysql.exe", "c:/mysql/bin");
  367.  if (!asFileName.IsEmpty())
  368.   BaseDir->Text = "c:/mysql";
  369. }
  370. //---------------------------------------------------------------------------
  371. AnsiString __fastcall TForm1::TheWinDir()
  372. {
  373.   AnsiString WinDir;
  374.   UINT       BufferSize = GetWindowsDirectory(NULL,0);
  375.   WinDir.SetLength(BufferSize+1);
  376.   GetWindowsDirectory(WinDir.c_str(),BufferSize);
  377.   char* dirw = WinDir.c_str();
  378.   return dirw ;
  379. }
  380. //---------------------------------------------------------------------------
  381. void __fastcall TForm1::FillMyIni(void)
  382. {
  383.  Memo1->Lines->LoadFromFile(TheWinDir() + "\my.ini");
  384. }
  385. //---------------------------------------------------------------------------
  386. void __fastcall TForm1::GetBaseDir(void)
  387. {
  388.  char drive[_MAX_DRIVE];
  389.  char dir[_MAX_DIR];
  390.  char file[_MAX_FNAME];
  391.  char ext[_MAX_EXT];
  392.  TIniFile *pIniFile = new
  393.  TIniFile(TheWinDir() + "\my.ini");
  394.  BaseDir->Text = pIniFile->ReadString("mysqld","basedir","")  ;
  395.  AnsiString lx = pIniFile->ReadString("WinMySQLadmin","Server","")  ;
  396.  _splitpath((lx).c_str(),drive,dir,file,ext);
  397.  AnsiString lw = (AnsiString) file + ext;
  398.  if ( lw == "mysqld-shareware.exe") {ShareVer->Checked = true;}
  399.  if ( lw == "mysqld.exe") {MysqldVer->Checked = true;}
  400.  if ( lw == "mysqld-opt.exe") {OptVer->Checked = true;}
  401.  if ( lw == "mysqld-nt.exe") {NtVer->Checked = true;}
  402.  delete pIniFile;
  403. }
  404. //---------------------------------------------------------------------------
  405. void __fastcall TForm1::Showme1Click(TObject *Sender)
  406. {
  407.  if(Showme1->Caption == "Show me")  {  TrayMessage(NIM_DELETE);
  408.        Showme1->Caption = "Hide me";  Show();  }
  409.   else  { TrayMessage(NIM_ADD);  TrayMessage(NIM_MODIFY);
  410.        Showme1->Caption = "Show me";  Hide();  }
  411. }
  412. //---------------------------------------------------------------------------
  413. bool __fastcall TForm1::MySQLSignal()
  414. {
  415.   HANDLE hEventShutdown;
  416.   hEventShutdown=OpenEvent(EVENT_MODIFY_STATE, 0, "MySqlShutdown");
  417.   if(hEventShutdown)
  418.     {
  419.       CloseHandle(hEventShutdown);
  420.       return true;
  421.     }
  422.   else
  423.     {
  424.      CloseHandle(hEventShutdown);
  425.      return false;
  426.     }
  427. }
  428. //---------------------------------------------------------------------------
  429. bool __fastcall TForm1::mysqldstart()
  430. {
  431.     memset(&pi, 0, sizeof(pi));
  432.     memset(&si, 0, sizeof(si));
  433.     si.cb = sizeof(si);
  434.     si.dwFlags |= STARTF_USESHOWWINDOW;
  435.     si.wShowWindow |= SW_SHOWNORMAL;
  436.     TIniFile *pIniFile = new
  437.     TIniFile(TheWinDir() + "\my.ini");
  438.     if (NT)
  439.      vpath =   pIniFile->ReadString("WinMySQLadmin","Server","") + " --standalone" ;
  440.     else
  441.       vpath =   pIniFile->ReadString("WinMySQLadmin","Server","") + "" ;
  442.     if ( ! CreateProcess(0,vpath.c_str(), 0, 0, 0, 0, 0, 0, &si,&pi))
  443.      {
  444.        TrayMessage(NIM_MODIFY);
  445.        return false;
  446.      }
  447.     else
  448.       {
  449.         TrayMessage(NIM_MODIFY);
  450.         return true;
  451.       }
  452. }
  453. //---------------------------------------------------------------------------
  454. bool __fastcall TForm1::SeekErrFile()
  455. {
  456.   Memo4->Enabled = true;
  457.   Memo4->Lines->Clear();
  458.   AnsiString asFileName = FileSearch("mysql.err", BaseDir->Text + "/data");
  459.   if (!asFileName.IsEmpty())
  460.    {
  461.      FName = BaseDir->Text + "/data/mysql.err";
  462.      ifstream in((FName).c_str());
  463.      in.seekg(0, ios::end);
  464.      string s, line;
  465.      deque<string> v;
  466.      deque<string> lines;
  467.      streampos sp = in.tellg();
  468.      if (sp <= 1000)
  469.       in.seekg(0, ios::beg);
  470.     else
  471.      {
  472.       in.seekg(0, ios::beg);
  473.       in.seekg((sp - 1000));
  474.      }
  475.      do {
  476.           lines.push_back(line);
  477.      }while (getline(in, line));
  478.      if( lines.size() <= 15)
  479.       {
  480.         deque<string>::reverse_iterator r;
  481.         for(r = lines.rbegin(); r != lines.rend() ; r++)
  482.          {
  483.           if (ereport)
  484.            Memo5->Lines->Add((*r).c_str());
  485.            Memo4->Lines->Add((*r).c_str());
  486.          }
  487.       }
  488.      else
  489.       {
  490.         int k = 0;
  491.         deque<string>::reverse_iterator r;
  492.         for(r = lines.rbegin(); r != lines.rend(); r++)
  493.          {
  494.            if (ereport)
  495.            Memo5->Lines->Add((*r).c_str());
  496.            Memo4->Lines->Add((*r).c_str());
  497.            if (++k >= 15) { break;}
  498.          }
  499.       }
  500.       in.close();
  501.       return true;
  502.    }
  503.   else
  504.     return false;
  505. }
  506. //---------------------------------------------------------------------------
  507. void __fastcall TForm1::Timer1Timer(TObject *Sender)
  508. {
  509.  Showme1->Caption = "Show me";
  510.   TrayMessage(NIM_ADD);
  511.   TrayMessage(NIM_MODIFY);
  512.   Hide();
  513.   if (IsForce) {Form2->Show();}
  514.   Timer1->Enabled = false;
  515. }
  516. //---------------------------------------------------------------------------
  517. void __fastcall TForm1::GetServerFile()
  518. {
  519.   AnsiString FileName;
  520.  if(!NT) {
  521.    FileName =  FileSearch("mysqld-opt.exe", ExtractFilePath(Application->ExeName));
  522.    if (FileName.IsEmpty())  FileName =  FileSearch("mysqld.exe", ExtractFilePath(Application->ExeName));
  523.    if (FileName.IsEmpty())    FileName =  FileSearch("mysqld-shareware.exe", ExtractFilePath(Application->ExeName));
  524.    if (!FileName.IsEmpty()){
  525.       if ( FileName == "mysqld-opt.exe") {OptVer->Checked = true;}
  526.       if ( FileName == "mysqld.exe") {MysqldVer->Checked= true;}
  527.       if ( FileName == "mysqld-shareware.exe") {ShareVer->Checked= true;} }
  528.   }
  529.  else {
  530.    FileName =  FileSearch("mysqld-nt.exe", ExtractFilePath(Application->ExeName));
  531.    if (FileName.IsEmpty())  FileName =  FileSearch("mysqld.exe", ExtractFilePath(Application->ExeName));
  532.    if (FileName.IsEmpty())  FileName =  FileSearch("mysqld-shareware.exe", ExtractFilePath(Application->ExeName));
  533.    if (!FileName.IsEmpty()) {
  534.       if ( FileName == "mysqld-nt.exe") {NtVer->Checked = true;}
  535.       if ( FileName == "mysqld.exe") {MysqldVer->Checked= true;}
  536.       if ( FileName == "mysqld-shareware.exe") {ShareVer->Checked= true;} }
  537.      }
  538. }
  539. //---------------------------------------------------------------------------
  540. void __fastcall TForm1::CreateMyIniFile(void)
  541. {
  542.   char szFileName[6];
  543.   int iFileHandle;
  544.   AnsiString jk;
  545.   Memo1->Enabled = true;
  546.   Memo1->Lines->Clear();
  547.   strcpy(szFileName,"\my.ini");
  548.   iFileHandle = FileCreate(TheWinDir() + szFileName );
  549.   jk = "#This File was made using the WinMySQLadmin 1.0 Tooln" ;
  550.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  551.   jk = "#" + Now() + "nn" ;
  552.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  553.   jk = "#Uncomment or Add only the keys that you know how works.n" ;
  554.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  555.   jk = "#Read the MySQL Manual for instructionsnn" ;
  556.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  557.   jk = "[mysqld]nn" ;
  558.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  559.    jk = "basedir=" + TheDir() + "n";
  560.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  561.     jk = "#bind-address=" + vip + "n" ;
  562.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  563.     jk = "#datadir=" + TheDir() + "/datan" ;
  564.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  565.     jk = "#language=" + TheDir() + "/share/your language directoryn" ;
  566.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  567.     jk = "#delay-key-write-for-all-tablesn" ;
  568.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  569.     jk = "#log-long-formatn" ;
  570.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  571.     jk = "#slow query log=#n" ;
  572.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  573.     jk = "#tmpdir=#n" ;
  574.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  575.     jk = "#ansin" ;
  576.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  577.     jk = "#newn" ;
  578.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  579.     jk = "#port=3306n" ;
  580.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  581.     jk = "#safen" ;
  582.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  583.     jk = "#skip-name-resolven" ;
  584.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  585.     jk = "#skip-networkingn" ;
  586.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  587.     jk = "#skip-newn" ;
  588.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  589.     jk = "#skip-host-cachen" ;
  590.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  591.     jk = "#set-variable = key_buffer=16Mn" ;
  592.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  593.     jk = "#set-variable = max_allowed_packet=1Mn" ;
  594.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  595.     jk = "#set-variable = thread_stack=128Kn" ;
  596.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  597.     jk = "#set-variable = flush_time=1800nn" ;
  598.     FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  599.   jk = "[mysqldump]nn" ;
  600.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  601.   jk = "#quickn" ;
  602.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  603.   jk = "#set-variable = max_allowed_packet=16Mnn" ;
  604.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  605.   jk = "[mysql]nn" ;
  606.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  607.   jk = "#no-auto-rehashnn" ;
  608.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  609.   jk = "[isamchk]nn" ;
  610.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  611.   jk = "#set-variable= key=16Mnn" ;
  612.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  613.   jk = "[WinMySQLadmin]nn" ;
  614.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  615.   if (ShareVer->Checked) { jk = "Server=" + TheDir() + "/bin/mysqld-shareware.exenn";}
  616.   if (MysqldVer->Checked) {jk = "Server=" + TheDir() + "/bin/mysqld.exenn";}
  617.   if (OptVer->Checked) {jk = "Server=" + TheDir() + "/bin/mysqld-opt.exenn";}
  618.   if (NtVer->Checked) {jk = "Server=" + TheDir() + "/bin/mysqld-nt.exenn";}
  619.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  620.   jk = "user=" + Form2->Edit1->Text + "n" ;
  621.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  622.   jk = "password=" + Form2->Edit2->Text + "n" ;
  623.   FileWrite(iFileHandle, (jk).c_str(), (jk).Length());
  624.   FileClose(iFileHandle);
  625.   FillMyIni();
  626. }
  627. //---------------------------------------------------------------------------
  628. bool __fastcall TForm1::CreatingShortCut()
  629. {
  630.   // Where is The Start Menu in this Machine ?
  631.   LPITEMIDLIST  pidl;
  632.   LPMALLOC      pShellMalloc;
  633.   char          szDir[MAX_PATH + 16];
  634.   AnsiString file;
  635.   AnsiString jk = "\WinMySQLadmin.lnk" ;
  636.   if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
  637.    {
  638.      if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,
  639.           CSIDL_STARTUP, &pidl)))
  640.       {
  641.         if(!SHGetPathFromIDList(pidl, szDir))
  642.           {
  643.             pShellMalloc->Release();
  644.             pShellMalloc->Free(pidl);
  645.             return false;
  646.            }
  647.           pShellMalloc->Free(pidl);
  648.        }
  649.         pShellMalloc->Release();
  650.         StrCat(szDir, jk.c_str());
  651.     }
  652.  // the create
  653.  IShellLink* pLink;
  654.  IPersistFile* pPersistFile;
  655.  if(SUCCEEDED(CoInitialize(NULL)))
  656.    {
  657.      if(SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL,
  658.                      CLSCTX_INPROC_SERVER,
  659.                      IID_IShellLink, (void **) &pLink)))
  660.        {
  661.          pLink->SetPath((ExtractFilePath(Application->ExeName) + "WinMySQLadmin.exe").c_str());
  662.          pLink->SetDescription("WinMySQLadmin Tool");
  663.          pLink->SetShowCmd(SW_SHOW);
  664.             if(SUCCEEDED(pLink->QueryInterface(IID_IPersistFile,
  665.                                                (void **)&pPersistFile)))
  666.             {
  667.                 WideString strShortCutLocation(szDir);
  668.                 pPersistFile->Save(strShortCutLocation.c_bstr(), TRUE);
  669.                 pPersistFile->Release();
  670.             }
  671.                pLink->Release();
  672.         }
  673.         CoUninitialize();
  674.     }
  675.   return true;
  676. }
  677. //---------------------------------------------------------------------------
  678. AnsiString __fastcall TForm1::TheDir()
  679. {
  680.  AnsiString buffer;
  681.  char s[_MAX_PATH + 1];
  682.  StrCopy(s, ( BaseDir->Text).c_str()) ;
  683.  for (int i = 0; s[i] != NULL; i++)
  684.   if (s[i] != '\')
  685.     buffer += s[i];
  686.   else
  687.     buffer += "/";
  688.  return buffer;
  689. }
  690. //---------------------------------------------------------------------------
  691. void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
  692. {
  693.  Application->HelpCommand(HELP_FINDER,0);
  694. }
  695. //---------------------------------------------------------------------------
  696. void __fastcall TForm1::Timer2Timer(TObject *Sender)
  697. {
  698.  ToggleState();
  699. }
  700. //---------------------------------------------------------------------------
  701. bool __fastcall TForm1::TheServiceStart()
  702. {
  703.   bool thatok;
  704.   char *SERVICE_NAME = "MySql";
  705.   SC_HANDLE myService, scm;
  706.   scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS | GENERIC_WRITE);
  707.   if (scm)
  708.    {
  709.      myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS);
  710.      if (myService)
  711.       thatok = true;
  712.      else
  713.       thatok = false;
  714.    }
  715.    CloseServiceHandle(myService);
  716.    CloseServiceHandle(scm);
  717.    return thatok;
  718. }
  719. //---------------------------------------------------------------------------
  720. bool __fastcall TForm1::TheServicePause()
  721. {
  722.   bool thatok;
  723.   char *SERVICE_NAME = "MySql";
  724.   SC_HANDLE myService, scm;
  725.   scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS);
  726.   if (scm)
  727.     {
  728.        myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS);
  729.        if (myService)
  730.          {
  731.            // stop the service
  732.            if (IsConnect)
  733.             {
  734.                mysql_kill(MySQL,mysql_thread_id(MySQL));
  735.                StatusLine->SimpleText = "";
  736.                q = 0;
  737.             }
  738.             SERVICE_STATUS ss;
  739.             thatok = ControlService(myService,
  740.                             SERVICE_CONTROL_STOP,
  741.                             &ss);
  742.          }
  743.        else
  744.        thatok = false;
  745.     }
  746.    else
  747.       thatok = false;
  748.    CloseServiceHandle(myService);
  749.    CloseServiceHandle(scm);
  750.    return thatok;
  751. }
  752. //---------------------------------------------------------------------------
  753. bool __fastcall TForm1::TheServiceResume()
  754. {
  755.   bool thatok;
  756.   char *SERVICE_NAME = "MySql";
  757.   SC_HANDLE myService, scm;
  758.   scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS);
  759.   if (scm)
  760.     {
  761.        myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS);
  762.        if (myService)
  763.          {
  764.            // start the service
  765.             thatok = StartService(myService, 0, NULL);
  766.          }
  767.        else
  768.         thatok = false;
  769.     }
  770.    else
  771.       thatok = false;
  772.    CloseServiceHandle(myService);
  773.    CloseServiceHandle(scm);
  774.    return thatok;
  775. }
  776. //---------------------------------------------------------------------------
  777. bool __fastcall TForm1::TheServiceStatus()
  778. {
  779.   bool thatok;
  780.   bool k;
  781.   char *SERVICE_NAME = "MySql";
  782.   SC_HANDLE myService, scm;
  783.   SERVICE_STATUS ss;
  784.   DWORD dwState = 0xFFFFFFFF;
  785.   scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS);
  786.   if (scm)
  787.     {
  788.        myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS);
  789.        if (myService)
  790.          {
  791.            memset(&ss, 0, sizeof(ss));
  792.            k = QueryServiceStatus(myService,&ss);
  793.            if (k)
  794.              {
  795.                dwState = ss.dwCurrentState;
  796.                if (dwState == SERVICE_RUNNING)
  797.                  thatok = true;
  798.              }
  799.            else
  800.             thatok = false;
  801.          }
  802.        else
  803.         thatok = false;
  804.     }
  805.    else
  806.       thatok = false;
  807.    CloseServiceHandle(myService);
  808.    CloseServiceHandle(scm);
  809.    return thatok;
  810. }
  811. //---------------------------------------------------------------------------
  812. bool __fastcall TForm1::TheServiceCreate()
  813. {
  814.   bool thatok;
  815.   char *SERVICE_NAME = "MySql";
  816.   char *szFullPath = vpath.c_str();
  817.   SC_HANDLE myService, scm;
  818.   scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS);
  819.   if (scm)
  820.    {  myService = CreateService(
  821. scm,
  822. SERVICE_NAME,
  823. SERVICE_NAME,
  824. SERVICE_ALL_ACCESS,
  825. SERVICE_WIN32_OWN_PROCESS,
  826. SERVICE_AUTO_START ,
  827. SERVICE_ERROR_NORMAL,
  828. szFullPath,
  829. NULL,
  830. NULL,
  831. NULL,
  832. NULL,
  833. NULL);
  834.      if (myService)
  835.        thatok = true;
  836.      else
  837.        thatok = false;
  838.   }
  839.    CloseServiceHandle(myService);
  840.    CloseServiceHandle(scm);
  841.    return thatok;
  842. }
  843. //---------------------------------------------------------------------------
  844. void __fastcall TForm1::Swin9Click(TObject *Sender)
  845. {
  846.  if(Application->MessageBox("Shutdown this tool", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  847.   Close();
  848. }
  849. //---------------------------------------------------------------------------
  850. void __fastcall TForm1::SSW9Click(TObject *Sender)
  851. {
  852.  if (MySQLSignal())
  853.     {
  854.       if(Application->MessageBox("Shutdown the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  855.         {
  856.           if (Shutd())
  857.             {
  858.               IsConnect = false;
  859.               IsVariables = false;
  860.               IsProcess = false;
  861.               IsDatabases = false;
  862.               ya = false;
  863.               ClearBox();
  864.               Sleep(500);
  865.               TrayMessage(NIM_MODIFY);
  866.             }
  867.           else
  868.               Application->MessageBox("Fails to Shutdown the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  869.         }
  870.     }
  871.    else
  872.      {
  873.        if(Application->MessageBox("Start the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  874.         {
  875.           if (mysqldstart())
  876.             {
  877.               TrayMessage(NIM_MODIFY);
  878.               ya = true;
  879.             }
  880.            else
  881.              Application->MessageBox("Fails to Start the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  882.         }
  883.      }
  884. }
  885. //---------------------------------------------------------------------------
  886. void __fastcall TForm1::ShutDownBoth1Click(TObject *Sender)
  887. {
  888.   if (MySQLSignal())
  889.   {
  890.     if(Application->MessageBox("Shutdown the MySQL Server and this tool ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  891.      {
  892.        if (Shutd())
  893.         Close();
  894.        else
  895.          {
  896.            Application->MessageBox("Fails to Shutdown the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  897.          }
  898.      }
  899.    }
  900.  else
  901.     if(Application->MessageBox("Shutdown this tool ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  902.     Close();
  903. }
  904. //---------------------------------------------------------------------------
  905. void __fastcall TForm1::ShutDownthisTool1Click(TObject *Sender)
  906. {
  907.  if(Application->MessageBox("Shutdown this tool ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  908.    Close();
  909. }
  910. //---------------------------------------------------------------------------
  911. void __fastcall TForm1::StopSClick(TObject *Sender)
  912. {
  913.   AnsiString theWarning;
  914.   theWarning = "Are you sure to stop the Service ?nnAll the connections will be loss !" ;
  915.   if (TheServiceStatus())
  916.     {
  917.       if(Application->MessageBox(theWarning.c_str(), "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  918.         {
  919.           if (TheServicePause())
  920.             {
  921.               TrayMessage(NIM_MODIFY);
  922.               IsConnect = false;
  923.               IsVariables = false;
  924.               IsProcess = false;
  925.               IsDatabases = false;
  926.               ya = false;
  927.               ClearBox();
  928.             }
  929.           else
  930.              Application->MessageBox("Fails to stop the Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  931.         }
  932.     }
  933.    else
  934.      {
  935.        if(Application->MessageBox("Start the Service Manager for the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  936.          {
  937.            if (TheServiceResume())
  938.              {
  939.                ya = true;
  940.                TrayMessage(NIM_MODIFY);
  941.              }
  942.            else
  943.                Application->MessageBox("Fails to start the Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  944.          }
  945.      }
  946. }
  947. //---------------------------------------------------------------------------
  948. void __fastcall TForm1::RServiceClick(TObject *Sender)
  949. {
  950.  if (TheServiceStart())
  951.     {
  952.       if(Application->MessageBox("Remove the MySQL Server service ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  953.        {
  954.          if (!TheServiceRemove())
  955.          Application->MessageBox("Fails to Remove The MySQL Server Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  956.        }
  957.     }
  958.   else
  959.     {
  960.       if(Application->MessageBox("Install the MySQL Server service ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  961.        {
  962.          if (!TheServerPath())
  963.            Application->MessageBox("Please create first the my.ini setup", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  964.          else
  965.            {
  966.              if (!TheServiceCreate())
  967.               Application->MessageBox("Fails to Install The MySQL Server Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  968.            }
  969.        }
  970.     }
  971. }
  972. //---------------------------------------------------------------------------
  973. void __fastcall TForm1::StandaClick(TObject *Sender)
  974. {
  975.   if (MySQLSignal())
  976.     {
  977.       if(Application->MessageBox("Shutdown the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  978.         {
  979.           if (Shutd())
  980.            {
  981.              IsConnect = false;
  982.              IsVariables = false;
  983.              IsProcess = false;
  984.              IsDatabases = false;
  985.              ya = false;
  986.              ClearBox();
  987.              Sleep(500);
  988.              TrayMessage(NIM_MODIFY);
  989.             }
  990.           else
  991.             Application->MessageBox("Fails to Shutdown the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  992.         }
  993.     }
  994.    else
  995.      {
  996.        if(Application->MessageBox("Start the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  997.         {
  998.           if (mysqldstart())
  999.             {
  1000.               StatusLine->SimpleText = "";
  1001.               TrayMessage(NIM_MODIFY);
  1002.             }
  1003.           else
  1004.           Application->MessageBox("Fails to Start the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  1005.         }
  1006.      }
  1007. }
  1008. //---------------------------------------------------------------------------
  1009. bool __fastcall TForm1::Shutd()
  1010. {
  1011.   // from Irena
  1012.   HANDLE hEventShutdown;
  1013.   hEventShutdown=OpenEvent(EVENT_MODIFY_STATE, 0, "MySqlShutdown");
  1014.   if (IsConnect)
  1015.    {
  1016.      mysql_kill(MySQL,mysql_thread_id(MySQL));
  1017.      mysql_shutdown(MySQL, SHUTDOWN_DEFAULT);      StatusLine->SimpleText = "";
  1018.    }
  1019.    q = 0;
  1020.   if(hEventShutdown)
  1021.    {
  1022.     SetEvent(hEventShutdown);
  1023.     CloseHandle(hEventShutdown);
  1024.     TrayMessage(NIM_MODIFY);
  1025.     IsConnect = false;
  1026.     return true;
  1027.    }
  1028.   else
  1029.    {
  1030.      TrayMessage(NIM_MODIFY);
  1031.      return false;
  1032.    }
  1033. }
  1034. //---------------------------------------------------------------------------
  1035. void __fastcall TForm1::ClearBox(void)
  1036. {
  1037.  
  1038.  st22->Text = "";
  1039.  st23->Text = "";
  1040.  st24->Text = "";
  1041.  st25->Text = "";
  1042.  st26->Text = "";
  1043.  st27->Text = "";
  1044.  st28->Text = "";
  1045.  st29->Text = "";
  1046.  Edit3->Text = "";
  1047.  Edit4->Text = "";
  1048.  Edit5->Text = "";
  1049.  Edit6->Text = "";
  1050. }
  1051. //---------------------------------------------------------------------------
  1052. bool __fastcall TForm1::TheServiceRemove()
  1053. {
  1054.   bool thatok;
  1055.   char *SERVICE_NAME = "MySql";
  1056.   SC_HANDLE myService, scm;
  1057.   scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS);
  1058.   if (scm)
  1059.     {
  1060.       myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS);
  1061.        if (myService)
  1062.          {
  1063.            if(DeleteService(myService))
  1064.              {
  1065.                CloseServiceHandle(myService);
  1066.                CloseServiceHandle(scm);
  1067.                thatok = true;
  1068.              }
  1069.            else
  1070.              {
  1071.                 CloseServiceHandle(myService);
  1072.                 CloseServiceHandle(scm);
  1073.                 thatok = false;
  1074.               }
  1075.           }
  1076.        else
  1077.           {
  1078.             CloseServiceHandle(myService);
  1079.             CloseServiceHandle(scm);
  1080.             thatok = false;
  1081.           }
  1082.     }
  1083.   else
  1084.      {
  1085.       thatok = false;
  1086.       CloseServiceHandle(scm);
  1087.      }
  1088.    return thatok;
  1089. }
  1090. //---------------------------------------------------------------------------
  1091. bool __fastcall TForm1::TheServerPath()
  1092. {
  1093.  TIniFile *pIniFile = new
  1094.  TIniFile(TheWinDir() + "\my.ini");
  1095.  vpath = pIniFile->ReadString("WinMySQLadmin","Server","")  ;
  1096.  delete pIniFile;
  1097.  if (vpath.IsEmpty())
  1098.    return false;
  1099.  else
  1100.    return true;
  1101. }
  1102. //---------------------------------------------------------------------------
  1103. void __fastcall TForm1::Button5Click(TObject *Sender)
  1104. {
  1105.  if (!SeekErrFile())
  1106.   Application->MessageBox("Fails to find mysql.err", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
  1107. }
  1108. //---------------------------------------------------------------------------
  1109. void __fastcall TForm1::IsMySQLInit(void)
  1110. {
  1111.   AnsiString theCommand;
  1112.   char *host = NULL,*password=0,*user=0 ;
  1113.   TIniFile *pIniFile = new
  1114.   TIniFile(TheWinDir() + "\my.ini");
  1115.   AnsiString MyUser = pIniFile->ReadString("WinMySQLadmin","user","")  ;
  1116.   AnsiString MyPass = pIniFile->ReadString("WinMySQLadmin","password","")  ;
  1117.   delete pIniFile;
  1118.  if (!MyUser.IsEmpty() && MyUser.Length() && !MyPass.IsEmpty() && MyPass.Length())
  1119.    {
  1120.      if (!IsConnect)
  1121.       {
  1122.        MySQL = mysql_init(MySQL);
  1123.        if (mysql_real_connect(MySQL, "localhost",(MyUser).c_str(), (MyPass).c_str() , 0, 0, NULL, 0))
  1124.         IsConnect = true;
  1125.        else
  1126.         {
  1127.          if(mysql_real_connect(MySQL,host,user,password , 0, 0, NULL, 0))
  1128.           {
  1129.             IsConnect = true;
  1130.             theCommand = "GRANT ALL PRIVILEGES ON *.* TO ";
  1131.             theCommand +=  "'" + MyUser + "' @localhost IDENTIFIED BY ";
  1132.             theCommand +=  "'" + MyPass + "' with GRANT OPTION";
  1133.             char* los = theCommand.c_str();
  1134.             if(!mysql_query(MySQL, los ))
  1135.              StatusLine->SimpleText = " ";
  1136.           }
  1137.         }
  1138.       }
  1139.   }
  1140.  else
  1141.   {
  1142.    if (!IsConnect)
  1143.     {
  1144.       MySQL = mysql_init(MySQL);
  1145.       if(mysql_real_connect(MySQL,host,user,password , 0, 0, NULL, 0))
  1146.       IsConnect = true;
  1147.     }
  1148.   }
  1149. }
  1150. //---------------------------------------------------------------------------
  1151. void __fastcall TForm1::Timer3Timer(TObject *Sender)
  1152. {
  1153.    if ((NT) && TheServiceStatus()) {IsMySQLInit(); }
  1154.   if ((NT) && !TheServiceStatus() && MySQLSignal()) {IsMySQLInit(); }
  1155.   if (!(NT) && MySQLSignal()) {IsMySQLInit(); }
  1156.   if (IsConnect)
  1157.    {
  1158.      GetServerStatus();
  1159.      if (!IsMySQLNode)
  1160.      GetMainRoot();
  1161.      Extended->Enabled = true;
  1162.      if (!IsProcess && !GetProcess())
  1163.       StatusLine->SimpleText = "";
  1164.      if (!IsVariables && !GetVariables())
  1165.         StatusLine->SimpleText = "";
  1166.      Timer3->Interval = 10000;
  1167.    }
  1168.   else
  1169.     Extended->Enabled = false;
  1170. }
  1171. //---------------------------------------------------------------------------
  1172. void __fastcall TForm1::GetServerStatus(void)
  1173. {
  1174.   GetExtendedStatus();
  1175.   Edit3->Text = mysql_get_server_info(MySQL);
  1176.   Edit4->Text = mysql_get_host_info(MySQL);
  1177.   Edit5->Text = mysql_get_client_info();
  1178.   Edit6->Text = mysql_get_proto_info(MySQL);
  1179. }
  1180. //---------------------------------------------------------------------------
  1181. bool __fastcall TForm1::GetProcess()
  1182. {
  1183.   MYSQL_RES *res;
  1184.   MYSQL_ROW row;
  1185.   unsigned int i;
  1186.   int k = 0;
  1187.   int therow = 1;
  1188.   new_line=1;
  1189.    StringGrid2->RowCount= 2;
  1190.    if (!(res=mysql_list_processes(MySQL)))
  1191.       {
  1192.         return false;
  1193.       }
  1194.       while ((row=mysql_fetch_row(res)) != 0)
  1195.        {
  1196.          mysql_field_seek(res,0);
  1197.          StringGrid2->Cells[0][0] = "PID";
  1198.          StringGrid2->Cells[1][0] = "User";
  1199.          StringGrid2->Cells[2][0] = "Host";
  1200.          StringGrid2->Cells[3][0] = "DB";
  1201.          StringGrid2->Cells[4][0] = "Command";
  1202.          StringGrid2->Cells[5][0] = "Time";
  1203.          StringGrid2->Cells[6][0] = "State";
  1204.          StringGrid2->Cells[7][0] = "Info";
  1205.          for (i=0 ; i < mysql_num_fields(res); i++)
  1206.           {
  1207.              if (k <= 6 )
  1208.               {
  1209.                StringGrid2->Cells[k][therow] = row[i];
  1210.                k++;
  1211.               }
  1212.              else
  1213.                {
  1214.                  StringGrid2->Cells[(k)][therow] = row[i];
  1215.                  k = 0;
  1216.                  therow++ ;
  1217.                  StringGrid2->RowCount++;
  1218.                }
  1219.           }
  1220.        }
  1221.       StringGrid2->RowCount--;
  1222.       mysql_free_result(res);
  1223.       StringGrid5->RowCount--;
  1224.       IsProcess = true;
  1225.       return true;
  1226. }
  1227. //---------------------------------------------------------------------------
  1228. bool __fastcall TForm1::GetVariables()
  1229. {
  1230.   MYSQL_RES *res;
  1231.   MYSQL_ROW row;
  1232.   unsigned int i;
  1233.   int k = 1;
  1234.   new_line=1;
  1235.   bool left = true;
  1236.   AnsiString report;
  1237.   StringGrid1->RowCount = 2;
  1238.    if (mysql_query(MySQL,"show variables") ||
  1239.   !(res=mysql_store_result(MySQL)))
  1240.       {
  1241.         return false;
  1242.       }
  1243.       while ((row=mysql_fetch_row(res)) != 0)
  1244.        {
  1245.          mysql_field_seek(res,0);
  1246.          StringGrid1->Cells[0][0] = "Variable Name";
  1247.          StringGrid1->Cells[1][0] = "Value";
  1248.          for (i=0 ; i < mysql_num_fields(res); i++)
  1249.           {
  1250.              if (left)
  1251.               {
  1252.                  if (treport)
  1253.                  report = GetString(row[i]);
  1254.                  StringGrid1->Cells[0][k++] = row[i];
  1255.                  left = false;
  1256.               }
  1257.              else
  1258.                {
  1259.                  if (treport)
  1260.                   Memo5->Lines->Add(report + row[i]);
  1261.                  StringGrid1->RowCount++;
  1262.                  StringGrid1->Cells[1][--k] = row[i];
  1263.                  k++;
  1264.                  left = true;
  1265.                }
  1266.           }
  1267.        }
  1268.     StringGrid1->RowCount--;
  1269.     mysql_free_result(res);
  1270.     IsVariables = true;
  1271.     return true;
  1272. }
  1273. //---------------------------------------------------------------------------
  1274. bool __fastcall TForm1::nice_time(AnsiString buff)
  1275. {
  1276.   unsigned long sec;
  1277.   unsigned long tmp;
  1278.   AnsiString  mytime;
  1279.   sec = StrToInt(buff);
  1280.   if (sec >= 3600L*24)
  1281.   {
  1282.     tmp=sec/(3600L*24);
  1283.     sec-=3600L*24*tmp;
  1284.     mytime = IntToStr(tmp);
  1285.     if (tmp > 1)
  1286.       mytime+= " days ";
  1287.     else
  1288.       mytime+= " day ";
  1289.   }
  1290.   if (sec >= 3600L)
  1291.   {
  1292.     tmp=sec/3600L;
  1293.     sec-=3600L*tmp;
  1294.      mytime += IntToStr(tmp);
  1295.     if (tmp > 1)
  1296.       mytime+= " hours ";
  1297.     else
  1298.       mytime+= " hour ";
  1299.   }
  1300.   if (sec >= 60)
  1301.   {
  1302.     tmp=sec/60;
  1303.     sec-=60*tmp;
  1304.     mytime += IntToStr(tmp);
  1305.     mytime+= " min ";
  1306.   }
  1307.   mytime += IntToStr(sec);
  1308.   mytime+= " sec ";
  1309.   st29->Text = mytime ;
  1310.  return true;
  1311. }
  1312. //---------------------------------------------------------------------------
  1313. void __fastcall TForm1::Button11Click(TObject *Sender)
  1314. {
  1315.   if (IsConnect)
  1316.   {
  1317.     if (GetVariables())
  1318.      StatusLine->SimpleText = "";
  1319.    }
  1320. }
  1321. //---------------------------------------------------------------------------
  1322. void __fastcall TForm1::Button10Click(TObject *Sender)
  1323. {
  1324.  if (IsConnect)
  1325.   {
  1326.     if (GetProcess())
  1327.      StatusLine->SimpleText = "";
  1328.    }
  1329. }
  1330. //---------------------------------------------------------------------------
  1331. void __fastcall TForm1::Button6Click(TObject *Sender)
  1332. {
  1333.   if (IsConnect)
  1334.    {
  1335.     if (mysql_refresh(MySQL,REFRESH_HOSTS))
  1336.        StatusLine->SimpleText = "";
  1337.    }
  1338. }
  1339. //---------------------------------------------------------------------------
  1340. void __fastcall TForm1::Button7Click(TObject *Sender)
  1341. {
  1342.   if (IsConnect)
  1343.   {
  1344.     if (mysql_refresh(MySQL,REFRESH_LOG))
  1345.      StatusLine->SimpleText = "";
  1346.   }
  1347. }
  1348. //---------------------------------------------------------------------------
  1349. void __fastcall TForm1::Button8Click(TObject *Sender)
  1350. {
  1351.   if (IsConnect)
  1352.   {
  1353.     if (mysql_refresh(MySQL,REFRESH_TABLES))
  1354.       StatusLine->SimpleText = "";
  1355.    }
  1356. }
  1357. //---------------------------------------------------------------------------
  1358. void __fastcall TForm1::Button2Click(TObject *Sender)
  1359. {
  1360.  Memo1->Enabled = true;
  1361.   Memo1->Lines->Clear();
  1362.   AnsiString asFileName = FileSearch("my.ini", TheWinDir());
  1363.   if (asFileName.IsEmpty())
  1364.    Application->MessageBox("Don't found my.ini file on the Win Directory", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
  1365.   else
  1366.    FillMyIni();
  1367. }
  1368. //---------------------------------------------------------------------------
  1369. void __fastcall TForm1::Button3Click(TObject *Sender)
  1370. {
  1371.  TIniFile *pIniFile = new
  1372.  TIniFile(TheWinDir() + "\my.ini");
  1373.  if (!Memo1->GetTextLen())
  1374.    Application->MessageBox("The Memo Box is Empty", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
  1375.  else
  1376.   {
  1377.    if(Application->MessageBox("Are you sure to write the modifications into My.ini file.", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  1378.     {
  1379.       Memo1->Lines->SaveToFile(TheWinDir() + "\my.ini");
  1380.       Memo1->Lines->Clear();
  1381.       Memo1->Enabled = true;
  1382.       Memo1->Lines->Clear();
  1383.       if (NtVer->Checked)
  1384.        pIniFile->WriteString("WinMySQLadmin","Server",TheDir() + "/bin/mysqld-nt.exe");
  1385.       if (MysqldVer->Checked == true)
  1386.        pIniFile->WriteString("WinMySQLadmin","Server", TheDir() + "/bin/mysqld.exe");
  1387.       if (ShareVer->Checked)
  1388.        pIniFile->WriteString("WinMySQLadmin","Server",TheDir() + "/bin/mysqld-shareware.exe");
  1389.       if (OptVer->Checked)
  1390.        pIniFile->WriteString("WinMySQLadmin","Server", TheDir() + "/bin/mysqld-opt.exe");
  1391.       FillMyIni();
  1392.       Application->MessageBox("My.ini was modificated", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
  1393.     }
  1394.   }
  1395.   delete pIniFile;
  1396.   Memo1->Lines->Clear();
  1397.   FillMyIni();
  1398. }
  1399. //---------------------------------------------------------------------------
  1400. void __fastcall TForm1::Button1Click(TObject *Sender)
  1401. {
  1402.   if(CreatingShortCut())
  1403.    Application->MessageBox("The ShortCut on Start Menu was created", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
  1404.  else
  1405.    Application->MessageBox("Fails the Operation of Create the ShortCut", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
  1406. }
  1407. //---------------------------------------------------------------------------
  1408. void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
  1409. {
  1410.  BROWSEINFO    info;
  1411.   char          szDir[MAX_PATH];
  1412.   char          szDisplayName[MAX_PATH];
  1413.   LPITEMIDLIST  pidl;
  1414.   LPMALLOC      pShellMalloc;
  1415.  if(SHGetMalloc(&pShellMalloc) == NO_ERROR)
  1416.     {
  1417.       memset(&info, 0x00,sizeof(info));
  1418.       info.hwndOwner = Handle;
  1419.       info.pidlRoot  = 0;
  1420.       info.pszDisplayName = szDisplayName;
  1421.       info.lpszTitle = "Search MySQL Base Directory";
  1422.       info.ulFlags   = BIF_RETURNONLYFSDIRS;
  1423.       info.lpfn = 0;
  1424.       pidl = SHBrowseForFolder(&info);
  1425.       if(pidl)
  1426.         {
  1427.           if(SHGetPathFromIDList(pidl, szDir)) {BaseDir->Text = szDir; }
  1428.             pShellMalloc->Free(pidl);
  1429.         }
  1430.         pShellMalloc->Release();
  1431.     }
  1432. }
  1433. //---------------------------------------------------------------------------
  1434. void __fastcall TForm1::Button4Click(TObject *Sender)
  1435. {
  1436.  if (IsConnect)
  1437.   {
  1438.     Memo3->Lines->Add(mysql_stat(MySQL));
  1439.   }
  1440. }
  1441. //---------------------------------------------------------------------------
  1442. void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
  1443. {
  1444.   if(Showme1->Caption == "Show me")  {  TrayMessage(NIM_DELETE);
  1445.        Showme1->Caption = "Hide me";  Show();  }
  1446.   else  { TrayMessage(NIM_ADD);  TrayMessage(NIM_MODIFY);
  1447.        Showme1->Caption = "Show me";  Hide();  }
  1448. }
  1449. //---------------------------------------------------------------------------
  1450. void __fastcall TForm1::ExtendedClick(TObject *Sender)
  1451. {
  1452. if (ya)
  1453.  {
  1454.  Extended->Caption = "Start Extended Server Status";
  1455.  ya = false;
  1456.  ClearBox();
  1457.  }
  1458. else
  1459.  {
  1460.  Extended->Caption = "Stop Extended Server Status";
  1461.  ya = true;
  1462.  }
  1463. }
  1464. //---------------------------------------------------------------------------
  1465. void __fastcall TForm1::GetServerOptions(void)
  1466. {
  1467. AnsiString FileName;
  1468. FileName =  FileSearch("mysqld-opt.exe", ExtractFilePath(Application->ExeName));
  1469. if (FileName.IsEmpty()) {OptVer->Enabled = false; }
  1470. FileName =  FileSearch("mysqld-shareware.exe", ExtractFilePath(Application->ExeName));
  1471. if (FileName.IsEmpty()) {ShareVer->Enabled = false; }
  1472. FileName =  FileSearch("mysqld.exe", ExtractFilePath(Application->ExeName));
  1473. if (FileName.IsEmpty()) {MysqldVer->Enabled = false; }
  1474. FileName =  FileSearch("mysqld-nt.exe", ExtractFilePath(Application->ExeName));
  1475. if (FileName.IsEmpty()) {NtVer->Enabled = false; }
  1476. }
  1477. //---------------------------------------------------------------------------
  1478. void __fastcall TForm1::GetReportServer(void)
  1479. {
  1480.   AnsiString strspace;
  1481.   Memo5->Lines->Clear();
  1482.   Memo5->Lines->Add("This Report was made using the WinMySQLadmin 1.0 Tool");
  1483.   Memo5->Lines->Add("");
  1484.   Memo5->Lines->Add(Now());
  1485.   Memo5->Lines->Add("");
  1486.    preport = true;
  1487.    Memo5->Lines->Add("");
  1488.    Memo5->Lines->Add("Server Status Values");
  1489.    Memo5->Lines->Add("");
  1490.    Memo5->Lines->Add(GetString("Server Info") + mysql_get_server_info(MySQL));
  1491.    Memo5->Lines->Add(GetString("Host Info") + mysql_get_host_info(MySQL));
  1492.    Memo5->Lines->Add(GetString("Client Info") + mysql_get_client_info());
  1493.    Memo5->Lines->Add(GetString("Proto Info") + mysql_get_proto_info(MySQL));
  1494.    GetExtendedStatus();
  1495.    preport = false;
  1496.    treport = true;
  1497.    Memo5->Lines->Add("");
  1498.    Memo5->Lines->Add("Variables Values");
  1499.    Memo5->Lines->Add("");
  1500.    GetVariables();
  1501.    treport = false;
  1502.    ereport = true;
  1503.    Memo5->Lines->Add("");
  1504.    Memo5->Lines->Add("Last Lines from Err File");
  1505.    Memo5->Lines->Add("");
  1506.    SeekErrFile();
  1507.    ereport = false;
  1508. }
  1509. void __fastcall TForm1::SpeedButton4Click(TObject *Sender)
  1510. {
  1511.  if(IsConnect)
  1512.   GetReportServer();
  1513.  else
  1514.   Application->MessageBox("The Server must be connected", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  1515. }
  1516. //---------------------------------------------------------------------------
  1517. void __fastcall TForm1::SpeedButton5Click(TObject *Sender)
  1518. {
  1519.   AnsiString PathName;
  1520.   SaveFileDialog->FileName = PathName;
  1521.   if (SaveFileDialog->Execute() ){
  1522.     PathName= SaveFileDialog->FileName;
  1523.     Caption = ExtractFileName(PathName);
  1524.     Memo5->Lines->SaveToFile(PathName);
  1525.     Memo5->Modified = false;
  1526.   }
  1527. }
  1528. //---------------------------------------------------------------------------
  1529. String  __fastcall TForm1::GetString(String k)
  1530. {
  1531.   int i = 35 - k.Length();
  1532.   for (int y = 1 ; y <= i ;y++ )
  1533.      k+= " ";
  1534.    return k ;
  1535. }
  1536. //---------------------------------------------------------------------------
  1537. void __fastcall TForm1::SpeedButton6Click(TObject *Sender)
  1538. {
  1539.  PrinterSetupDialog1->Execute();
  1540. }
  1541. //---------------------------------------------------------------------------
  1542. void __fastcall TForm1::SpeedButton7Click(TObject *Sender)
  1543. {
  1544.   AnsiString PathName;
  1545.   if (PrintDialog1->Execute()){
  1546.     try {
  1547.         Memo5->Print(PathName);
  1548.     }
  1549.     catch(...){
  1550.         Printer()->EndDoc();
  1551.         throw;
  1552.     }
  1553.   }
  1554. }
  1555. //---------------------------------------------------------------------------
  1556. void __fastcall TForm1::SpeedButton8Click(TObject *Sender)
  1557. {
  1558.  Memo5->CutToClipboard();
  1559. }
  1560. //---------------------------------------------------------------------------
  1561. void __fastcall TForm1::SpeedButton9Click(TObject *Sender)
  1562. {
  1563.   Memo5->CopyToClipboard();
  1564. }
  1565. //---------------------------------------------------------------------------
  1566. void __fastcall TForm1::SpeedButton10Click(TObject *Sender)
  1567. {
  1568.  Memo5->PasteFromClipboard();
  1569. }
  1570. //---------------------------------------------------------------------------
  1571. void __fastcall TForm1::SpeedButton11Click(TObject *Sender)
  1572. {
  1573.  Memo5->ClearSelection();
  1574. }
  1575. //---------------------------------------------------------------------------
  1576. void __fastcall TForm1::SpeedButton12Click(TObject *Sender)
  1577. {
  1578.  Memo5->SelectAll();
  1579. }
  1580. //---------------------------------------------------------------------------
  1581. bool __fastcall TForm1::GetMainRoot()
  1582. {
  1583.  MYSQL_RES *res;
  1584.  MYSQL_ROW row;
  1585.  unsigned int i;
  1586.  AnsiString command;
  1587.  CleanGrid();
  1588.  CleanGridI();
  1589.  TakeIP();
  1590.  MySQLNode = DBView->Items->Add(NULL, mainroot.UpperCase());
  1591.  MySQLNode->ImageIndex = 0;
  1592.  if (!(res=mysql_list_dbs(MySQL,"%")))  { return false; }
  1593.    while ((row=mysql_fetch_row(res)) != 0) {
  1594.      mysql_field_seek(res,0);
  1595.      for (i=0 ; i < mysql_num_fields(res); i++)
  1596.       {
  1597.         MySQLDbs = DBView->Items->AddChild(MySQLNode, row[i]);
  1598.         MySQLDbs->ImageIndex = 1;
  1599.         MySQLDbs->SelectedIndex = 1;
  1600.       }
  1601.    }
  1602.    mysql_free_result(res);
  1603.    MySQLNode->Expanded = true;
  1604.  IsMySQLNode = true;
  1605.  return true;
  1606. }
  1607. //---------------------------------------------------------------------------
  1608. void __fastcall TForm1::DeleteDatabaseSClick(TObject *Sender)
  1609. {
  1610.  AnsiString alert;
  1611.  if (IsConnect)
  1612.   {
  1613.    if(DBView->Selected == MySQLNode )
  1614.     Application->MessageBox("Invalid database row selected.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  1615.    else if ( DBView->Selected == NULL )
  1616.     Application->MessageBox("Invalid database row selected.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  1617.    else
  1618.     {
  1619.      if (DBView->Selected->Text.UpperCase() == "MYSQL")
  1620.       Application->MessageBox("You cann't use this tool to drop the MySQL Database.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  1621.      else {
  1622.        alert = "Are you sure to drop the < ";
  1623.        alert+= DBView->Selected->Text.c_str();
  1624.        alert+= " > database.";
  1625.       if(Application->MessageBox(alert.c_str(), "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  1626.        {
  1627.          char* lese = DBView->Selected->Text.c_str();
  1628.         if (!mysql_drop_db(MySQL, lese ))
  1629.           {
  1630.             DBView->Items->Clear();
  1631.             GetMainRoot();
  1632.            }
  1633.          else
  1634.            Application->MessageBox("Fails to drop the Database.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  1635.         }
  1636.       }
  1637.    }
  1638.   }
  1639.  else
  1640.    Application->MessageBox("The Server must be connected", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  1641. }
  1642. //---------------------------------------------------------------------------
  1643.  bool __fastcall TForm1::IsDatabase(String Name)
  1644. {
  1645.   MYSQL_RES *res;
  1646.   MYSQL_ROW row;
  1647.   unsigned int i;
  1648.   AnsiString command;
  1649.   CleanTree();
  1650.   command = "use ";
  1651.   command+= Name.c_str();
  1652.   char* das = command.c_str();
  1653.   char* lis = Name.c_str();
  1654.   if (mysql_query(MySQL, das ) ||
  1655.   !(res=mysql_list_tables(MySQL,"%")))
  1656.   return false;
  1657.   MySQLNodeT = TableView->Items->Add(NULL, lis);
  1658.   MySQLNodeT->ImageIndex = 1;
  1659.   MySQLNodeT->SelectedIndex = 1;
  1660.   while ((row=mysql_fetch_row(res)) != 0) {
  1661.   mysql_field_seek(res,0);
  1662.   for (i=0 ; i < mysql_num_fields(res); i++)
  1663.    {
  1664.      MySQLTbs = TableView->Items->AddChild(MySQLNodeT, row[i]);
  1665.      MySQLTbs->ImageIndex = 2;
  1666.      MySQLTbs->SelectedIndex = 2;
  1667.    }
  1668.    MySQLNodeT->Expanded = true;
  1669.   }
  1670.   mysql_free_result(res);
  1671.   return true;
  1672. }
  1673. //---------------------------------------------------------------------------
  1674. void __fastcall TForm1::DBViewClick(TObject *Sender)
  1675. {
  1676.  if (IsConnect)
  1677.   {
  1678.     if (DBView->Selected != MySQLNode && DBView->Selected != NULL  )
  1679.      {
  1680.        IsDatabase(DBView->Selected->Text);
  1681.      }
  1682.     else
  1683.      {
  1684.       CleanTree();
  1685.      }
  1686.   }
  1687. }
  1688. //---------------------------------------------------------------------------
  1689. void __fastcall TForm1::TableViewClick(TObject *Sender)
  1690. {
  1691.  if (IsConnect)
  1692.   {
  1693.     if (DBView->Selected != MySQLNodeT )
  1694.      {
  1695.        IsTable(TableView->Selected->Text);
  1696.        IsIndex(TableView->Selected->Text);
  1697.      }
  1698.     else
  1699.      {
  1700.       CleanGrid();
  1701.       CleanGridI();
  1702.      }
  1703.   }
  1704. }
  1705. //---------------------------------------------------------------------------
  1706.  bool __fastcall TForm1::IsTable(String Name)
  1707. {
  1708.  MYSQL_RES *res;
  1709.  MYSQL_ROW row;
  1710.  unsigned int i;
  1711.  int k = 0;
  1712.  int therow = 1;
  1713.  new_line=1;
  1714.  AnsiString command;
  1715.  AnsiString commandt;
  1716.  CleanGrid();
  1717.  CleanGridI();
  1718.  command = "use ";
  1719.  command+= DBView->Selected->Text.c_str();
  1720.  char* las = command.c_str();
  1721.  commandt = "desc ";
  1722.  commandt+= Name.c_str();
  1723.  char* les = commandt.c_str();
  1724.  if (mysql_query(MySQL, las ))
  1725.  return false;
  1726.  if (mysql_query(MySQL, les ) ||
  1727.  !(res=mysql_store_result(MySQL)))
  1728.  return false ;
  1729.  StringGrid4->Cells[0][0] = "Field";
  1730.  StringGrid4->Cells[1][0] = "Type";
  1731.  StringGrid4->Cells[2][0] = "Null";
  1732.  StringGrid4->Cells[3][0] = "Key";
  1733.  StringGrid4->Cells[4][0] = "Default";
  1734.  StringGrid4->Cells[5][0] = "Extra";
  1735.  StringGrid4->Cells[6][0] = "Previleges";
  1736.  int thecounter;
  1737.  String u = GetNumberServer();
  1738.  if ( u == "3.22")
  1739.   {
  1740.    StringGrid3->ColCount = 7;
  1741.    thecounter = 4;
  1742.   }
  1743.  else
  1744.   thecounter = 5;
  1745.  while ((row=mysql_fetch_row(res)) != 0)
  1746.  {
  1747.    mysql_field_seek(res,0);
  1748.    for (i=0 ; i < mysql_num_fields(res); i++)
  1749.     {
  1750.      if (k <= thecounter )
  1751.      {
  1752.        StringGrid4->Cells[k][therow] = row[i];
  1753.        k++;
  1754.      }
  1755.      else
  1756.      {
  1757.        StringGrid4->Cells[(k)][therow] = row[i];
  1758.        k = 0;
  1759.        therow++ ;
  1760.        StringGrid4->RowCount++;
  1761.       }
  1762.     }
  1763.  }
  1764.  StringGrid4->RowCount--;
  1765.  mysql_free_result(res);
  1766.  return true;
  1767. }
  1768. //---------------------------------------------------------------------------
  1769. void __fastcall TForm1::TableViewChange(TObject *Sender, TTreeNode *Node)
  1770. {
  1771. if (IsConnect)
  1772.   {
  1773.     if (DBView->Selected != MySQLNodeT )
  1774.      {
  1775.        IsTable(TableView->Selected->Text);
  1776.        IsIndex(TableView->Selected->Text);
  1777.      }
  1778.     else
  1779.      {
  1780.       CleanGrid();
  1781.       CleanGridI();
  1782.      }
  1783.   }
  1784. }
  1785. //---------------------------------------------------------------------------
  1786. void __fastcall TForm1::DBViewChange(TObject *Sender, TTreeNode *Node)
  1787. {
  1788.  if (IsConnect)
  1789.   {
  1790.     if (DBView->Selected != MySQLNode )
  1791.      {
  1792.        IsDatabase(DBView->Selected->Text);
  1793.      }
  1794.     else
  1795.      {
  1796.       CleanTree();
  1797.      }
  1798.   }
  1799. }
  1800. //---------------------------------------------------------------------------
  1801. void __fastcall TForm1::RefreshSClick(TObject *Sender)
  1802. {
  1803.  MYSQL_RES *res;
  1804.  MYSQL_ROW row;
  1805.  unsigned int i;
  1806.  AnsiString command;
  1807.  if (IsConnect)
  1808.   {
  1809.    IsMySQLNode = false;
  1810.    CleanTree();
  1811.    DBView->Items->Clear();
  1812.    TakeIP();
  1813.    MySQLNode = DBView->Items->Add(NULL, mainroot.UpperCase());
  1814.    MySQLNode->ImageIndex = 0;
  1815.    if (!(res=mysql_list_dbs(MySQL,"%")))  { /*do nothing;*/ }
  1816.     while ((row=mysql_fetch_row(res)) != 0) {
  1817.     mysql_field_seek(res,0);
  1818.      for (i=0 ; i < mysql_num_fields(res); i++)
  1819.       {
  1820.         MySQLDbs = DBView->Items->AddChild(MySQLNode, row[i]);
  1821.         MySQLDbs->ImageIndex = 1;
  1822.         MySQLDbs->SelectedIndex = 1;
  1823.       }
  1824.    }
  1825.    mysql_free_result(res);
  1826.  IsMySQLNode = true;
  1827.  MySQLNode->Expanded = true;
  1828.   }
  1829. }
  1830. //---------------------------------------------------------------------------
  1831. void __fastcall TForm1::CreateDatabaseSClick(TObject *Sender)
  1832. {
  1833.  if (IsConnect)
  1834.   {
  1835.    dbfrm->Show();
  1836.   }
  1837.  else
  1838.   ShowMessage("Precisa estar conectado");
  1839. }
  1840. //---------------------------------------------------------------------------
  1841. void __fastcall TForm1::CleanTree(void)
  1842. {
  1843.   StringGrid4->RowCount= 2;
  1844.   StringGrid4->Cells[0][1] = "";
  1845.   StringGrid4->Cells[1][1] = "";
  1846.   StringGrid4->Cells[2][1] = "";
  1847.   StringGrid4->Cells[3][1] = "";
  1848.   StringGrid4->Cells[4][1] = "";
  1849.   StringGrid4->Cells[5][1]  = "";
  1850.   TableView->Items->Clear();
  1851. }
  1852. //---------------------------------------------------------------------------
  1853. void __fastcall TForm1::CleanGrid(void)
  1854. {
  1855.   StringGrid4->RowCount= 2;
  1856.   StringGrid4->Cells[0][1] = "";
  1857.   StringGrid4->Cells[1][1] = "";
  1858.   StringGrid4->Cells[2][1] = "";
  1859.   StringGrid4->Cells[3][1] = "";
  1860.   StringGrid4->Cells[4][1] = "";
  1861.   StringGrid4->Cells[5][1]  = "";
  1862. }
  1863. //---------------------------------------------------------------------------
  1864. bool __fastcall TForm1::CreatingDB()
  1865. {
  1866.  if (mysql_create_db(MySQL, dbfrm->Edit1->Text.c_str()))
  1867.   return true;
  1868.  else
  1869.   return false;
  1870. }
  1871. //---------------------------------------------------------------------------
  1872. void __fastcall TForm1::OutRefresh(void)
  1873. {
  1874.  RefreshSClick(dbfrm->SpeedButton1);
  1875. }
  1876. //---------------------------------------------------------------------------
  1877. void __fastcall TForm1::FlushHosts1Click(TObject *Sender)
  1878. {
  1879.    if (IsConnect)
  1880.    {
  1881.     if (mysql_refresh(MySQL,REFRESH_HOSTS))
  1882.        StatusLine->SimpleText = "";
  1883.    }
  1884. }
  1885. //---------------------------------------------------------------------------
  1886. void __fastcall TForm1::FlushLogs1Click(TObject *Sender)
  1887. {
  1888.    if (IsConnect)
  1889.   {
  1890.     if (mysql_refresh(MySQL,REFRESH_LOG))
  1891.      StatusLine->SimpleText = "";
  1892.   }
  1893. }
  1894. //---------------------------------------------------------------------------
  1895. void __fastcall TForm1::FlushTables1Click(TObject *Sender)
  1896. {
  1897.   if (IsConnect)
  1898.   {
  1899.     if (mysql_refresh(MySQL,REFRESH_TABLES))
  1900.       StatusLine->SimpleText = "";
  1901.    }
  1902. }
  1903. //---------------------------------------------------------------------------
  1904. //---------------------------------------------------------------------------
  1905.  bool __fastcall TForm1::IsIndex(String Name)
  1906. {
  1907.  MYSQL_RES *res;
  1908.  MYSQL_ROW row;
  1909.  unsigned int i;
  1910.  int k = 0;
  1911.  int therow = 1;
  1912.  new_line=1;
  1913.  AnsiString command;
  1914.  AnsiString commandt;
  1915.  i = 0;
  1916.  CleanGridI();
  1917.  command = "use ";
  1918.  command+= DBView->Selected->Text.c_str();
  1919.  char* las = command.c_str();
  1920.  commandt = "show index from ";
  1921.  commandt+= Name.c_str();
  1922.  char* les = commandt.c_str();
  1923.  if (mysql_query(MySQL, las ))
  1924.  return false;
  1925.  if (mysql_query(MySQL, les ) ||
  1926.  !(res=mysql_store_result(MySQL)))
  1927.  return false ;
  1928.  StringGrid3->RowCount= 2;
  1929.  StringGrid3->Cells[0][0] = "Table";
  1930.  StringGrid3->Cells[1][0] = "Non_unique";
  1931.  StringGrid3->Cells[2][0] = "Key_name";
  1932.  StringGrid3->Cells[3][0] = "Seq_in_index";
  1933.  StringGrid3->Cells[4][0] = "Col_name";
  1934.  StringGrid3->Cells[5][0] = "Collation";
  1935.  StringGrid3->Cells[6][0] = "Card.";
  1936.  StringGrid3->Cells[7][0] = "Sub_part";
  1937.  StringGrid3->Cells[8][0] = "Packed";
  1938.  StringGrid3->Cells[9][0] = "Comment";
  1939.  int thecounter;
  1940.  String u = GetNumberServer();
  1941.  if ( u == "3.22")
  1942.   {
  1943.    StringGrid3->ColCount = 8;
  1944.    thecounter = 6;
  1945.   }
  1946.  else
  1947.   thecounter = 8;
  1948.  while ((row=mysql_fetch_row(res)) != 0)
  1949.  {
  1950.    mysql_field_seek(res,0);
  1951.    for (i=0 ; i < mysql_num_fields(res); i++)
  1952.     {
  1953.      if (k <= thecounter )
  1954.      {
  1955.        StringGrid3->Cells[k][therow] = row[i];
  1956.        k++;
  1957.      }
  1958.      else
  1959.      {
  1960.        StringGrid3->Cells[(k)][therow] = row[i];
  1961.        k = 0;
  1962.        therow++ ;
  1963.        StringGrid3->RowCount++;
  1964.       }
  1965.     }
  1966.  }
  1967.  if (i)
  1968.  StringGrid3->RowCount--;
  1969.  mysql_free_result(res);
  1970.  return true;
  1971. }
  1972. //---------------------------------------------------------------------------
  1973. void __fastcall TForm1::CleanGridI(void)
  1974. {
  1975.   StringGrid3->RowCount= 2;
  1976.   StringGrid3->Cells[0][1] = "";
  1977.   StringGrid3->Cells[1][1] = "";
  1978.   StringGrid3->Cells[2][1] = "";
  1979.   StringGrid3->Cells[3][1] = "";
  1980.   StringGrid3->Cells[4][1] = "";
  1981.   StringGrid3->Cells[5][1]  = "";
  1982.   StringGrid3->Cells[6][1]  = "";
  1983.   StringGrid3->Cells[7][1]  = "";
  1984. }
  1985. //---------------------------------------------------------------------------
  1986. bool __fastcall TForm1::CreatingTable(String TheTable)
  1987. {
  1988.  if (!mysql_query(MySQL, TheTable.c_str()))
  1989.   return true;
  1990.  else
  1991.   return false;
  1992. }
  1993. //---------------------------------------------------------------------------
  1994. bool __fastcall TForm1::GetExtendedStatus()
  1995. {
  1996.   if (!ya && !preport)
  1997.    return true;
  1998.   MYSQL_RES *res;
  1999.   MYSQL_ROW row;
  2000.   unsigned int i;
  2001.   int k = 1;
  2002.   new_line=1;
  2003.   bool left = true;
  2004.   bool open_tables = false;
  2005.   bool open_files = false;
  2006.   bool uptime = false;
  2007.   bool running_threads = false;
  2008.   bool open_streams = false;
  2009.   bool slow_queries = false;
  2010.   bool opened_tables = false;
  2011.   bool questions = false;
  2012.   AnsiString report;
  2013.   if (yy)
  2014.   StringGrid5->RowCount = 2;
  2015.    if (mysql_query(MySQL,"show status") ||
  2016.   !(res=mysql_store_result(MySQL)))
  2017.       {
  2018.         return false;
  2019.       }
  2020.       while ((row=mysql_fetch_row(res)) != 0)
  2021.        {
  2022.          mysql_field_seek(res,0);
  2023.          StringGrid5->Cells[0][0] = "Variable Name";
  2024.          StringGrid5->Cells[1][0] = "Value";
  2025.          for (i=0 ; i < mysql_num_fields(res); i++)
  2026.           {
  2027.              if (left)
  2028.               {
  2029.                  if (preport)
  2030.                  report = GetString(row[i]);
  2031.                  if ( (String) row[i] ==  "Open_tables")
  2032.                    open_tables = true;
  2033.                  else
  2034.                    open_tables = false;
  2035.                  if ( (String) row[i] ==  "Open_files")
  2036.                    open_files = true;
  2037.                  else
  2038.                    open_files = false;
  2039.                  if ((String) row[i] == "Uptime")
  2040.                    uptime = true;
  2041.                  else
  2042.                    uptime = false;
  2043.                  if ( (String) row[i] == "Opened_tables")
  2044.                     opened_tables = true;
  2045.                  else
  2046.                     opened_tables = false;
  2047.                  if ( (String) row[i] == "Threads_running" || (String) row[i] == "Running_threads")
  2048.                     running_threads = true;
  2049.                  else
  2050.                     running_threads = false;
  2051.                  if ( (String) row[i] == "Open_streams")
  2052.                     open_streams = true;
  2053.                  else
  2054.                     open_streams = false;
  2055.                  if ( (String) row[i] == "Slow_queries")
  2056.                     slow_queries = true;
  2057.                  else
  2058.                     slow_queries = false;
  2059.                  if ( (String) row[i] == "Questions")
  2060.                     questions = true;
  2061.                  else
  2062.                     questions = false;
  2063.                  if (yy)
  2064.                  StringGrid5->Cells[0][k++] = row[i];
  2065.                  left = false;
  2066.               }
  2067.              else
  2068.                {
  2069.                  if (preport)
  2070.                   Memo5->Lines->Add(report + row[i]);
  2071.                  if (open_tables)
  2072.                   st22->Text = row[i];
  2073.                  if (open_files)
  2074.                   st23->Text = row[i];
  2075.                  if (uptime)
  2076.                   nice_time(row[i]);
  2077.                  if (running_threads)
  2078.                   st27->Text = row[i];
  2079.                  if (open_streams)
  2080.                   st24->Text = row[i];
  2081.                  if (slow_queries)
  2082.                   st28->Text = row[i];
  2083.                  if (opened_tables)
  2084.                   st25->Text = row[i];
  2085.                  if (questions){
  2086.                    q++;
  2087.                    st26->Text = StrToInt64(row[i]) - q; }
  2088.                  if (yy){
  2089.                  StringGrid5->RowCount++;
  2090.                  StringGrid5->Cells[1][--k] = row[i];
  2091.                  k++; }
  2092.                  left = true;
  2093.                }
  2094.           }
  2095.        }
  2096.     if (rinit)
  2097.      StringGrid5->RowCount--;
  2098.     mysql_free_result(res);
  2099.     yy = false;
  2100.     return true;
  2101. }
  2102. //---------------------------------------------------------------------------
  2103. void __fastcall TForm1::SpeedButton13Click(TObject *Sender)
  2104. {
  2105.   yy = true;
  2106.  // rinit = true;
  2107. }
  2108. //---------------------------------------------------------------------------
  2109. String  __fastcall TForm1::GetNumberServer()
  2110. {
  2111.  String TheVersion;
  2112.  TheVersion  =  mysql_get_server_info(MySQL) ;
  2113.  TheVersion.SetLength(4);
  2114.  return TheVersion;
  2115. }
  2116. //---------------------------------------------------------------------------
  2117. void __fastcall TForm1::KillProcess1Click(TObject *Sender)
  2118. {
  2119.   if (IsConnect)
  2120.     KillPID();
  2121.   else
  2122.     Application->MessageBox("The Server must be connected", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  2123. }
  2124. //---------------------------------------------------------------------------
  2125. bool __fastcall TForm1::KillPID()
  2126. {
  2127.   String s  = "Are you sure to kill the process PID no. ";
  2128.   s+= StringGrid2->Cells[0][StringGrid2->Row];
  2129.   s+= " of the USER ";
  2130.   s+= StringGrid2->Cells[1][StringGrid2->Row];
  2131.   unsigned long  xx = mysql_thread_id(MySQL);
  2132.   unsigned long  yy = StrToInt(StringGrid2->Cells[0][StringGrid2->Row]);
  2133.   if ( xx != yy)
  2134.    {
  2135.      if(Application->MessageBox(s.c_str(), "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES)
  2136.       {
  2137.         if (!mysql_kill(MySQL,yy))
  2138.          {
  2139.           GetProcess();
  2140.           return true;
  2141.          }
  2142.       }
  2143.     }
  2144.   else
  2145.    {
  2146.      Application->MessageBox("From here you can't kill the PID of this tool", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION);
  2147.      return true;
  2148.    }
  2149.  return true;
  2150. }
  2151. void __fastcall TForm1::FlushThreads1Click(TObject *Sender)
  2152. {
  2153.  if (IsConnect)
  2154.   {
  2155.     if (mysql_refresh(MySQL,REFRESH_THREADS))
  2156.       StatusLine->SimpleText = "";
  2157.    }
  2158. }
  2159. //---------------------------------------------------------------------------