MFC DAO Ŭ·¡½º¸¦ »ç¿ë ÇÏ´Â µ¿¾È Á÷Á¢ DAO¸¦ È£Ãâ ÇÏ´Â TN054:

MFC DAO µ¥ÀÌÅͺ£À̽º Ŭ·¡½º¸¦ »ç¿ë Çϸé DAO¸¦ Á÷Á¢ »ç¿ë ÇÏ´Â µ¥ ÇÊ¿äÇÑ °æ¿ì°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ÀϹÝÀûÀ¸·ÎÀÌ °æ¿ì, µÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù ÇÏÁö¸¸ MFC Á÷Á¢ DAO È£Ãâ MFC Ŭ·¡½º¸¦ »ç¿ë ÇÏ ¿© °áÇÕ ÇÏ´Â °æ¿ì °£´ÜÇÑ ¸¸µé±â Á÷Á¢ DAO È£ÃâÀ» ¿ëÀÌ ÇÏ °Ô ÀϺΠµµ¿ì¹Ì ¸ÞÄ¿´ÏÁòÀ» Á¦°ø ÇϰíÀÖ´Ù. Á÷Á¢ DAO¸¦ ¸¸µé°í °ü¸® ÇÏ´Â MFC DAO °³Ã¼ÀÇ ¸Þ¼­µå È£ÃâÀ» ´Ü ¸î ÁÙÀÇ ÄÚµå ÇÊ¿ä ÇÕ´Ï´Ù. ¸¸µé°í ¾ÊÀº DAO °³Ã¼¸¦ »ç¿ë ÇÏ ¿© ÇÊ¿ä ¾ø´Â MFC¿¡ ÀÇÇØ °ü¸®, ´ç½ÅÀº ÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù Á¶±Ý ´õ ¸¹Àº ÀÛ¾÷ ½ÇÁ¦·Î °³Ã¼¿¡ ¸±¸®½º ¸¦ È£Ãâ ÇÏ ¿©. ÀÌ ±â¼ú ³ëÆ® DAO¸¦ Á÷Á¢ È£Ãâ ÇÏ·Á´Â ¶§, MFC ÇïÆÛ, µµ¿òÀÌ ¹«¾ùÀ» ÇÒ ¼ö ¹× DAO OLE ÀÎÅÍÆäÀ̽º¸¦ »ç¿ë ÇÏ´Â ¹æ¹ý¿¡ ¼³¸í ÇÕ´Ï´Ù. ÀÌ ³ëÆ®¿¡¼­´Â DAO º¸¾È ±â´É¿¡ ´ë ÇÑ Á÷Á¢ DAO¸¦ È£Ãâ ÇÏ´Â ¹æ¹ýÀ» º¸¿© ÁÖ´Â ¸î °¡Áö »ùÇà ÇÔ¼ö¸¦ Á¦°ø ÇÏ´Â ¸¶Áö¸·À¸·Î,¡£

Á÷Á¢ DAO¸¦ È£Ãâ ÇÏ´Â °æ¿ì

MFC¿¡ ÀÇÇØ ¹Ù²îÁö ±â´ÉÀ» ±¸Çö ÇÏ´Â °æ¿ì ¶Ç´Â Á÷Á¢ DAO È£ÃâÀ» ¸¸µé±â À§ÇÑ °¡Àå ÀϹÝÀûÀÎ »óȲÀº Ä÷º¼Ç »õ·Î °íÄ¥ Çʿ䰡 ÀÖÀ» ¶§ ¹ß»ý ÇÕ´Ï´Ù. MFC¿¡ ÀÇÇØ ³ëÃâ µÇÁö ¾Ê½À´Ï´Ù °¡Àå Áß¿ä ÇÑ ±â´ÉÀº º¸¾ÈÀÔ´Ï´Ù. º¸¾È ±â´ÉÀ» ±¸Çö ÇÏ·Á´Â °æ¿ì¿¡ DAO »ç¿ëÀÚ ¹× ±×·ì °³Ã¼¸¦ Á÷Á¢ »ç¿ë ÇØ¾ß ÇÕ´Ï´Ù. º¸¾È, °Ô´Ù°¡ °Å±â¿¡ ¸î °¡Áö ´Ù¸¥ DAO ±â´É MFC¿¡¼­ Áö¿ø µÇÁö ¾Ê½À´Ï´Ù. »Ó¸¸ ¾Æ´Ï¶ó ¾à°£ ´Ê°Ô Ãß°¡ DAO recordset º¹Á¦ ¹× µ¥ÀÌÅͺ£À̽º º¹Á¦ ±â´É Æ÷ÇÔ¡£

DAO¿Í MFCÀÇ ±¸Çö¿¡ ´ë ÇÑ °£·« ÇÑ °³¿ä

ÀÛÀº °Í µé¿¡ ´ëÇØ °ÆÁ¤ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù ±×·¡¼­ ¸¹Àº ¼¼ºÎ »çÇ×À» ó¸® ÇÏ ¿© ½±°Ô DAO¸¦ »ç¿ë ÇÏ´Â DAO °ÔÀÇ MFCÀÇ ¹èÄ¡. ÀÌ OLE, »ý¼º ¹× DAO °³Ã¼ (ƯÈ÷ Ä÷º¼Ç °³Ã¼)ÀÇ °ü¸® ¿À·ù °Ë»ç ¹× Á¦°ø ÇÏ´Â °­·ÂÇÑ Çü½Ä, °£´ÜÇÑ ÀÎÅÍÆäÀ̽º ( VARIANT ¶Ç´Â BSTR Àμö)ÀÇ ÃʱâÈ­¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù. Á÷Á¢ DAO¸¦ È£Ãâ ÇÏ °í ÀÌ·¯ÇÑ ±â´ÉÀ» ¿©ÀüÈ÷ Ȱ¿ë ¼ö ÀÖ½À´Ï´Ù. Á÷Á¢ DAO È£Ãâ ÇÏ ¿© ¸¸µç ¸ðµç °³Ã¼¿¡ ´ë ÇÑ ¸±¸®½º ¸¦ È£Ãâ ÇÏ´Â Äڵ尡 ÇØ¾ß ÇÒ ¸ðµç°¡ ¾Æ´Ñ MFC¿¡¼­ ³»ºÎÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ ¼öÁ¤ ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ´ç½ÅÀº ¸ðµç ³»ºÎ °á°ú ÀÌÇØ ÇÏÁö ¾Ê´Â ¿ÀÇ CDaoRecordset °³Ã¼ÀÇ m_pDAORecordset ¸â¹ö¸¦ ¼öÁ¤ ÇÏÁö ¸¶½Ê½Ã¿À. ±×·¯³ª m_pDAORecordset ÀÎÅÍÆäÀ̽º¸¦ »ç¿ë ÇÏ ¿© Çʵå Ä÷º¼ÇÀ» Á÷Á¢ DAO¸¦ È£Ãâ ¼ö ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì m_pDAORecordset ¸â¹ö´Â ¼öÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù. °³Ã¼¸¦ ¸¶Ä¡¸é Fields Ä÷º¼Ç °³Ã¼¿¡ ¸±¸®½º ¸¦ È£Ãâ Çϱ⸸ Çϸ顣

DAO ÀÖµµ·Ï ÇïÆÛ¿¡ ´ë ÇÑ ¼³¸í ½±°Ô È£Ãâ

DAO¸¦ ½±°Ô È£ÃâÇÒ ¼ö ÀÖµµ·Ï Á¦°ø ÇÏ´Â ÇïÆÛ MFC DAO µ¥ÀÌÅͺ£À̽º Ŭ·¡½º¿¡¼­ ³»ºÎÀûÀ¸·Î »ç¿ë µÇ´Â µ¿ÀÏÇÑ ÇïÆÛÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ÇïÆÛ´Â ·Î±× µð¹ö±× Ãâ·Â ¿¹»óµÈ ¿À·ù¸¦ °Ë»ç ÇÏ °í ÇÊ¿äÇÑ °æ¿ì ÀûÀý ÇÑ ¿¹¿Ü¸¦ throw Á÷Á¢ DAO¸¦ È£Ãâ ÇÏ´Â °æ¿ì¿¡ ¹Ýȯ Äڵ带 È®ÀÎ ÇÏ´Â µ¥ »ç¿ë µË´Ï´Ù. °Å±â¿¡ µÎ °³ÀÇ ±âº» µµ¿ì¹Ì ÇÔ¼ö ¹× ÀÌ·¯ÇÑ µÎ µµ¿ì¹Ì Áß Çϳª¿¡ ¸ÅÇεǴ 4 °³ÀÇ ¸ÅÅ©·Î. ÃÖ°íÀÇ ¼³¸íÀ» °£´Ü ÇÏ °Ô Äڵ带 ÀÐÀ» °ÍÀÔ´Ï´Ù. DAO_CHECK, DAO_CHECK_ERROR, DAO_CHECK_MEM¹× AFXDAO¿¡¼­ DAO_TRACE ¸¦ ÂüÁ¶ ÇϽʽÿÀ.¸ÅÅ©·Î, AfxDaoCheck ¹× AfxDaoTrace DAOCORE¿¡¼­ º¼ ¼ö H.CPP¡£

DAO OLE ÀÎÅÍÆäÀ̽º¸¦ »ç¿ë ÇÏ ¿©

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 Á÷Á¢ È£Ãâ ÇÏ´Â °£´ÜÇÑ ¿¹Á¦

°æ¿ì ±âº» DAO Ä÷º¼Ç °³Ã¼¸¦ »õ·Î °íÄ¡·Á¸é ÇÊ¿äÇÑ °æ¿ì ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀϹÝÀûÀ¸·ÎÀÌ ÇÊ¿ä´Â ¾ø½À´Ï´Ù, ÇÏÁö¸¸ ÇÊ¿äÇÑ °æ¿ì °£´ÜÇÑ ÀýÂ÷ ÀÌ´Ù. ¶§ Ä÷º¼Ç »õ·Î °íÃÄ¾ß ÇÒ ¼öµµ ÀÖ½À´Ï´ÙÀÇ ¿¹´Â »õ tabledefsÀ» ¸¸µå´Â ¿©·¯ »ç¿ëÀÚ¿Í ´ÙÁß »ç¿ëÀÚ È¯°æ¿¡¼­ ÀÛµ¿ ÇÏ´Â °æ¿ìÀÔ´Ï´Ù. ÀÌ °æ¿ì¿¡ tabledefs Ä÷º¼Ç ¿À·¡ µÈ µÉ ¼öµµ ÀÖ½À´Ï´Ù. Ä÷º¼ÇÀ» »õ·Î °íÄ¡, ´ç½ÅÀº ´Ü¼øÈ÷ Çʿ䰡 ƯÁ¤ Ä÷º¼Ç °³Ã¼ÀÇ Refresh ¸Þ¼­µå¸¦ È£Ãâ ÇÏ °í ¿À·ù¸¦ È®ÀÎ ÇϽʽÿÀ:

DAO_CHECK (pMyDaoDatabase-gt;
 ?? m_pDAOTableDefs-> »õ·Î °íħ ())

Âü°í ÇöÀç ¸ðµç DAO Ä÷º¼Ç °³Ã¼ ÀÎÅÍÆäÀ̽º´Â MFC DAO µ¥ÀÌÅͺ£À̽º Ŭ·¡½ºÀÇ ¹®¼­È­ µÇÁö ¾ÊÀº ±¸Çö ¼¼ºÎ Á¤º¸¡£

DAO¸¦ »ç¿ë ÇÏ ¿© Á÷Á¢ 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)

Index