MFC DAO µ¥ÀÌÅͺ£À̽º Ŭ·¡½º¸¦ »ç¿ë Çϸé DAO¸¦ Á÷Á¢ »ç¿ë ÇÏ´Â µ¥ ÇÊ¿äÇÑ °æ¿ì°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ÀϹÝÀûÀ¸·ÎÀÌ °æ¿ì, µÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù ÇÏÁö¸¸ MFC Á÷Á¢ DAO È£Ãâ MFC Ŭ·¡½º¸¦ »ç¿ë ÇÏ ¿© °áÇÕ ÇÏ´Â °æ¿ì °£´ÜÇÑ ¸¸µé±â Á÷Á¢ DAO È£ÃâÀ» ¿ëÀÌ ÇÏ °Ô ÀϺΠµµ¿ì¹Ì ¸ÞÄ¿´ÏÁòÀ» Á¦°ø ÇϰíÀÖ´Ù. Á÷Á¢ DAO¸¦ ¸¸µé°í °ü¸® ÇÏ´Â MFC DAO °³Ã¼ÀÇ ¸Þ¼µå È£ÃâÀ» ´Ü ¸î ÁÙÀÇ ÄÚµå ÇÊ¿ä ÇÕ´Ï´Ù. ¸¸µé°í ¾ÊÀº DAO °³Ã¼¸¦ »ç¿ë ÇÏ ¿© ÇÊ¿ä ¾ø´Â MFC¿¡ ÀÇÇØ °ü¸®, ´ç½ÅÀº ÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù Á¶±Ý ´õ ¸¹Àº ÀÛ¾÷ ½ÇÁ¦·Î °³Ã¼¿¡ ¸±¸®½º ¸¦ È£Ãâ ÇÏ ¿©. ÀÌ ±â¼ú ³ëÆ® DAO¸¦ Á÷Á¢ È£Ãâ ÇÏ·Á´Â ¶§, MFC ÇïÆÛ, µµ¿òÀÌ ¹«¾ùÀ» ÇÒ ¼ö ¹× DAO OLE ÀÎÅÍÆäÀ̽º¸¦ »ç¿ë ÇÏ´Â ¹æ¹ý¿¡ ¼³¸í ÇÕ´Ï´Ù. ÀÌ ³ëÆ®¿¡¼´Â DAO º¸¾È ±â´É¿¡ ´ë ÇÑ Á÷Á¢ DAO¸¦ È£Ãâ ÇÏ´Â ¹æ¹ýÀ» º¸¿© ÁÖ´Â ¸î °¡Áö »ùÇà ÇÔ¼ö¸¦ Á¦°ø ÇÏ´Â ¸¶Áö¸·À¸·Î,¡£
MFC¿¡ ÀÇÇØ ¹Ù²îÁö ±â´ÉÀ» ±¸Çö ÇÏ´Â °æ¿ì ¶Ç´Â Á÷Á¢ DAO È£ÃâÀ» ¸¸µé±â À§ÇÑ °¡Àå ÀϹÝÀûÀÎ »óȲÀº Ä÷º¼Ç »õ·Î °íÄ¥ Çʿ䰡 ÀÖÀ» ¶§ ¹ß»ý ÇÕ´Ï´Ù. MFC¿¡ ÀÇÇØ ³ëÃâ µÇÁö ¾Ê½À´Ï´Ù °¡Àå Áß¿ä ÇÑ ±â´ÉÀº º¸¾ÈÀÔ´Ï´Ù. º¸¾È ±â´ÉÀ» ±¸Çö ÇÏ·Á´Â °æ¿ì¿¡ DAO »ç¿ëÀÚ ¹× ±×·ì °³Ã¼¸¦ Á÷Á¢ »ç¿ë ÇØ¾ß ÇÕ´Ï´Ù. º¸¾È, °Ô´Ù°¡ °Å±â¿¡ ¸î °¡Áö ´Ù¸¥ DAO ±â´É MFC¿¡¼ Áö¿ø µÇÁö ¾Ê½À´Ï´Ù. »Ó¸¸ ¾Æ´Ï¶ó ¾à°£ ´Ê°Ô Ãß°¡ DAO recordset º¹Á¦ ¹× µ¥ÀÌÅͺ£À̽º º¹Á¦ ±â´É Æ÷ÇÔ¡£
ÀÛÀº °Í µé¿¡ ´ëÇØ °ÆÁ¤ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù ±×·¡¼ ¸¹Àº ¼¼ºÎ »çÇ×À» ó¸® ÇÏ ¿© ½±°Ô DAO¸¦ »ç¿ë ÇÏ´Â DAO °ÔÀÇ MFCÀÇ ¹èÄ¡. ÀÌ OLE, »ý¼º ¹× DAO °³Ã¼ (ƯÈ÷ Ä÷º¼Ç °³Ã¼)ÀÇ °ü¸® ¿À·ù °Ë»ç ¹× Á¦°ø ÇÏ´Â °·ÂÇÑ Çü½Ä, °£´ÜÇÑ ÀÎÅÍÆäÀ̽º ( VARIANT ¶Ç´Â BSTR Àμö)ÀÇ Ãʱâȸ¦ Æ÷ÇÔ ÇÕ´Ï´Ù. Á÷Á¢ DAO¸¦ È£Ãâ ÇÏ °í ÀÌ·¯ÇÑ ±â´ÉÀ» ¿©ÀüÈ÷ Ȱ¿ë ¼ö ÀÖ½À´Ï´Ù. Á÷Á¢ DAO È£Ãâ ÇÏ ¿© ¸¸µç ¸ðµç °³Ã¼¿¡ ´ë ÇÑ ¸±¸®½º ¸¦ È£Ãâ ÇÏ´Â Äڵ尡 ÇØ¾ß ÇÒ ¸ðµç°¡ ¾Æ´Ñ MFC¿¡¼ ³»ºÎÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ ¼öÁ¤ ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ´ç½ÅÀº ¸ðµç ³»ºÎ °á°ú ÀÌÇØ ÇÏÁö ¾Ê´Â ¿ÀÇ CDaoRecordset °³Ã¼ÀÇ m_pDAORecordset ¸â¹ö¸¦ ¼öÁ¤ ÇÏÁö ¸¶½Ê½Ã¿À. ±×·¯³ª m_pDAORecordset ÀÎÅÍÆäÀ̽º¸¦ »ç¿ë ÇÏ ¿© Çʵå Ä÷º¼ÇÀ» Á÷Á¢ DAO¸¦ È£Ãâ ¼ö ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì m_pDAORecordset ¸â¹ö´Â ¼öÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù. °³Ã¼¸¦ ¸¶Ä¡¸é Fields Ä÷º¼Ç °³Ã¼¿¡ ¸±¸®½º ¸¦ È£Ãâ Çϱ⸸ Çϸ顣
DAO¸¦ ½±°Ô È£ÃâÇÒ ¼ö ÀÖµµ·Ï Á¦°ø ÇÏ´Â ÇïÆÛ MFC DAO µ¥ÀÌÅͺ£À̽º Ŭ·¡½º¿¡¼ ³»ºÎÀûÀ¸·Î »ç¿ë µÇ´Â µ¿ÀÏÇÑ ÇïÆÛÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ÇïÆÛ´Â ·Î±× µð¹ö±× Ãâ·Â ¿¹»óµÈ ¿À·ù¸¦ °Ë»ç ÇÏ °í ÇÊ¿äÇÑ °æ¿ì ÀûÀý ÇÑ ¿¹¿Ü¸¦ throw Á÷Á¢ DAO¸¦ È£Ãâ ÇÏ´Â °æ¿ì¿¡ ¹Ýȯ Äڵ带 È®ÀÎ ÇÏ´Â µ¥ »ç¿ë µË´Ï´Ù. °Å±â¿¡ µÎ °³ÀÇ ±âº» µµ¿ì¹Ì ÇÔ¼ö ¹× ÀÌ·¯ÇÑ µÎ µµ¿ì¹Ì Áß Çϳª¿¡ ¸ÅÇεǴ 4 °³ÀÇ ¸ÅÅ©·Î. ÃÖ°íÀÇ ¼³¸íÀ» °£´Ü ÇÏ °Ô Äڵ带 ÀÐÀ» °ÍÀÔ´Ï´Ù. DAO_CHECK, DAO_CHECK_ERROR, DAO_CHECK_MEM¹× AFXDAO¿¡¼ DAO_TRACE ¸¦ ÂüÁ¶ ÇϽʽÿÀ.¸ÅÅ©·Î, AfxDaoCheck ¹× AfxDaoTrace DAOCORE¿¡¼ º¼ ¼ö H.CPP¡£
DAO °³Ã¼ °èÃþ ±¸Á¶¿¡ ÀÖ´Â °¢ °³Ã¼¿¡ ´ë ÇÑ OLE ÀÎÅÍÆäÀ̽º´Â DBDAOINT Çì´õ ÆÄÀÏ¿¡ Á¤ÀÇ µË´Ï´Ù.H \Program Files\DevStudio\VC\include µð·ºÅ͸®¿¡¼ ¹ß°ß µÈ´Ù. ÀÌ·¯ÇÑ ÀÎÅÍÆäÀ̽º´Â Àüü DAO °èÃþ Á¶ÀÛÇÒ ¼ö ÀÖ´Â ¸Þ¼µå¸¦ Á¦°ø¡£
¸¹Àº DAO ÀÎÅÍÆäÀ̽ºÀÇ ¸Þ¼µå¸¦ BSTR °³Ã¼ (±æÀÌ Á¢µÎ»ç°¡ ¹®ÀÚ¿ OLE ÀÚµ¿È¿¡ »ç¿ë µÇ´Â)¸¦ Á¶ÀÛ ÇØ¾ß ÇÕ´Ï´Ù. BSTR °³Ã¼´Â ÀϹÝÀûÀ¸·Î VARIANT µ¥ÀÌÅÍ Çü½Ä ³»¿¡¼ ĸ½¶È µË´Ï´Ù. MFC Ŭ·¡½º ÀÚü COleVariant VARIANT µ¥ÀÌÅÍ Çü½Ä¿¡¼ »ó¼Ó µË´Ï´Ù. ¿©ºÎ ANSI ¶Ç´Â À¯´ÏÄڵ忡 ´ë ÇÑ ÇÁ·ÎÁ§Æ®¸¦ ºôµå¿¡ µû¶ó DAO ÀÎÅÍÆäÀ̽º´Â ANSI ¶Ç´Â À¯´ÏÄÚµå BSTRs¸¦ ¹Ýȯ µË´Ï´Ù. V_BSTR ¹× V_BSTRT, µÎ ¸ÅÅ©·Î DAO ÀÎÅÍÆäÀ̽º °¡Á®¿É´Ï´Ù ¿¹»óÇÑ Çü½ÄÀÇ BSTR À» º¸Àå ÇÏ´Â µ¥ À¯¿ë¡£
V_BSTR COleVariantÀÇ bstrVal ¸â¹ö¸¦ ÃßÃâ ÇÕ´Ï´Ù. ÀÌ ¸ÅÅ©·Î DAO ÀÎÅÍÆäÀ̽ºÀÇ ¸Þ¼µå¿Í COleVariant ³»¿ëÀ» Àü´Þ ÇØ¾ß ÇÏ´Â °æ¿ì¿¡ ÀϹÝÀûÀ¸·Î »ç¿ë µË´Ï´Ù. ´ÙÀ½ ÄÚµå ´ÜÆíÀº º¸¿©ÁÝ´Ï´Ù ¼±¾ð ¹× V_BSTR ¸ÅÅ©·Î Ȱ¿ë ÇÏ´Â DAO DAOUser ÀÎÅÍÆäÀ̽ºÀÇ µÎ °¡Áö ¹æ¹ý¿¡ ´ë ÇÑ ½ÇÁ¦ »ç¿ë:
COleVariant varOldName;
COleVariant varNewName (_T("NewUser"), VT_BSTRT);
/ / »ý·« Çϸé À¯È¿ÇÑ °ª¿¡ Puser¸¦ ÇÒ´çÇÒ ÄÚµå
DAOUser * pUser = NULL;
/ / ÀÌ·¯ÇÑ ¸Þ¼µå ¼±¾ð DBDAOINT¿¡¼ ÃÔ¿µ Çß´Ù.H
/ / STDMETHOD(get_Name) (THIS_ BSTR ¸Ö¸® * pbstr) ¼ø¼ö;
/ / STDMETHOD(put_Name) (THIS_ BSTR bstr) ¼ø¼ö;
DAO_CHECK (pUser-gt; get_Name (V_BSTR (& varOldName)));
DAO_CHECK (pUser-> put_Name (V_BSTR (& varNewName)))
Âü°í À§ÀÇ COleVariant »ý¼ºÀÚ¿¡ ÁöÁ¤ µÈ VT_BSTRT Àμö´Â °Å±â º¸Àå ÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ À¯´ÏÄÚµå ¹öÀü¿¡ ´ë ÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ ¹× Uunicode BSTR ÀÇ ANSI ¹öÀüÀ» ±¸Ãà ÇÏ´Â °æ¿ì ANSI BSTR COleVariant ¿¡ ÀÖÀ» °ÍÀÔ´Ï´Ù. ÀÌ DAO ¹«¾ùÀ» ±â´ëÇÕ´Ï´Ù¡£
´Ù¸¥ ¸ÅÅ©·Î, V_BSTRT, ºôµå (ANSI ¶Ç´Â À¯´ÏÄÚµå)ÀÇ Á¾·ù¿¡ µû¶ó COleVariant ÀÇ ANSI ¶Ç´Â À¯´ÏÄÚµå bstrVal ±¸¼º¿øÀ» ÃßÃâ ÇÕ´Ï´Ù. ´ÙÀ½ Äڵ忡¼´Â CString À¸·Î COleVariant ¿¡¼ BSTR °ªÀ» ÃßÃâ ÇÏ´Â ¹æ¹ýÀ» º¸¿© ÁÝ´Ï´Ù.:
COleVariant varName (_T ("MyName"), VT_BSTRT);
CString str = V_BSTRT (amp; varName)(&A)
V_BSTRT ¸ÅÅ©·Î ¿±â ´Ù¸¥ ±Õ¿ ´Ù¸¥ Æ®¸¯°ú ÇÔ²² COleVariant, ³» ÀúÀå Çü½ÄÀ» DAOVIEW »ùÇà Visual c + + CD¿¡ Æ÷ÇÔ µÈ¿¡¼ ¼³¸í ÇÕ´Ï´Ù. ƯÈ÷,ÀÌ ¹ø¿ªÀº CCrack::strVARIANT ¸Þ¼µå¿¡¼ ¼öÇà µË´Ï´Ù. ÀÌ ¹æ¹ýÀº °¡´ÉÇÑ º¯È¯ COleVariant °ª CString ÀÇ ÀνºÅϽº¡£
°æ¿ì ±âº» DAO Ä÷º¼Ç °³Ã¼¸¦ »õ·Î °íÄ¡·Á¸é ÇÊ¿äÇÑ °æ¿ì ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀϹÝÀûÀ¸·ÎÀÌ ÇÊ¿ä´Â ¾ø½À´Ï´Ù, ÇÏÁö¸¸ ÇÊ¿äÇÑ °æ¿ì °£´ÜÇÑ ÀýÂ÷ ÀÌ´Ù. ¶§ Ä÷º¼Ç »õ·Î °íÃÄ¾ß ÇÒ ¼öµµ ÀÖ½À´Ï´ÙÀÇ ¿¹´Â »õ tabledefsÀ» ¸¸µå´Â ¿©·¯ »ç¿ëÀÚ¿Í ´ÙÁß »ç¿ëÀÚ È¯°æ¿¡¼ ÀÛµ¿ ÇÏ´Â °æ¿ìÀÔ´Ï´Ù. ÀÌ °æ¿ì¿¡ tabledefs Ä÷º¼Ç ¿À·¡ µÈ µÉ ¼öµµ ÀÖ½À´Ï´Ù. Ä÷º¼ÇÀ» »õ·Î °íÄ¡, ´ç½ÅÀº ´Ü¼øÈ÷ Çʿ䰡 ƯÁ¤ Ä÷º¼Ç °³Ã¼ÀÇ Refresh ¸Þ¼µå¸¦ È£Ãâ ÇÏ °í ¿À·ù¸¦ È®ÀÎ ÇϽʽÿÀ:
DAO_CHECK (pMyDaoDatabase-gt;
?? m_pDAOTableDefs-> »õ·Î °íħ ())
Âü°í ÇöÀç ¸ðµç DAO Ä÷º¼Ç °³Ã¼ ÀÎÅÍÆäÀ̽º´Â MFC DAO µ¥ÀÌÅͺ£À̽º Ŭ·¡½ºÀÇ ¹®¼È µÇÁö ¾ÊÀº ±¸Çö ¼¼ºÎ Á¤º¸¡£
MFC DAO µ¥ÀÌÅͺ£À̽º Ŭ·¡½º´Â DAO º¸¾È ±â´É ¹Ù²îÁö ¾Ê½À´Ï´Ù. ÀϺΠDAO º¸¾È ±â´ÉÀ» »ç¿ë ÇÏ´Â DAO ÀÎÅÍÆäÀ̽ºÀÇ ¸Þ¼µå¸¦ È£Ãâ ÇØ¾ß ÇÕ´Ï´Ù. ´ÙÀ½ ÇÔ¼ö ½Ã½ºÅÛ µ¥ÀÌÅͺ£À̽º¸¦ ¼³Á¤ ÇÏ °í »ç¿ëÀÚÀÇ ¾ÏÈ£¸¦ º¯°æ ÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö È£Ãâ ¼¼ °¡Áö ´Ù¸¥ ÇÔ¼ö¸¦ ¿¬¼ÓÀûÀ¸·Î Á¤ÀÇ µÇ´Â¡£
void ChangeUserPassword( )
{
// Specify path to the Microsoft Access
// system database
CString strSystemDB =
_T( "c:\\Program Files\\MSOffice\\access\\System.mdw" );
// Set system database before MFC initilizes DAO
// NOTE: An MFC module uses only one instance
// of a DAO database engine object. If you have
// called a DAO object in your application prior
// to calling the function below, you must call
// AfxDaoTerm to destroy the existing database
// engine object. Otherwise, the database engine
// object already in use will be reused, and setting
// a system datbase will have no effect.
//
// If you have used a DAO object prior to calling
// this function it is important that DAO be
// terminated with AfxDaoTerm since an MFC
// module only gets one copy of the database engine
// and that engine will be reused if it hasn't been
// terminated. In other words, if you do not call
// AfxDaoTerm and there is currently a database
// initialized, setting the system database will
// have no affect.
SetSystemDB( strSystemDB );
// User name and password manually added
// by using Microsoft Access
CString strUserName = _T( "NewUser" );
CString strOldPassword = _T( "Password" );
CString strNewPassword = _T( "NewPassword" );
// Set default user so that MFC will be able
// to log in by default using the user name and
// password from the system database
SetDefaultUser( strUserName, strOldPassword );
// Change the password. You should be able to
// call this function from anywhere in your
// MFC application
ChangePassword( strUserName, strOldPassword,
strNewPassword );
.
.
.
}
´ÙÀ½ 4 °³ÀÇ ¿¹Á¦¸¦ ¼³¸í ÇÏ´Â ¹æ¹ý:
½Ã½ºÅÛ µ¥ÀÌÅͺ£À̽º ¼³Á¤
¾Æ·¡ ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ »ç¿ë ÇÏ´Â ½Ã½ºÅÛ µ¥ÀÌÅͺ£À̽º¸¦ ¼³Á¤ ÇÏ´Â »ùÇà ÇÔ¼ö°¡ÀÔ´Ï´Ù. ´Ù¸¥ DAO È£Ãâ Çϱâ Àü¿¡ÀÌ ÇÔ¼ö¸¦ È£Ãâ ÇØ¾ß ÇÕ´Ï´Ù.
/ / ½Ã½ºÅÛ µ¥ÀÌÅͺ£À̽º ¼³Á¤ ÇÕ´Ï´Ù / / DAO µ¥ÀÌÅͺ£À̽º ¿£ÁøÀ» »ç¿ë ÇÏ´Â
void SetSystemDB (CString amp; strSystemMDB)
{
? COleVariant varSystemDB (strSystemMDB, VT_BSTRT);
/ / MFCÀÇ DAO ÃʱâÈ
? AfxDaoInit ();
? DAODBEngine * pDBEngine = AfxDaoGetEngine ();
ASSERT (pDBEngine! = NULL);
/ / ¼³Á¤ ÇÏ·Á¸é put_SystemDB ¸Þ¼µå¸¦ È£Ãâ ÇÏ ¿© / / DAO ¿£Áø¿¡ ´ë ÇÑ ½Ã½ºÅÛ µ¥ÀÌÅͺ£À̽º
? DAO_CHECK (pDBEngine-> put_SystemDB (varSystemDB.bstrVal));
}
±âº» »ç¿ëÀÚ ¹× ¾ÏÈ£ ¼³Á¤
´ÙÀ½ ÇÔ¼ö¸¦ »ç¿ë ÇÏ ¿© ±âº» »ç¿ëÀÚ ¹× ½Ã½ºÅÛ µ¥ÀÌÅͺ£À̽º¿¡ ´ë ÇÑ ¾ÏÈ£¸¦ ¼³Á¤ ÇÏ·Á¸é:
void SetDefaultUser (CString amp; strUserName, CString & strPassword)
{
COleVariant varUserName (strUserName, VT_BSTRT);
COleVariant varPassword (strPassword, VT_BSTRT);
DAODBEngine * pDBEngine = AfxDaoGetEngine ();
ASSERT (pDBEngine! = NULL);
/ / ±âº» »ç¿ëÀÚ ¼³Á¤:
DAO_CHECK (pDBEngine-> put_DefaultUser (varUserName.bstrVal));
/ / ±âº» ¾ÏÈ£ ¼³Á¤:
DAO_CHECK (pDBEngine-> put_DefaultPassword (varPassword.bstrVal));
}
»ç¿ëÀÚÀÇ ¾ÏÈ£ º¯°æ
´ÙÀ½ ÇÔ¼ö¸¦ »ç¿ë ÇÏ ¿© »ç¿ëÀÚÀÇ ¾ÏÈ£¸¦ º¯°æ ÇÏ·Á¸é:
void ChangePassword( CString &strUserName,
CString &strOldPassword,
CString &strNewPassword )
{
// Create (open) a workspace
CDaoWorkspace wsp;
CString strWspName = _T( "Temp Workspace" );
wsp.Create( strWspName, strUserName,
strOldPassword );
wsp.Append( );
// Determine how many objects there are
// in the Users collection
short nUserCount;
short nCurrentUser;
DAOUser *pUser = NULL;
DAOUsers *pUsers = NULL;
// Side-effect is implicit OLE AddRef( )
// on DAOUser object:
DAO_CHECK( wsp.m_pDAOWorkspace->get_Users( &pUsers ) );
// Side-effect is implicit OLE AddRef( )
// on DAOUsers object
DAO_CHECK( pUsers->get_Count( &nUserCount ) );
// Traverse through the list of users
// and change password for the userid
// used to create/open the workspace
for( nCurrentUser = 0; nCurrentUser < nUserCount;
nCurrentUser++ )
{
COleVariant varIndex( nCurrentUser, VT_I2 );
COleVariant varName;
// Retrieve information for user nCurrentUser
DAO_CHECK( pUsers->get_Item( varIndex, &pUser ) );
// Retrieve name for user nCurrentUser
DAO_CHECK( pUser->get_Name( &V_BSTR( &varName ) ) );
CString strTemp = V_BSTRT( &varName );
// If there is a match, change the password
if( strTemp == strUserName )
{
COleVariant varOldPwd( strOldPassword,
VT_BSTRT );
COleVariant varNewPwd( strNewPassword,
VT_BSTRT );
DAO_CHECK( pUser->NewPassword( V_BSTR( &varOldPwd ),
V_BSTR( &varNewPwd ) ) );
TRACE( "\t Password is changed\n" );
}
}
// Clean up: decrement the usage count
// on the OLE objects
pUser->Release( );
pUsers->Release( );
wsp.Close( );
}
¾ÏÈ£¸¦ º¯°æ Çϸé.MDB ÆÄÀÏ
¾ÏÈ£¸¦ º¯°æ ÇÏ´Â.MDB ÆÄÀÏ, ´ÙÀ½ ÇÔ¼ö¸¦ »ç¿ë ÇÏ ¿©:
void SetDBPassword (LPCTSTR pDB, LPCTSTR pszOldPassword, LPCTSTR pszNewPassword)
{
nbsp; CDaoDatabase db;
? CString strConnect (_T ("; pwd ="));
/ / µ¥ÀÌÅͺ£À̽º ´Üµ¶À¸·Î ¿·Á ÀÖ¾î¾ß ÇÕ´Ï´Ù
? / / ¾ÏÈ£¸¦ ¼³Á¤ ÇÏ·Á¸é
? dbÀÔ´Ï´Ù.(PDB, TRUE, FALSE, strConnect + pszOldPassword) ¿±â;
COleVariant NewPassword (pszNewPassword, VT_BSTRT)
????????????? OldPassword (pszOldPassword, VT_BSTRT);
DAO_CHECK (db.m_pDAODatabase-> NewPassword (V_BSTR (& OldPassword),
???????????? V_BSTR (& NewPassword)));
dbÀÔ´Ï´Ù.Close ();
}
±â¼ú ³ëÆ® ¹øÈ£·Î |nbsp; Ä«Å×°í¸®º° ±â¼ú ³ëÆ®(&N)