|
µî±Þ : ÃʱÞ
ADO oledb¸¦ ÀÌ¿ëÇÑ °£´ÜÇÑ DBÁ¶ÀÛ¿¡ °ü·ÃµÈ °ÁÂÀÔ´Ï´Ù.
¾Æ½Ã°ÚÁö¸¸ DBÁ¶ÀÛÀº ODBC¸¦ ÀÌ¿ëÇϰųª OLEDB µîÀ» ÀÌ¿ëÇØ °¡´ÉÇÕ´Ï´Ù.
ODBC´Â ¹èÆ÷½Ã ODBC¼³Á¤µîÀ» ÇØÁà¾ß(ÄÚµå·Î ´ëüÇÒ ¼ö ÀÖ½À´Ï´Ù.)
ÇϹǷΠ±ÍÂú±â¿¡ Àü VB°Ç ASP°Ç VC°Ç ¸ðµÎ OLEDB·Î ó¸®ÇÏ´Â ÆíÀÔ´Ï´Ù.
ªÀº °æÇè»ó Ã¥À» ÅëÇÑ Áö½Ä(Ŭ·¡½º¸¦ ÀÌ¿ëÇÑ DBÁ¶ÀÛ)Àº µüµüÇϱ⠱×Áö ¾ø½À´Ï´Ù.
ÀÌ´Â À§¿¡ ³ª¿ÇÑ ¾ð¾î¿Í °ü·ÃµÈ Ã¥ ¸ðµÎ µ¿ÀÏÇß½À´Ï´Ù.
(ƯÈ÷ VB·Î óÀ½ DBÁ¶ÀÛÀ̶õ°É °æÇèÇßÀ»¶§ DAO ÄÁÆ®·ÑÀ» ÅëÇØ ·¹Äڵ带 À̵¿½Ã۸ç
°øºÎÇßÀ»¶§ÀÇ ±× ¸·¸·ÇÔÀ̶õ..¤Ñ¤Ñ
JoinÀ̶õ ³à¼® ÀÚüµµ ¸ô¶ú±â¿¡ Å×ÀÌºí ¸¸Å ÄÁÆ®·Ñ »ý¼ºÇÏ°í ¾ïÁö·Î À̰Í
Àú°Í..¤Ñ¤Ñ)
¿©Æ°.. Àâ¼³Àº ±×¸¸µÎ°í.. °£´ÜÇÑ »ç¿ë ¿¹¸¦ µé¾îº¼±î ÇÕ´Ï´Ù.
[»çÀüÀÎÁö»çÇ×]
MyAdodb.h, MyAdodb.cpp : DB°ü·Ã º¯¼ö¿Í ÃʱâÈ ¿¬°áµîÀ» ´ã´çÇÕ´Ï´Ù.
SimpleAdoDlg.h SimpleAdoDlg.cpp : ½ÇÁúÀûÀÎ DBÁ¶ÀÛÀ» ´ã´çÇÕ´Ï´Ù.
[Step 1 : MyAdodb.h, MyAdodb.cpp]
1.ÇÁ·ÎÁ§Æ® Çϳª¸¦ »ý¼ºÇÕ´Ï´Ù.
2.StdAfx.h¸¦ ¿¾î #import "C:\Program Files\Common Files\System\ado\msado15.dll"
no_namespace rename("EOF", "adoEOF")¸¦
º¹»çÇØ ³Ö½À´Ï´Ù.
3.COM ¶óÀ̺귯¸®¸¦ ÃʱâÈÇØ¾ß ÇÏ´Ï CoInitialize(0);¸¦ »ý¼ºÀÚ¿¡
Æ÷ÇÔ½Ãŵ´Ï´Ù.
ÀÌ¿Í ¹Ý´ë·Î ¼Ò¸êÀÚ¿£ CoUninitialize();¸¦ »ðÀÔÇÕ´Ï´Ù.
4. Ä¿³Ø¼Ç°ú Ä¿¸àµå ±×¸®°í ·¹ÄÚµå¼Â º¯¼ö¸¦ »ý¼ºÇØÁÝ´Ï´Ù.
_ConnectionPtr m_pConn; // Ä¿³Ø¼ÇÀº ¸» ±×´ë·Î DB¿ÍÀÇ
¿¬°áÀ» ´ã´çÇÕ´Ï´Ù. DBÀÇ Open, Close...
_RecordsetPtr m_pRs; //
·¹ÄÚµå¼Â ¶ÇÇÑ ¸» ±×´ë·Î Á¶È¸°á°úÀÎ ·¹ÄÚµåµéÀ» ´ã´çÇÕ´Ï´Ù. À̳༮À» ÅëÇÏ¿© Á¶È¸µÈ
°á°ú¸¦ MovenextµîÀ» ÀÌ¿ëÇØ ¿øÇÏ´Â °á°ú¹°À» ¾ò¾î³¾ ¼ö ÀÖ½À´Ï´Ù.
_CommandPtr m_pComm;// Ä¿¸àµå´Â ÀÌ ¿ª½Ã ¸í·É°ú °ü·ÃµÈ
³à¼®ÀÔ´Ï´Ù. Update¸¦ ÇØ¶ó´øÁö...
5.DB¿Í ¿¬°áÀ» ÇÕ´Ï´Ù.
BOOL CMyAdodb::InitDB(CString strUserId, CString strPassWord, CString strDbIp,
CString strDbName, CString strPort)
{
CString strConn = "";
strConn.Format("User ID=%s;Password=%s;Data
Source=%s;"
"Initial
Catalog=%s;Network Address=%s,%s;"
"Network
Library=dbmssocn",
strUserId,
strPassWord, strDbIp, strDbName, strDbIp, strPort);
m_pConn = new _ConnectionPtr("ADODB.Connection");
m_pRs = new _RecordsetPtr("ADODB.Recordset");
m_pRs->CursorType = adOpenDynamic;
m_pComm = NULL;
m_pConn->Provider = "SQLOLEDB";
m_pConn->ConnectionString = strConn.GetBuffer(0);
// Á¢¼Ó ½ºÆ®¸µ ¼³Á¤.
try
{
m_pConn->Open("","","",
adConnectUnspecified);
}catch(...)
{
return FALSE;
}
m_pComm.CreateInstance(__uuidof(Command));
m_pComm->ActiveConnection = m_pConn;
m_pComm->CommandType = adCmdText;
return TRUE;
}
¿©±â ±îÁö Çß´Ù¸é ÀÏ´Ü »çÀü Áغñ´Ü°è´Â ³¡³°Å¶óºÁµµ ¹«°üÇÕ´Ï´Ù.
ÀÌÁ¦ºÎÅÏ ½ÇÁúÀûÀÎ ¿¬°áÀÛ¾÷°ú Á¶È¸ ¼öÁ¤µîÀ» ÇØ º¼ Â÷·ÊÀÔ´Ï´Ù.
[Step 2 SimpleAdo.h, SimpleAdo.cpp]
1.MyAdodb.h¸¦ SimpleAdoDlg.h¿¡ Æ÷ÇÔ½Ã۰í Ŭ·¡½º¸¦ ¸¸µì´Ï´Ù.
#include "MyAdodb.h"
CMyAdodb m_MyAdodb;
2.SimpleAdoDlg.cpp¿¡¼ DB¿¬°á ¹× Á¶ÀÛÀ» ÇØº¾´Ï´Ù.
¸ÕÀú DB¿¬°á ¹®ÀÚ¿À» »ý¼º½Ãŵ´Ï´Ù.
Äõ¸®¸¦ ³¯·ÈÀ»¶§ À̳༮ÀÌ ¾î¶² DB¿¡ ¾î¶² Á¤º¸·Î ·Î±äµîÀ» ÇÏ¿©
Á¶ÀÛÀÌ °¡´ÉÇÑÁö¿¡ ´ëÇÑ ¹®ÀÚ¿ÀÔ´Ï´Ù.
Àß ¸ð¸£½Å´Ù¸é ¾Æ·¡ °Á¸¦ ÂüÁ¶ÇÏ½Ã¸é ½±°Ô ¼³¸íµÇ¾îÀÖ½À´Ï´Ù.
http://www.devpia.com/Forum/BoardView.aspx?no=6840&page=1&Tpage=1&forumname=vc_lec&stype=&ctType=&answer=&KeyR=nameid&KeyC=
MS-SQLÀ» ±âÁØÀ¸·Î
User ID : DB¿¡ ·Î±×ÀÎÇÒ ¾ÆÀ̵ð (SAÁ¤µµ°¡ µË´Ï´Ù.)
Password : ·Î±×ÀÎÇÒ ¾ÆÀ̵ðÀÇ ºñ¹Ð¹øÈ£
Data Source : MS-SQLÀÌ´Ï Æ¯Á¤ ¾ÆÀÌÇǰ¡ µé¾î°©´Ï´Ù. ¸¸¾à MDB¶ó¸é ÇØ´ç
·ÎÄà °æ·Î°¡ µé¾î°¡ÀÖÀ»°Ì´Ï´Ù.
Initial Catalog : DBÀÇ À̸§ÀÔ´Ï´Ù.
Network Address : MS-SQLÀÌ´Ï Æ¯Á¤ ¾ÆÀÌÇǰ¡ µé¾î°©´Ï´Ù. ¸¸¾à MDB¶ó¸é ÇØ´ç
·ÎÄà °æ·Î°¡ µé¾î°¡ÀÖÀ»°Ì´Ï´Ù. ƯÁ¤ Æ÷Æ®·Î DB°¡ ¼³Á¤ÀÌ µÇ¾îÀÖÁö ¾Ê´Ù¸é ±âº»Æ÷Æ®ÀÎ
1433ÀÌ ÀԷµ˴ϴÙ.
Network Library : ¸ð¸£°Ú±º¿ä. Ã¥À» º¸¸é ³ª¿ÍÀÖÀ»°Ì´Ï´Ù. Á˼Û^^
Ex)
User ID=USERID;Password=PASSWORD;Data Source=XXX.XXX.XXX.XXX;Initial Catalog=DBNAME;Network
Address=XXX.XXX.XXX.XXX,1433;Network Library=dbmssocn
À§ Á¤º¸¸¦ Åä´ë·Î Step1ÀÇ 5¹ø¿¡¼ ¸¸µç DB¿¬°á ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù.
if(m_MyAdodb.InitDB("USERID", "PASSWORD",
"XXX.XXX.XXX.XXX", "DBNAME", "1433") == FALSE)
{
MessageBox("µðºñÁ¢¼Ó¿¡·¯ÀÔ´Ï´Ù.
ÀÛ¾÷À» ÁøÇàÇÒ ¼ö ¾ø½À´Ï´Ù.", "SIMPLEDB", MB_ICONSTOP);
GetParentOwner()->PostMessage(WM_CLOSE);
return;
}
3.DB¿ÍÀÇ ¿¬°áÀÌ ¼º°øÇÏ¿´À¸´Ï °¡Àå ±âº»ÀÌ µÇ´Â Á¶È¸(Select)¸¦ ÇØº¸°Ú½À´Ï´Ù.
// ¾Ë¸ÂÀº Äõ¸®¸¦ ´ëÀÔÇϽʽÿä. joinÀ̵ç unionÀ̵ç..
(´ç¿¬ÇÏÁö¸¸..¤Ñ¤Ñ)
m_MyAdodb.m_pComm->CommandText = "Select
* From Test_Tbl where ¾î¼°í Àú¼°í";
try
{
m_MyAdodb.m_pRs = m_MyAdodb.m_pComm->Execute(NULL,NULL,adCmdText); //
ÀúÀåµÈ select¹®À» ¼öÇàÇÕ´Ï´Ù.
}
catch(...)
{ // ¿¡·¯ÀÏ °æ¿ì ¸Þ¼¼Áö ¹Ú½º¸¦ Ãâ·ÂÇϰí
Á¶È¸ ÀÛ¾÷À» Á¾·áÇØ ¹ö¸³´Ï´Ù.(¿¡·¯°¡ ³¯ °æ¿ì´Â °ÅÀÇ ¾ø½À´Ï´Ù.)
MessageBox("Á¶È¸ ¿À·ù!",
"SIMPLEDB", MB_ICONSTOP);
return;
}
// °á°ú°¡ Á¸ÀçÇÏÁö ¾ÊÀ½
if(m_MyAdodb.m_pRs->adoEOF)
{
m_MyAdodb.m_pRs->Close(); //
·¹ÄÚµå¼ÂÀ» ´Ý´Â´Ù.(Ç×»ó ·¹ÄÚµå¼Â ¿ÀÇ ÈÄ¿£ ´Ý¾ÆÁÖ´Â ÀÛ¾÷À» ¼öÇàÇØ¾ß ÇÕ´Ï´Ù.)
MessageBox("Á¶°Ç¿¡ ¸Â´Â
µ¥ÀÌÅͰ¡ ¾ø½À´Ï´Ù.", "SIMPLEDB", MB_ICONINFORMATION);
return;
}
_variant_t Field_1; //
Çʵå¸íÀÔ´Ï´Ù.(¾Ë¸ÂÀº Çʵå¸íÀ» ³ª¿ÇϽʽÿä)
_variant_t Field_2; //
Çʵå¸íÀÔ´Ï´Ù.
char szField1[10+1] =
{'\0',}; // Çʵå¸í°ú 1:1´ëÀÀÇÏ°Ô º¯¼ö¸¦ ¼±¾ðÇϽʽÿä
char szField2[10+1] =
{'\0',};
// Á¶È¸µÈ ·¹ÄÚµåÀÇ ³¡±îÁö ·çÇÎÀ» µ¹¸ç µ¥ÀÌÅ͸¦ È®ÀÎÇÕ´Ï´Ù.
while(!m_MyAdodb.m_pRs->adoEOF)
{
Field_1 =
m_MyAdodb.m_pRs->Fields->GetItem("field_1")->GetValue(); //
ÇØ´ç Çʵ带 ¼±¾ðÇÑ variantº¯¼ö¿¡ ÀúÀåÇÕ´Ï´Ù.
Field_2 =
m_MyAdodb.m_pRs->Fields->GetItem("field_2")->GetValue();
strcpy(szField1, (char*)((_bstr_t)Field_1)); //
ÀúÀåµÈ variantº¯¼ö¸¦ Á¶ÀÛÀÌ ÆíÇÑ charº¯¼ö¿¡ º¹»çÇÕ´Ï´Ù.
strcpy(szField2, (char*)((_bstr_t)Field_2));
// ¸®½ºÆ® ÄÁÆ®·ÑÀ» Ãß°¡Çϼ̰ųª
ȸ鿡 Ãâ·ÂÇÏ½Ç »ý°¢ÀÌ ÀÖÀ¸½Ã´Ù¸é
// ·çÇÎÀ» µ¹¸®¸ç °ªÀ» ä¿ö³Ö´Â
ÀÛ¾÷À» À̺κп¡¼ ÇÏ½Ã¸é µË´Ï´Ù.
m_MyAdodb.m_pRs->MoveNext(); //
·¹ÄÚµå¼ÂÀ» ´ÙÀ½À¸·Î À̵¿½Ãŵ´Ï´Ù.
}
m_MyAdodb.m_pRs->Close(); //
·¹ÄÚµå¼ÂÀ» ´Ý¾ÆÁÝ´Ï´Ù.
±×¸²À¸·Î ÇØº¸¸é..

4.Update¸¦ ÇØº¸°Ú½À´Ï´Ù.
_variant_t LRowCount; // Update°¡
Àû¿ëµÈ ·¹ÄÚµåÀÇ ·Î¿ì¼ö
long lrowcount = 0; //
Àû¿ëµÈ variantÇüÀ» ·¹ÄÚµåÀÇ ·Î¿ì¼ö ÀúÀå
char CommandString[400+1]={'\0',};
strcpy(CommandString, "Update Test_Tbl set Field_1
='01', Field_2='02' Where User='senosora'"); // ¾Ë¸Â´Â
updateÄõ¸®¸¦ Àû¿ëÇϽʽÿä.
m_MyAdodb.m_pComm->CommandText = CommandString;
try
{
m_MyAdodb.m_pComm->Execute(&LRowCount,NULL,adCmdText);
// Update ½ÇÇà
}
catch(...)
{
// ¿¡·¯ÀÏ °æ¿ì ¸Þ¼¼Áö ¹Ú½º¸¦
Ãâ·ÂÇϰí update ÀÛ¾÷À» Á¾·áÇØ ¹ö¸³´Ï´Ù.(¿¡·¯°¡ ³¯ °æ¿ì´Â update¹® ¿À·ù.)
MessageBox("Update ¿À·ù!",
"SIMPLEDB", MB_ICONSTOP);
return;
}
lrowcount = atol((char*)((_bstr_t)LRowCount)); //
variantÇüÀ» longÇü¿¡ ÀúÀå
if(lrowcount == 0) // ¾÷µ¥ÀÌÆ®µÈ°Ô ¾ø´Ù.
{
MessageBox("Update Àû¿ëµÈ
·¹ÄÚµå ¾øÀ½!", "SIMPLEDB", MB_ICONSTOP);
return;
}
¿©±â±îÁöÀÔ´Ï´Ù.
Á¦ Áö½ÄÀÌ DB¿¡ °üÇØ command°´Ã¼´Â ¾î¶°¾î¶°ÇÏ°í ·¹ÄÚµå¼ÂÀº ¾î¶°ÇÏ¸ç ¼Óµµ°¡
¾î¶»´Ù¶ó ³íÇÒ ½Ç·ÂÀÌ µÈ´Ù¸é¾ß ÁÁ°ÚÁö¸¸
±×·¸´Ù°í Ã¥À» ±×´ë·Î º£²¸³õÀ»¼öµµ ¾ø°í.. ÇØ¼ ¹è°æÁö½ÄÀº ÀûÁö ¸øÇß½À´Ï´Ù.
Ʋ¸°Á¡ÀÌ ÀÖ´Ù¸é ¹Ù·ÎÀâ¾Æ ÁÖ½Ã¸é °¨»çÇϰڽÀ´Ï´Ù.
÷ºÎµÇ´Â ÆÄÀÏÀº ½ÇÇàÇϸé DB°¡ ¾øÀ¸´Ï..¿¡·¯°¡ ³³´Ï´Ù.
±×³É ´«À¸·Î º¸½Ã¸é ÀÌÇØ°¡ ºü¸£Áö ¾ÊÀ»±î ½Í¾î ÷ºÎÇÕ´Ï´Ù.
Å×½ºÆ® ÇϽ÷Á¸é DB±¸¼ººÎÅÍ ÇÏ¼Å¾ß ÇÕ´Ï´Ù.
±Ùµ¥.. ÁÖÀý ÁÖÀý ÇØ³õ°í º¸´Ï ¾î° ´õ º¹ÀâÇØº¸À̴±º¿ä.¤Ñ¤Ñ
MYSQLÀ» »ç¿ëÇϽ÷Á¸é DB¿¬°áºÎºÐ¸¸ MYSQL·Î º¯°æÇØÁֽøé
µ¿ÀÏÇÏ°Ô »ç¿ëÀÌ °¡´ÉÇÕ´Ï´Ù.
Ãß°¡ : ´ëÃæ ÀÌ·±½ÄÀ¸·Î ¾Ë°í ÀÖ½À´Ï´Ù. mysqlÀ» Àß
¸ð¸£´Âµ¥.. localhost¶ó¸é mysqlÀº pwd¸¦ ¾È³Ö´õ±º¿ä..
// MySql
strcpy(ConStr,"Driver={MySQL};server=");
strcat(ConStr,DBIP);
if(strcmp(DBIP, "localhost")
== 0)
{
strcat(ConStr,";Uid=root;pwd=;Database=yourdbname");
}
else
{
strcat(ConStr,";Uid=root;pwd=yourpassword;Database=yourdbname");
}
pConn
= _ConnectionPtr("ADODB.Connection");
pRS
= _RecordsetPtr("ADODB.Recordset");
pRS->CursorType
= adOpenDynamic;
pComm
= NULL;
pConn->ConnectionString
= ConStr; // Á¢¼Ó ½ºÆ®¸µ ¼³Á¤.
try
{
pConn->Open("","","",
adConnectUnspecified);
}catch(_com_error
&e)
{
_bstr_t
bstrSource(e.Source());
_bstr_t
bstrDescription(e.Description());
AfxMessageBox("MySQL
DB Á¢¼Ó ¿¡·¯");
exit(1);
}
pComm.CreateInstance(__uuidof(Command));
pComm->ActiveConnection
= pConn;
pComm->CommandType
= adCmdText;
}
|