Conexão Oracle Database- CDatabase – ODBC – Win32 – x64 – MFC – C++

Publicado: 9 de maio de 2014 em C/C++

MFC fornece dois conjuntos distintos de classes para acessar banco de dados: um para permitir o acesso através de DAO, e outros através de ODBC. O método DAO é geralmente usado para acessar bancos de dados desktop e o método ODBC para conectar-se servidores de banco de dados relacionais através de uma fonte de dados.

Oracle - ODBC

Oracle – ODBC

ODBC

O Microsoft Open Database Connectivity (ODBC) é uma interface de linguagem de programação C, que torna possível que aplicativos acessem dados de uma variedade de sistemas de gerenciamento de banco de dados (SGBD). ODBC é escrita em baixo nível, e uma interface de alto desempenho que é projetado especificamente para armazenamentos de dados relacionais.

O Microsoft Foundation Classes (MFC) fornece bibliotecas de classes para programação com Open Database Connectivity (ODBC).

CDatabase

Representa uma conexão com uma fonte de dados, através do qual você pode operar com esta fonte de dados.

Conectando ao banco de dados Oracle XE

1 – Crie um novo projeto C++ MFC Application Dialog Based, coloque no dialogo 4 componentes Static Text, 3 componentes Edit Control, e um Button, disponha os componentes como na figura abaixo:

Design

Design

2 – No painel de controle escolha a opção ferramentas administrativas e abra a opção Fontes de Dados ODBC para 32 ou 64bits, na guia DNS de Usuário, clique em adicionar e selecione o driver correspondente ao Oracle XE:

Driver Oracle

Driver Oracle

3 – Crie os parâmetros de conexão contendo um nome para sua fonte de dados no qual será seu DNS e crie os parâmetros comuns para se conectar ao Oracle XE, teste sua conexão e clique em OK:

DNS OracleXE

DNS OracleXE

4 – Use os trechos marcados do código abaixo para completar seu código gerado automaticamente

Exemplo:

Neste exemplo efetuamos uma conexão ao banco de dados através de um DNS ODBC usando a classe CDatabase.

C++


// OraclecppDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Oraclecpp.h"
#include "OraclecppDlg.h"
#include "afxdialogex.h"

// Inclui classe de banco de dados MFC
#include "afxdb.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

COraclecppDlg::COraclecppDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(COraclecppDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void COraclecppDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_EDIT1, m_usuario);
	DDX_Control(pDX, IDC_EDIT2, m_senha);
	DDX_Control(pDX, IDC_EDIT3, m_sid);
}

BEGIN_MESSAGE_MAP(COraclecppDlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, &COraclecppDlg::OnBnClickedButton1)
END_MESSAGE_MAP()

BOOL COraclecppDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	SetIcon(m_hIcon, TRUE);
	SetIcon(m_hIcon, FALSE);	

	return TRUE;
}

void COraclecppDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); 

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

HCURSOR COraclecppDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

// Desenvolvimento Aberto
// nosso código começa aqui.

// Cria menssagem
int menssagem(bool correto)
{
	LPCWSTR msg;

	if (correto)
	{
		msg = L"Conectado com sucesso!";
	}
	else
	{
		msg = L"Erro na conexão";
	}

	int msgboxID = MessageBox(
		NULL,
		msg,
		(LPCWSTR)L"Conexão",
		MB_ICONWARNING | MB_OK | MB_DEFBUTTON2
		);

	switch (msgboxID)
	{
	case IDOK:

		break;
	}

	return msgboxID;
}

// Clique do Botão
void COraclecppDlg::OnBnClickedButton1()
{
	// Cria classe conexão ODBC
	CDatabase db;

	// Declara variaveis
	CString usuario;
	CString senha;
	CString fonte;
	CString conexao;

	// Alimenta variaveis
	m_sid.GetWindowTextW(fonte);
	m_usuario.GetWindowTextW(usuario);
	m_senha.GetWindowTextW(senha);

	// Cria string de conexão
	conexao = L"DSN=" + fonte + L";UID=" + usuario + L";PWD=" + senha;

	// Conecta ao banco de dados
	db.OpenEx(conexao, 0); 

	// Verifica conexão
	if (db.IsOpen())
	{
		menssagem(true);
	}
	else
	{
		menssagem(false);
	}	  

}
comentários

Deixe um comentário