📄 dbmysql.~cpp
字号:
//---------------------------------------------------------------------------
#pragma hdrstop
#include "dbmysql.h"
#include <stdio.h>
#include <dir.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
CDBMySQL::CDBMySQL()
{
strcpy(m_ClassName,STR_MYSQL);
strcpy(m_Driver,"MySQL"); //初始值
}
CDBMySQL::~CDBMySQL()
{
}
//AnsiString ConnString="Provider=SQLOLEDB.1;Persist Security Info=False;"
// "User ID=sa;Initial Catalog=tempdb;Data Source=Server name";//?
// Microsoft OLE db provider for SQL Server
//采用父类的连接
//bool CDBMySQL::ConnectDB (char *szhostserver,char *szUser,char *szPassWord,char *szDBName)
//{
//通过OLE
/* strcpy(szConStr,"Provider=SQLOLEDB.1");
if(szhostserver)
{
sprintf(sztmp,";SERVER=%s",szhostserver);
strcat(szConStr,sztmp);
}
if(szUser)
{
sprintf(sztmp,";UID=%s",szUser);
strcat(szConStr,sztmp);
}
if(szPassWord)
{
sprintf(sztmp,";PWD=%s",szPassWord);
strcat(szConStr,sztmp);
}
if(szDBName)
{
sprintf(sztmp,";DATABASE=%s",szDBName);
strcat(szConStr,sztmp);
}
return ConnectDBByStr(szConStr);*/
//}
bool CDBMySQL::LockTables(char *tables)
{
return false;
}
bool CDBMySQL::UnlockTables(char *tables)
{
return false;
}
bool CDBMySQL::GetAllDB (char * szDBName,int iSize)
{
int offset=0,len;
memset(szDBName,0,iSize);
if(Query("Show Databases"))
{
First();
for(int id=0;id<iRecordCount&&szDBName;id++)
{
GetDataValue("Database",&len);
if(len+offset>=iSize-2)
len=iSize-2-offset;
if(len>0)
{
strncpy(&szDBName[offset],GetDataValue("Database"),len);
offset+=len;
szDBName[offset]='\n';
offset++;
}
else
break;
Next();
}
}
else
return false;
return true;
}
bool CDBMySQL::GetAllUser (DB_USER_INFO * szUser,int iInNum,int *iOutNum)
{
DB_USER_INFO *userinfo;
char sql[560];
// if(!mDatabase->Connected&&!mQuery[CurrQuery]->Active)
// return false;
if(Query("select host,user,password from mysql.user"))
{
First();
for(int id=0;id<iRecordCount&&id<iInNum&&szUser;id++)
{
//if((int)(id*sizeof(USER_INFO))>=iSize)
// return true;
userinfo=(DB_USER_INFO *)&szUser[id];
memset(userinfo,0,sizeof(DB_USER_INFO));
strcpy(userinfo->szHost,GetDataValue("host"));
strcpy(userinfo->szUser,GetDataValue("user"));
strcpy(userinfo->szPassword,GetDataValue("password"));
Next();
}
}
else
return false;
return true;
}
/*bool CDBFaceBase::GetAllDSN (char * szDBDSN,int iSize)
{
int offset=0,len;
int idx;
AnsiString dn;
TStringList *MyStringList = new TStringList;
TStringList *MyStringListPara = new TStringList;
try
{
memset(szDBDSN,0,iSize);
Session->GetDatabaseNames(MyStringList);
for(int id=0;id<MyStringList->Count;id++)
{
dn=Session->GetAliasDriverName(MyStringList->Strings[id]);
if(idx>=0&&strstr(dn.c_str(),"MySQL"))
{
len=MyStringList->Strings[id].Length();
if(len+offset>=iSize-2)
len=iSize-2-offset;
if(len>0)
{
strncpy(&szDBDSN[offset],MyStringList->Strings[id].c_str(),len);
offset+=len;
szDBDSN[offset]='\n';
offset++;
}
else
break;
}
}
}
catch(...)
{
delete MyStringList;
delete MyStringListPara;
return false;
}
delete MyStringList;
delete MyStringListPara;
return true;
*/
bool CDBMySQL::SetUserRole (DB_USER_INFO *userinfo,char *szDBName)
{
char cmd[256],str[120];
if(userinfo)
{
if(szDBName&&szDBName[0])
sprintf(cmd,"grant all privileges ON %s.* ",szDBName);
else
sprintf(cmd,"grant all privileges ON *.* ");
if(userinfo->szUser[0])
sprintf(str," TO '%s'",userinfo->szUser);
else
sprintf(str," TO ''");
strcat(cmd,str);
if(userinfo->szHost[0])
sprintf(str,"@'%s' ",userinfo->szHost);
else
sprintf(str,"@'%%' ");
strcat(cmd,str);
sprintf(str," identified by '%s' with grant option",userinfo->szPassword);
strcat(cmd,str);
return ExecSQLCmd(cmd);
}
return false;
}
bool CDBMySQL::DeleteUser(DB_USER_INFO *UserInfo)
{
char cmd[256];
sprintf(cmd,"delete from mysql.user where host='%s' and user='%s';FLUSH PRIVILEGES",
UserInfo->szHost,UserInfo->szUser);
return ExecSQLCmd(cmd);
}
//bool CDBMySQL::Backup(char *backstr,char *pathname,void *callback)
// bool Restore(char *backstr,char *pathname,void *callback);
bool CDBMySQL::Backup(char *db,char *username,char *password,char *pathname,void *callback)
{
char OldPath[MAX_PATH+1],MySQLPath[MAX_PATH+1],*pp;
getcwd(OldPath,MAX_PATH);
HKEY hKey;
int re;
DWORD type,lpcbData=MAX_PATH ;
char command[MAX_PATH],cmd[MAX_PATH+4560]={0};
//HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager PendingFileRenameOperations
//HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySql
re=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet001\\Services\\MySql",
0,KEY_ALL_ACCESS,
&hKey);
if(re==ERROR_SUCCESS)
{
RegQueryValueEx(hKey,
"ImagePath",
NULL,
&type,
MySQLPath,
&lpcbData);
}
else
strcpy(MySQLPath,"C:/mysql/bin/mysqld-nt.exe");
RegCloseKey(hKey);
char *pos=strstr(MySQLPath,"mysqld");
if(pos)
pos[0]=0;
if(MySQLPath[0]=='\"')
pp=MySQLPath+1;
else
pp=MySQLPath;
memset(command,0,sizeof(command));
sprintf(command,"%smysqldump.exe",pp);
sprintf(cmd," --opt -r \"%s\" -u%s -p%s -B %s",pathname,username,password,db);
STARTUPINFO startinfo;
PROCESS_INFORMATION info;
memset(&startinfo,0,sizeof(STARTUPINFO));
memset(&info,0,sizeof(PROCESS_INFORMATION));
startinfo.dwFlags=STARTF_USESHOWWINDOW;
startinfo.wShowWindow=SW_HIDE;
if(CreateProcess(command,cmd,NULL,NULL,
false,CREATE_NEW_CONSOLE,NULL,pp,&startinfo,&info)==0)
return false;
chdir(OldPath);
return true;
}
bool CDBMySQL::Restore(char *db,char *username,char *password,char *pathname,void *callback)
{
char OldPath[MAX_PATH],MySQLPath[MAX_PATH],*pp;
getcwd(OldPath,MAX_PATH-1);
HKEY hKey;
int re;
DWORD type,lpcbData=MAX_PATH ;
char command[MAX_PATH],cmd[MAX_PATH+4560]={0};
// PROCESS_INFORMATION ProcessInfo;
re=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet001\\Services\\MySql",
0,KEY_ALL_ACCESS,
&hKey);
if(re==ERROR_SUCCESS)
{
RegQueryValueEx(hKey,
"ImagePath",
NULL,
&type,
MySQLPath,
&lpcbData);
}
else
strcpy(MySQLPath,"C:/mysql/bin/mysqld-nt.exe");
RegCloseKey(hKey);
char *pos=strstr(MySQLPath,"mysqld");
if(pos)
pos[0]=0;
if(MySQLPath[0]=='\"')
pp=MySQLPath+1;
else
pp=MySQLPath;
memset(command,0,sizeof(command));
sprintf(command,"%smysql.exe",pp);
// sprintf(command,"%s/mysql.exe ",MySQLPath);
if(db)
sprintf(cmd," -e \"source %s\" -u%s -p%s -B %s",pathname,username,password,db);
else
sprintf(cmd," -e \"source %s\" -u%s -p%s",pathname,username,password);
STARTUPINFO startinfo;
PROCESS_INFORMATION info;
memset(&startinfo,0,sizeof(STARTUPINFO));
memset(&info,0,sizeof(PROCESS_INFORMATION));
startinfo.dwFlags=STARTF_USESHOWWINDOW;
startinfo.wShowWindow=SW_HIDE;
// memset(&ProcessInfo,0,sizeof(ProcessInfo));
if(CreateProcess(command,cmd,NULL,NULL,
false,CREATE_NEW_CONSOLE,NULL,pp,&startinfo,&info))
WaitForSingleObject(info.hProcess,INFINITE);
else
return false;
chdir(OldPath);
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -