📄 vrecordset.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 + -