Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
MySQL + Visual C++ 6.0 (Ярослав) 31/08/2002 - 16:58:12
      Re: MySQL + Visual C++ 6.0 (vi.k) 02/09/2002 - 03:37:46
      Re: MySQL + Visual C++ 6.0 (Ярослав) 03/09/2002 - 15:15:27
      Re: MySQL + Visual C++ 6.0 (vi.k) 09/09/2002 - 16:54:13
      Re: MySQL + Visual C++ 6.0 (Ярослав) 11/09/2002 - 17:49:59

> Original message text:
> From: Ярослав - 31/08/2002 - 16:58:12
> Subject:MySQL + Visual C++ 6.0
> -----------------
> Я использовал в программе свой класс написанный с использованием MySQL C API. Но при использовании функций API возникают проблемы с памятью, могут обнулиться переменные. Причем ошибки всплывают в самых неожиданных местах в коде, который без использования функций работает идеально.
> Подскажите пожалуйста, есть ли готовые компоненты под Visual C++ или какая - нибудь дока или примеры использования MySQL C API именно с Visual C++ в объектно-ориентированном стиле.
>
> Если есть желание разобраться подробнее, вышлю исходный код класса.
>


From: Ярослав - 03/09/2002 - 15:15:27
Subject:MySQL + Visual C++ 6.0
-----------------
Заголовочный файл

// TMySQLServer.h: interface for the TMySQLServer class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_TMYSQLSERVER_H__A8DA9CBB_9C6D_4564_B4C4_671513BB194A__INCLUDED_)
#define AFX_TMYSQLSERVER_H__A8DA9CBB_9C6D_4564_B4C4_671513BB194A__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <windows.h>
#include "e:\Program Files\mysql\include\mysql.h"
#include <string>
#include <vector>

using namespace std ;

class TMySQLServer
{
private:
HINSTANCE dllInstance;
typedef MYSQL* (__stdcall *TMysqlInit)(MYSQL *mysql);
typedef MYSQL* (__stdcall *TMysqlConnect)(MYSQL *mysql,const char *host,const char *user,const char *passwd);
typedef MYSQL* (__stdcall *TMysqlRealConnect)(MYSQL *mysql,const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned int client_flag);
typedef int (__stdcall *TMysqlSelectdb)(MYSQL *mysql, const char *db);
typedef int (__stdcall *TMysqlQuery)(MYSQL *mysql, const char *query);
typedef int (__stdcall *TMysqlRealQuery)(MYSQL *mysql, const char *query, unsigned int length);
typedef int (__stdcall *TMysqlEscapeString)(char *to, const char *from, unsigned int length);
typedef void (__stdcall *TMysqlClose)(MYSQL *mysql);
typedef char* (__stdcall *TMysqlError)(MYSQL *mysql);
typedef void (__stdcall *TMysqlFreeResult)(MYSQL_RES *result);
typedef int (__stdcall *TMysqlNumRows)(MYSQL_RES *result);
typedef int (__stdcall *TMysqlNumFields)(MYSQL_RES *result);
typedef MYSQL_ROW (__stdcall *TMysqlFetchRow)(MYSQL_RES *result);
typedef MYSQL_RES* (__stdcall *TMysqlStoreResult)(MYSQL *mysql);
typedef MYSQL_RES* (__stdcall *TMysqlListdbs)(MYSQL *mysql, const char *wild);
typedef MYSQL_RES* (__stdcall *TMysqlListTables)(MYSQL *mysql, const char *wild);

TMysqlInit MysqlInit;
TMysqlConnect MysqlConnect;
TMysqlRealConnect MysqlRealConnect;
TMysqlSelectdb MysqlSelectdb;
TMysqlQuery MysqlQuery;
TMysqlRealQuery MysqlRealQuery;
TMysqlEscapeString MysqlEscapeString;
TMysqlClose MysqlClose;
TMysqlError MysqlError;
TMysqlFreeResult MysqlFreeResult;
TMysqlNumRows MysqlNumRows;
TMysqlNumFields MysqlNumFields;
TMysqlFetchRow MysqlFetchRow;
TMysqlStoreResult MysqlStoreResult;
TMysqlListdbs MysqlListdbs;
TMysqlListTables MysqlListTables;

const char *DatabaseName;
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;

public:
bool Connected;
string ServerAdress,UserName,Passwd,Error;
string SQL;
int rows;
int fields;
vector<string> Result;

int Connect(string Adress, string User, string Password);
int Connect();
int DisConnect();
int DatabaseExists(string Database);
int TableExists(string Database, string Table);
int QueryExecute(string Database);
int QueryOpen(string Database);
void QueryClose();
int StoreResult();
string EscapeString(string fromstr);
TMySQLServer();
virtual ~TMySQLServer();

};
#endif // !defined(AFX_TMYSQLSERVER_H__A8DA9CBB_9C6D_4564_B4C4_671513BB194A__INCLUDED_)


