⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vrecordset.cpp

📁 otl简单包装实现类,对数据库进行操作的,简单易用.
💻 CPP
字号:
/***************************************************************************                          vrecordset.cpp  -  description                             -------------------    begin                : 2004-12-25    copyright            : (C) 2004 by LiuZhong    email                : easeliu@vip.sina.com.cn ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * ***************************************************************************/#include "vrecordset.h"//------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------const char VRecordSet::scNull[]={0,0};VRecordSet::VRecordSet(){	m_conn = NULL;	m_sql = NULL;	m_set = NULL;	m_offset = NULL;	m_bEof = true;	m_bBof = true;	m_iRows = m_iPos = -1;}VRecordSet::~VRecordSet(){    DisConnect();}bool VRecordSet::Connect(char *szDBName,int Port){	if (m_conn)	return false;	m_conn = mysql_init(NULL);	if (m_conn == NULL)	return false;		if (mysql_real_connect(m_conn, NULL, NULL, NULL, szDBName, Port, NULL, 0) == NULL)	{		mysql_close(m_conn);		m_conn = NULL;		return false;	}		return true;}void VRecordSet::DisConnect(){	if (m_conn != NULL)	{	  	Close();		mysql_close(m_conn);		m_conn = NULL;	}}bool VRecordSet::Execute(char *szSQL){	if (m_conn != NULL)	{		return mysql_query(m_conn, szSQL) == 0;	}    else return false;}bool VRecordSet::Open(char *szSQL){	if (m_conn == NULL)	{		return false;	}	if (mysql_query(m_conn, szSQL) == 0)	{	  	m_sql = new char[strlen(szSQL)+1];		strcpy(m_sql, szSQL);		m_set = mysql_store_result(m_conn);		if (m_set == NULL)		{			m_bBof = m_bEof = true;		}		else		{			m_iRows = mysql_num_rows(m_set);			if (m_iRows == 0)				m_bBof = m_bEof = true;			else				MoveFirst();		}		return true;	}	return false;}void VRecordSet::Close(){	if(m_sql){	  	delete []m_sql;	    m_sql = NULL;	}	    	if (m_set)	{		mysql_free_result(m_set);				m_set = NULL;		m_offset = NULL;		m_bEof = true;		m_bBof = true;		m_iPos = -1;		m_iRows = -1;	}}bool VRecordSet::MoveFirst(){	if (m_set)	{		m_iPos = 0;		mysql_data_seek(m_set, m_iPos);		m_offset = mysql_row_tell(m_set);		m_bBof = false;		m_bEof = false;		return true;	}	return false;}bool VRecordSet::MoveLast(){	if (m_set)	{		m_iPos = m_iRows - 1;		mysql_data_seek(m_set, m_iPos);		m_offset = mysql_row_tell(m_set);				m_bEof = false;		m_bBof = false;		return true;	}		return false;}bool VRecordSet::MoveNext(){	if (m_set)	{		m_iPos++;		if (m_iPos >= m_iRows)		{			m_bEof = true;			m_bBof = false;			m_offset = NULL;		}		else		{			mysql_data_seek(m_set, m_iPos);			m_offset = mysql_row_tell(m_set);		}		return true;	}	return false;}bool VRecordSet::MovePrev(){	if (m_set)	{		m_iPos--;		if (m_iPos < 0)		{			m_bBof = true;			m_bEof = false;			m_offset = NULL;		}		else		{			mysql_data_seek(m_set, m_iPos);			m_offset = mysql_row_tell(m_set);		}		return true;	}	return false;}int  VRecordSet::FieldNum(){	int Num = 0;	if(m_set){		Num = mysql_num_fields(m_set);	}	return Num;}char* VRecordSet::FieldName(unsigned short unFieldNo){	if(m_set && unFieldNo < mysql_num_fields(m_set)){	  	mysql_field_seek(m_set,unFieldNo);     	MYSQL_FIELD *field = mysql_fetch_field(m_set);      	if(field) return field->name;	}	return (char*)scNull;}char *VRecordSet::Field(char *szFieldName){	if (m_set && m_offset)	{		mysql_field_seek(m_set, 0);		MYSQL_FIELD *field;		for (unsigned int i = 0; i < mysql_num_fields(m_set); i++)		{			field = mysql_fetch_field(m_set);			if (strcmp(field->name, szFieldName) == 0)				return m_offset->data[i];		}	}		return (char*)scNull;}char *VRecordSet::Field(unsigned short unFieldNo){	if (m_offset)		return m_offset->data[unFieldNo];	return (char*)scNull;}bool VRecordSet::IsEof(){	return m_bEof;}bool VRecordSet::IsBof(){	return m_bBof;}int VRecordSet::Total(){ 	return m_iRows;}int VRecordSet::Current(){	return m_iPos;}bool VRecordSet::MoveTo(int iPos){	if (m_set && iPos >= 0 && iPos < m_iRows)	{		m_iPos = iPos;		mysql_data_seek(m_set, m_iPos);		m_offset = mysql_row_tell(m_set);		return true;	}	return false;}bool VRecordSet::Refresh(){	int iOldPos = m_iPos;	Close();	if (Open(m_sql))	{		if (iOldPos >= m_iRows)			return MoveLast();		if (iOldPos < 0)			return MoveFirst();		return MoveTo(iOldPos);	}	return false;}//------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------const char VSqlSet::scNull[]={0,0};VSqlSet::VSqlSet(){	m_conn = NULL;	m_sql = NULL;	m_set = NULL;	m_offset = NULL;	m_bEof = true;	m_bBof = true;	m_iRows = m_iPos = -1;}VSqlSet::~VSqlSet(){	Close();}void VSqlSet::SetDBConn(MYSQL* Conn){	m_conn = Conn;}bool VSqlSet::Open(char *szSQL){	if (m_conn == NULL) return false;	if (mysql_query(m_conn, szSQL) == 0)	{	  	m_sql = new char[strlen(szSQL)+1];		m_set = mysql_store_result(m_conn);		if (m_set == NULL)		{			m_bBof = m_bEof = true;		}		else		{			m_iRows = mysql_num_rows(m_set);			if (m_iRows == 0)				m_bBof = m_bEof = true;			else				MoveFirst();		}		return true;	}	return false;}void VSqlSet::Close(){    if(m_sql){	  	delete []m_sql;	   	m_sql = NULL;	}	if (m_set)	{		mysql_free_result(m_set);		m_set = NULL;		m_offset = NULL;		m_bEof = true;		m_bBof = true;		m_iPos = -1;		m_iRows = -1;	}}bool VSqlSet::MoveFirst(){	if (m_set)	{		m_iPos = 0;		mysql_data_seek(m_set, m_iPos);		m_offset = mysql_row_tell(m_set);		m_bBof = false;		m_bEof = false;		return true;	}	return false;}bool VSqlSet::MoveLast(){	if (m_set)	{		m_iPos = m_iRows - 1;		mysql_data_seek(m_set, m_iPos);		m_offset = mysql_row_tell(m_set);		m_bEof = false;		m_bBof = false;		return true;	}	return false;}bool VSqlSet::MoveNext(){	if (m_set)	{		m_iPos++;		if (m_iPos >= m_iRows)		{			m_bEof = true;			m_bBof = false;			m_offset = NULL;		}		else		{			mysql_data_seek(m_set, m_iPos);			m_offset = mysql_row_tell(m_set);		}		return true;	}	return false;}bool VSqlSet::MovePrev(){	if (m_set)	{		m_iPos--;		if (m_iPos < 0)		{			m_bBof = true;			m_bEof = false;			m_offset = NULL;		}		else		{			mysql_data_seek(m_set, m_iPos);			m_offset = mysql_row_tell(m_set);		}		return true;	}	return false;}int  VSqlSet::FieldNum(){	int Num = 0;	if(m_set){		Num = mysql_num_fields(m_set);	}	return Num;}char* VSqlSet::FieldName(unsigned short unFieldNo){	if(m_set && unFieldNo < mysql_num_fields(m_set)){	  	mysql_field_seek(m_set,unFieldNo);     	MYSQL_FIELD *field = mysql_fetch_field(m_set);      	if(field) return field->name;	}	return (char*)scNull;}char *VSqlSet::Field(char *szFieldName){	if (m_set && m_offset)	{		mysql_field_seek(m_set, 0);		MYSQL_FIELD *field;		for (unsigned int i = 0; i < mysql_num_fields(m_set); i++)		{			field = mysql_fetch_field(m_set);			if (strcmp(field->name, szFieldName) == 0)				return m_offset->data[i];		}	}	return (char*)scNull;}char *VSqlSet::Field(unsigned short unFieldNo){	if (m_offset)		return m_offset->data[unFieldNo];	return (char*)scNull;}int   VSqlSet::FieldLength(char *szFieldName){	int Len=-1;	if (m_set && m_offset)	{		mysql_field_seek(m_set, 0);		MYSQL_FIELD *field;		for (unsigned int i = 0; i < mysql_num_fields(m_set); i++)		{			field = mysql_fetch_field(m_set);			if (strcmp(field->name, szFieldName) == 0){				unsigned long* lengths = mysql_fetch_lengths(m_set);				if(lengths){					Len = lengths[i];				}			}		}	}	return Len;}int   VSqlSet::FieldLength(unsigned short unFieldNo){	int Len=-1;	if(m_set && m_offset)	{		unsigned long* lengths = mysql_fetch_lengths(m_set);		if(lengths){			Len = lengths[unFieldNo];		}	}}bool VSqlSet::IsEof(){	return m_bEof;}bool VSqlSet::IsBof(){	return m_bBof;}int VSqlSet::Total(){ 	return m_iRows;}int VSqlSet::Current(){	return m_iPos;}bool VSqlSet::MoveTo(int iPos){	if (m_set && iPos >= 0 && iPos < m_iRows)	{		m_iPos = iPos;		mysql_data_seek(m_set, m_iPos);		m_offset = mysql_row_tell(m_set);		return true;	}	return false;}bool VSqlSet::Refresh(){	int iOldPos = m_iPos;	Close();	if (Open(m_sql))	{		if (iOldPos >= m_iRows)			return MoveLast();		if (iOldPos < 0)			return MoveFirst();		return MoveTo(iOldPos);	}	return false;}//------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------VSqlBase::VSqlBase(){	m_Conn = NULL;		m_Host = NULL;	m_Port = 0;	m_User = NULL;	m_Password = NULL;}VSqlBase::~VSqlBase(){    Close();}void VSqlBase::SetHostInfo(char* Host,int Port){	if(m_Host){		delete []m_Host;		m_Host = NULL;	}	if(Host){		m_Host = new char[strlen(Host)+1];		strcpy(m_Host,Host);	}	m_Port = Port;}void VSqlBase::SetUserInfo(char* User,char* Password){	if(m_User){		delete []m_User;		m_User = NULL;	}	if(m_Password){		delete []m_Password;		m_Password = NULL;	}	if(User){		m_User = new char[strlen(User)+1];		strcpy(m_User,User);	}	if(Password){		m_Password = new char[strlen(Password)+1];		strcpy(m_Password,Password);	}}bool VSqlBase::Open(char *szDBName){	if (m_Conn)	return false;	m_Conn = mysql_init(NULL);	if (m_Conn == NULL)	return false;	if (mysql_real_connect(m_Conn, m_Host, m_User, m_Password, szDBName, m_Port, NULL, 0) == NULL)	{		mysql_close(m_Conn);		m_Conn = NULL;		return false;	}	return true;}VSqlSet* VSqlBase::NewSet(){	VSqlSet* pSet = NULL;	if(m_Conn){	 	pSet = new VSqlSet;  		pSet->SetDBConn(m_Conn);    }    return pSet;}bool VSqlBase::IsConnected(){ 	return m_Conn;}void VSqlBase::Close(){	if (m_Conn != NULL)	{		mysql_close(m_Conn);		m_Conn = NULL;	}}bool VSqlBase::Execute(char* szSQL){	if (m_Conn != NULL)	{		return mysql_query(m_Conn, szSQL) == 0;	}    else return false;}bool VSqlBase::Execute(char* szSQL,char* szDBName,char* Host,int Port,char* User,char* Password){	MYSQL* Conn;	Conn = mysql_init(NULL);	if (Conn == NULL)	return false;	if (mysql_real_connect(Conn, Host, User, Password, szDBName, Port, NULL, 0) == NULL)	{		mysql_close(Conn);		return false;	}	int iSuccess = mysql_query(Conn, szSQL);	mysql_close(Conn);	return iSuccess;                      }//------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -