mariadb/VC++Files/winmysqladmin/main.cpp
unknown 7311cbe7de Updated windows files (VC++ files and winmysqladmin).
Portability fixes.
Removed compiler warnings.



VC++Files/client/mysql.dsp:
  Updated to 4.0.2
VC++Files/client/mysqladmin.dsp:
  Updated to 4.0.2
VC++Files/client/mysqlclient.dsp:
  Updated to 4.0.2
VC++Files/client/mysqldump.dsp:
  Updated to 4.0.2
VC++Files/client/mysqlimport.dsp:
  Updated to 4.0.2
VC++Files/client/mysqlshow.dsp:
  Updated to 4.0.2
VC++Files/innobase/innobase.dsp:
  Updated to 4.0.2
VC++Files/libmysql/libmySQL.dsp:
  Updated to 4.0.2
VC++Files/libmysqltest/myTest.dsp:
  Updated to 4.0.2
VC++Files/merge/merge.dsp:
  Updated to 4.0.2
VC++Files/myisam/myisam.dsp:
  Updated to 4.0.2
VC++Files/mysql.dsw:
  Updated to 4.0.2
VC++Files/mysqlbinlog/mysqlbinlog.dsp:
  Updated to 4.0.2
VC++Files/mysqlcheck/mysqlcheck.dsp:
  Updated to 4.0.2
VC++Files/mysqlmanager/MySqlManager.dsp:
  Updated to 4.0.2
VC++Files/mysys/mysys.dsp:
  Updated to 4.0.2
VC++Files/pack_isam/pack_isam.dsp:
  Updated to 4.0.2
VC++Files/perror/perror.dsp:
  Updated to 4.0.2
VC++Files/replace/replace.dsp:
  Updated to 4.0.2
VC++Files/sql/mysqld.dsp:
  Updated to 4.0.2
VC++Files/test1/test1.dsp:
  Updated to 4.0.2
VC++Files/thr_insert_test/thr_insert_test.dsp:
  Updated to 4.0.2
VC++Files/thr_test/thr_test.dsp:
  Updated to 4.0.2
VC++Files/vio/vio.dsp:
  Updated to 4.0.2
VC++Files/zlib/zlib.dsp:
  Updated to 4.0.2
include/config-win.h:
  Added isnan() and finite()
include/myisam.h:
  Move thr_xxx functions to myisam_priv.h
myisam/mi_check.c:
  Portability fix.
myisam/mi_locking.c:
  Comment cleanup
myisam/myisamchk.c:
  Removed compiler warning
myisam/myisamdef.h:
  Added thr_xxx functions
myisam/sort.c:
  Portability fix
sql/field.cc:
  Portability fix
sql/sql_insert.cc:
  R
2002-06-28 17:26:11 +03:00

2529 lines
68 KiB
C++

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
#include "initsetup.h"
#include "db.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include <shellapi.h>
#include <registry.hpp>
#include <winsvc.h>
#include <winsock.h>
#include <shlobj.h>
#include <IniFiles.hpp>
#include <dir.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <deque.h>
#include <vector.h>
#include <fstream.h>
#include <iostream.h>
#include <iterator.h>
#include <sstream.h>
#include "mysql.h"
#include <Printers.hpp>
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<string> v;
deque<string> 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<string>::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<string>::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 = "";
}
}
//---------------------------------------------------------------------------