Исполняемый файл

// TMySQLServer.cpp: implementation of the TMySQLServer class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TMySQLServer.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

TMySQLServer::TMySQLServer()
{
string APchar;
char Name[50];
GetWindowsDirectory(Name,50);
APchar=Name;
string AddressDLL=APchar+"\\libmySQL.dll";
dllInstance=LoadLibrary(AddressDLL.c_str());
//Функции
MysqlInit=(TMysqlInit)GetProcAddress(dllInstance,"mysql_init");
MysqlConnect=(TMysqlConnect)GetProcAddress(dllInstance,"mysql_connect");
MysqlRealConnect=(TMysqlRealConnect)GetProcAddress(dllInstance,"mysql_real_connect");
MysqlSelectdb=(TMysqlSelectdb)GetProcAddress(dllInstance,"mysql_select_db");
MysqlQuery=(TMysqlQuery)GetProcAddress(dllInstance,"mysql_query");
MysqlRealQuery=(TMysqlRealQuery)GetProcAddress(dllInstance,"mysql_real_query");
MysqlEscapeString=(TMysqlEscapeString)GetProcAddress(dllInstance,"mysql_escape_string");
MysqlClose=(TMysqlClose)GetProcAddress(dllInstance,"mysql_close");
MysqlError=(TMysqlError)GetProcAddress(dllInstance,"mysql_error");
MysqlNumRows=(TMysqlNumRows)GetProcAddress(dllInstance,"mysql_num_rows");
MysqlNumFields=(TMysqlNumFields)GetProcAddress(dllInstance,"mysql_num_fields");
MysqlFetchRow=(TMysqlFetchRow)GetProcAddress(dllInstance,"mysql_fetch_row");
MysqlFreeResult=(TMysqlFreeResult)GetProcAddress(dllInstance,"mysql_free_result");
MysqlStoreResult=(TMysqlStoreResult)GetProcAddress(dllInstance,"mysql_store_result");
MysqlListdbs=(TMysqlListdbs)GetProcAddress(dllInstance,"mysql_list_dbs");
MysqlListTables=(TMysqlListTables)GetProcAddress(dllInstance,"mysql_list_tables");

ServerAdress="localhost";
UserName="root";
Passwd="";
Connected=false;
res=0;
}

TMySQLServer::~TMySQLServer()
{
}

int TMySQLServer::Connect(string Adress, string User, string Password)
{
if (Connected==true) return 0;
const char *AdressServer=Adress.c_str();
const char *U=User.c_str();
const char *P=Password.c_str();
ServerAdress=Adress;
UserName=User;
Passwd=Password;
if (!MysqlInit(&mysql)) return -1;
//Соединяемся с сервером
if (!MysqlRealConnect(&mysql,AdressServer,U,P,"",0,"",0))
{
char *n=MysqlError(&mysql);
Error=n;
return -1;
};
Connected=true;
return 0;
}

int TMySQLServer::Connect()
{
if (Connected==true) return 0;
const char *AdressServer=ServerAdress.c_str();
const char *U=UserName.c_str();
const char *P=Passwd.c_str();
//Соединяемся с сервером
if (!MysqlInit(&mysql)) return -1;
if (!MysqlRealConnect(&mysql,AdressServer,U,P,"",0,"",0))
{
char *n=MysqlError(&mysql);
Error=n;
return -1;
};
Connected=true;
return 0;
}

int TMySQLServer::DisConnect()
{
if (Connected==false) return 0;
MysqlClose(&mysql);
Connected=false;
return 0;
}

int TMySQLServer::DatabaseExists(string Database)
{
if (Connected==false) Connect();
int Result=0;
res=MysqlListdbs(&mysql,(char*)NULL);
if (res==0)
{
char *Err=MysqlError(&mysql);
Error=Err;
return -1;
};
rows=MysqlNumRows(res);
for (int i=0; i<rows; i++)
{
row=MysqlFetchRow(res);
const char *ptr=row[0];
string T=ptr;
if (T==Database)
{
Result=1;
break;
};
};
MysqlFreeResult(res);
return Result;
}

int TMySQLServer::TableExists(string Database, string Table)
{
if (Connected==false) Connect();
int Result=0;
int c;
const char *Base=Database.c_str();
c=MysqlSelectdb(&mysql, Base);
if (c!=0)
{
char *Err=MysqlError(&mysql);
Error=Err;
return -1;
};
res=MysqlListTables(&mysql,(char*)NULL);
if (res==0)
{
char *Err=MysqlError(&mysql);
Error=Err;
return -1;
};
rows=MysqlNumRows(res);
for (int i=0; i<rows; i++)
{
row=MysqlFetchRow(res);
const char *ptr=row[0];
string T=ptr;
if (T==Table)
{
Result=1;
break;
};
};
MysqlFreeResult(res);
return Result;
}

int TMySQLServer::QueryExecute(string Database)
{
if (Connected==false) Connect();
int c;
const char *Base=Database.c_str();
c=MysqlSelectdb(&mysql, Base);
if (c!=0)
{
char *Err=MysqlError(&mysql);
Error=Err;
return -1;
};
const char *Text=SQL.c_str();
c=MysqlRealQuery(&mysql,Text,SQL.size());
if (c!=0)
{
char *Err=MysqlError(&mysql);
Error=Err;
return -1;
};
rows=-1;
fields=-1;
return 0;
}

int TMySQLServer::QueryOpen(string Database)
{
if (Connected==false) Connect();
int c;
const char *Base=Database.c_str();
c=MysqlSelectdb(&mysql, Base);
if (c!=0)
{
char *Err=MysqlError(&mysql);
Error=Err;
return -1;
};
const char *Text=SQL.c_str();
int Check=SQL.size();
c=MysqlRealQuery(&mysql,Text,SQL.size());
if (c!=0)
{
char *Err=MysqlError(&mysql);
Error=Err;
return -1;
};
//получили результат
//if (res!=NULL) MysqlFreeResult(res);
res=MysqlStoreResult(&mysql);
if (res==0)
{
char *Err=MysqlError(&mysql);
Error=Err;
return -1;
};
fields=MysqlNumFields(res);
rows=MysqlNumRows(res);
return 0;
}

int TMySQLServer::StoreResult()
{
row=MysqlFetchRow(res);
//очистили список
while (Result.size()!=0) Result.pop_back();
//внесли результат в список
if (row==NULL) return -1;
for (int i=0; i<fields; i++)
{
string Str;
if (row[i]=="") Str=" ";
else
{
Str=row[i];
};
Result.push_back(Str);
};
return 0;
}

void TMySQLServer::QueryClose()
{
MysqlFreeResult(res);
res=0;
}

string TMySQLServer::EscapeString(string fromstr)
{
const char *from=fromstr.c_str();
char to[200];
ZeroMemory(to,sizeof(to));
MysqlEscapeString(to,from,fromstr.size());
string RText=to;
return RText;
}


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
4577



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |