VC6Êý¾Ý¿â×ۺϿª·¢×ÊÁÏ

 

        Ŀ¼

 

ÓÃVC++6.0¿ª·¢¶à±íÁª½ÓµÄÊý¾Ý¿âÓ¦ÓóÌÐò... 2

¡¶Ê¹ÓÃOLEDB±àдÊý¾Ý¿âÓ¦ÓóÌÐò¡·... 9

¡¶ÔÚVisual C++ÖÐÓÃADO½øÐÐÊý¾Ý¿â±à³Ì¡·... 11

¡¶ÓÃVisual C++¿ª·¢Êý¾Ý¿âÓ¦ÓóÌÐò¡·... 30

Visual C++ ÖÐ µÄODBC ±à ³Ì... 80

ÀûÓÃODBC¹ÜÀíÊý¾Ý¿â... 87

ÔÚODBC ÖÐ Ó¦ ÓÃDDX ºÍRFX.. 89

MFC ÖÐODBC Àà ¿â ¼ò ½é... 89

RFX ¼ò ½é... 90

DDX ¼ò ½é... 91

DDX ºÍRFX µÄ ¹Ø ϵ ¼° ±È ½Ï... 92

ÔÚVC++Öн¨Á¢×Ô¶¨ÒåÊý¾Ý¿âÀà... 93

ÔÚVCÖÐʹÓÃADO¿ª·¢Êý¾Ý¿âÓ¦ÓóÌÐò... 96

Êý¾Ý¿âÖеÄODBC±à³Ì(1) 102

Êý¾Ý¿âÖеÄODBC±à³Ì(2) 103

Êý¾Ý¿âÖеÄODBC±à³Ì(3) 104

Visual C++ ÖÐµÄ ODBC ±à³Ì... 110

ODBCÖеÄͬ²½ÓëÒì²½Ö´ÐÐģʽ... 119

´ÓÊý¾Ý¿âÖжÁ´óÓÚ32kµÄÄÚÈÝ?. 122

DAOµÄÃÜÂë?. 123

ODBCÐí¿ÉÎÊÌâ... 124

ʹÓÃÁËCRecordsetÀà... 124

ÓÃVC ¿ª ·¢ »ù ÓÚORACLE Êý ¾Ý ¿â Ó¦ Óà ³Ì Ðò µÄ Á½ ÖÖ ·½ ·¨... 124

»ùÓÚMFCµÄ´óÐÍÊý¾ÝÎļþ´¦Àí·½·¨... 130

ÀûÓÃODBC¹ÜÀíÊý¾Ý¿â... 132

Ò»ÖÖר¼ÒÊý¾Ý¿âµÄ¿ª·¢ÓëʵÏÖ... 134

ÀûÓÃVC++»ñÈ¡Òì¹¹ÐÍÊý¾Ý¿â¿â½á¹¹ÐÅÏ¢... 139

Visual C++ÖеÄODBC±à³ÌʵÀý... 147

calling stored procedures. 154

classes for direct sql calls with odbc. 167

sample database program using dialog interface. 168

ÔÚVCÖÐʹÓÃADO¿ª·¢Êý¾Ý¿âÓ¦ÓóÌÐò... 178

ÓÃISAPIºÍDAOʵÏÖAccessÊý¾Ý¿âWebͨÓòéѯ... 182

VC++5.0ÏÂCGridCtrlÀàµÄ½¨Á¢ÓëÓ¦ÓÃ... 195

ÓÃADO½øÐÐÊý¾Ý¿â±à³Ì... 213

ÓÃVisual C++¿ª·¢Êý¾Ý¿âÓ¦ÓóÌÐò... 221

Ò»¸öÓÅÐãµÄÍø¸ñ¿Ø¼þCGridCtrl 239

 

 

 

 

ÓÃVC++6.0¿ª·¢¶à±íÁª½ÓµÄÊý¾Ý¿âÓ¦ÓóÌÐò

ÕªÒª ±¾ÎĽéÉÜÁËÓÃVisual C++6.0¿ª·¢Êý¾Ý¿âÓ¦ÓóÌÐòʱ£¬Ê¹ÓÃMFC ODBCÀàµÄ±à³Ì·½·¨£¬Ïêϸ˵Ã÷ÁËÔÚMFC ODBCµÄÅÉÉúÀàÖÐÉèÖÃSQLÓï¾ä²ÎÊýµÄ·½·¨£¬ÊµÏÖÁ˶þ¸ö±íµÄ¹ØÁª¡£
¹Ø¼ü×Ö Êý¾Ý¿â £¬¶à±íÁª½Ó£¬MFC ODBC

1£®ÒýÑÔ
¡¡¡¡¿ª·¢£×indowsÓ¦ÓóÌÐòʱ£¬ÔںܶàÇé¿öÏ¿ÉÄÜÒªºÍÊý¾Ý¿âÁ¬½Ó¡£Êý¾Ý¿âÀàÐͶàÖÖ¶àÑù£¬¹¦ÄܽṹҲ¸÷²»Ïàͬ¡£´Ó±È½Ï¼òµ¥µÄDBASE¡¢FoxProµÈµ½¸´ÔÓµÄSYBASE¡¢QracleµÈ´óÐÍÊý¾Ý¿âϵͳ¡£VC++6.0¶¼ÌṩÁËһЩ½Ó¿Ú¡£³ÌÐòÔ±¿ÉÀûÓÃÕâЩ½Ó¿Ú·½±ãµØ¿ª·¢Êý¾Ý¿âÓ¦ÓóÌÐò¡£MFC ODBCÀà¾ÍÊÇÆäÖеÄÒ»¸ö£¬ÔÚ¿ìËÙÉú³É¼òµ¥Ò»ÖµĽӿÚÓ¦ÓóÌÐò·½ÃæÕâЩÀà·Ç³£ÓÐÓá£Óû§²»±ØÁ˽âODBC APIºÍSQLµÄ¾ßÌåϸ½Ú£¬ÀûÓÃODBCÀ༴¿ÉÍê³É¶ÔÊý¾Ý¿âµÄ´ó²¿·Ö²Ù×÷¡£È»¶ø£¬VC++ Appwizard Éú³ÉµÄÊý¾Ý¿âÓ¦ÓóÌÐò£¬Ö»ÊÇ»ùÓÚµ¥¸öÊý¾Ý±íµÄÊý¾Ý¿âÓ¦ÓóÌÐò¡£¶øÊµ¼ÊÓ¦ÓÃÖУ¬ÍùÍùÒªÇóÊý¾Ý¿âÓ¦ÓóÌÐòÄܹØÁª¶þ¸ö»ò¶à¸öÊý¾Ý±í¡£VC++µÄºÃ¶àÊé¼®¶Ô´ËÖ»ÊǼòµ¥µÄ½éÉÜ¡£±¾ÎÄ͸³¹µØ½â¾öÕâÒ»ÎÊÌâ¡£

2£®ODBCÓëMFC
2£®1 ODBC
¡¡¡¡ODBC(¿ª·ÅÊý¾Ý¿â»¥Á¬)Ó¦ÓóÌÐò¿Éͨ¹ýODBCAPI·ÃÎʲ»Í¬Êý¾ÝÔ´ÖеÄÊý¾Ý£¬Ã¿¸ö²»Í¬µÄÊý¾ÝÔ´ÀàÐÍÓÉÒ»¸öODBCÇý¶¯³ÌÐòÖ§³Ö£¬Õâ¸öÇý¶¯³ÌÐòÍê³ÉÁËODBC API³ÌÐòµÄºËÐÄ£¬²¢Óë¾ßÌåµÄÊý¾Ý¿âͨÐÅ¡£ODBC»·¾³ÌṩÁËÇý¶¯³ÌÐò¹ÜÀíÆ÷(Driver Manager)£¬¹ÜÀíÄÇЩÓ벻ͬÊý¾ÝÔ´Á¬½ÓµÄÇý¶¯³ÌÐòÔÚODBC32.DLLÖÐÖ´ÐС£Ó¦ÓóÌÐòÖ»ÐèÒªÓëÇý¶¯³ÌÐò¹ÜÀíÆ÷Á¬½Ó£¬Çý¶¯³ÌÐò¹ÜÀíÆ÷¾Í»á¸ù¾ÝÓ¦ÓóÌÐòÌṩµÄÊý¾ÝÔ´Ãû£¬Ñ¡ÔñÕýÈ·µÄÇý¶¯³ÌÐòÀ´·ÃÎÊÊý¾ÝÔ´¡£

¡¡¡¡ÒªÊ¹ÓÃODBCÀ´¿ª·¢Êý¾Ý¿âÓ¦ÓóÌÐò£¬±ØÐëʹÓÃÔÚ¿ØÖÆÃæ°å´¦µÄODBCÊý¾ÝÔ´¹ÜÀíÆ÷£¬À´½¨Á¢¡¢ÅäÖÆÊý¾ÝÔ´¡£Ó¦±¾ÀýÓ¦ÓóÌÐòÐèÒª£¬°´ÒÔϲ½Ö轨Á¢ËùÐèµÄÊý¾ÝÔ´¡£
1£® Ë«»÷¿ØÖÆÃæ°å´¦µÄ32λµÄODBC³ÌÐò£¬Ñ¡Ôñ¶Ô»°¿òÖеÄUser DSN£¨Óû§Êý¾ÝÔ´Ãû£©Ñ¡Ï¡£
2£® µ¥»÷Add°´Å¥£¬È»ºóÑ¡ÔñÒ»¸öÊý¾ÝÔ´£ºMicrosoft Visual FoxPro Driver¡£µ¥»÷¡°Íê³É¡±£¬½øÈëÏÂÒ»²½ÉèÖá£
3£® ÔÚData Source NameÓòÄÚÊäÈëÊý¾ÝÔ´Ãû£ºDB-FSB¡£È»ºóÑ¡ÔñVisual FoxProÊý¾Ý¿âµÄλÖá£
4£® µ¥»÷OK°´Å¥£¬·µ»Øµ½¿ØÖÆÃæ°å¡£

2£®2 MFC ODBC
¡¡¡¡MFCµÄÊý¾Ý¿âÀ©Õ¹²¿·Ö·â×°ÁËʹÓÃODBCÊý¾Ý×ÊÔ´µÄϸ½Ú£¬ÌṩÁËVC++ÓëODBC¼äÒ»ÖÖ¼òµ¥µÄµ÷Óýӿڡ£MFCµÄODBCÀàÖ÷Òª°üÀ¨£ºÓÃÀ´ÓëÒ»¸öÊý¾ÝÔ´ÏàÁ¬µÄCDatabaseÀࣻÓÃÀ´´¦Àí´ÓÊý¾Ý¿â·µ»ØµÄÒ»×é¼Ç¼¼¯µÄCRecordsetÀࣻ¼ò»¯´ÓCrecordset¶ÔÏóÖеõ½Êý¾ÝµÄÏÔʾµÄCRecordViewÀà¡£

¡¡¡¡ËäÈ»CdatabaseÀàÔÊÐíÄã¶ÔÒ»¸öÊý¾Ý¿âÖ´ÐÐSQLÓï¾ä£¬µ«ÊÇCRecordsetÀàÌṩÁËÓ¦ÓóÌÐòÓëÊý¾Ý½»»¥µÄʵÖÊ¡£±¾ÀýÓ¦ÓóÌÐòʹÓÃCRecordsetÀàÀ´²Ù×÷Êý¾ÝÔ´.
CRecordsetÀàµÄÖ÷ҪĿµÄÊÇÈÃÓ¦ÓóÌÐò·ÃÎÊ´ÓÊý¾Ý¿âÖзµ»ØµÄ½á¹û¼¯¡£ÔÚÓ¦ÓóÌÐòÖÐҪʹÓÃCRecordsetÀ࣬¿É¸ù¾ÝÊý¾ÝÔ´²¢Ê¹ÓÃVC++ÖеÄClassWizardÀ´´´½¨CrecordsetÅÉÉúÀࡣͨ³££¬Ò»¸öCRecordsetÅÉÉúÀà¶ÔÓ¦Óû§Êý¾ÝÔ´ÖеÄÒ»¸ö±í¡£Ã¿Éú³ÉÒ»¸öCrecordsetÅÉÉúÀ࣬¾ÍҪѡÔñÒ»¸öÊý¾ÝÔ´ºÍÒ»¸öÊý¾ÝÔ´ÖеÄÒ»¸ö±í¡£ÈôÉú³ÉÒ»¸öCrecordsetÅÉÉúÀàʱ£¬Ñ¡ÔñÁËÒ»¸öÊý¾ÝÔ´ÖеĶà¸ö±í£¬ÄÇôCrecordsetÅÉÉúÀàÖеĽá¹û¼¯ÊǶà¸ö±íµÄ¿¨ÊÏ»ý£¨µÏ¿¨¶û»ý£©Á¬½Ó£¬ÏÔÈ»£¬ÔÚʵ¼ÊÓ¦ÓÃÖÐûʲôÒâÒå¡£Ó¦ÓóÌÐòͨ¹ýÅÉÉú³öµÄCrecordsetÀà¿É¶Ô¼Ç¼¼¯ÖеļǼ½øÐйö¶¯¡¢Ð޸ġ¢Ôö¼ÓºÍɾ³ýµÈ²Ù×÷¡£

¡¡¡¡CRecordViewÀà¾ßÓм¸¸öÔöÇ¿¹¦ÄÜ£¬ÔÊÐíʹÓöԻ°¿ò·½Ê½£¨DoDataExchange()º¯Êý£©Ö±½Ó´Ó¼Ç¼¼¯ÏÔʾÊý¾Ý£¬Ê¹µÃ´Ó¼Ç¼¼¯ÖÐÏÔʾÊý¾Ý¸üΪÈÝÒס£²¢ÌṩÁ˼ÇÂ¼ÒÆ¶¯µÈ²Ù×÷¡£

3£® ¶à±íÁª½ÓµÄÊý¾Ý¿âÓ¦ÓóÌÐò
3£® 1±¾Àý³ÌÐò¹¦ÄÜ£º
ͨ¹ýFSB±íµÄBZM×ֶμ°DBK1±íµÄHH×ֶΣ¬½«Visual FoxPro µÄ FSB±íÓëDBK1±í£¨½á¹¹ÈçÏ£©¹ØÁªÆðÀ´¡£³ÌÐòÔËÐгöÏÖ½çÃæÈçͼ1¡£ÓÃÊó±êµã»÷¹¤¾ßÌõµÄ?¡¢?¡¢(¡¢(ÔòFSB±í¼ÇÂ¼ÒÆ¶¯¶øDBK1±íµÄ¼ÇÂ¼Ã»ÒÆ¶¯¡£ÓÃÊó±êµã»÷¡°¹ØÁª¡±°´Å¥£¬ÔòDBK1±íµÄ¼Ç¼ºÍFSB±í¼Ç¼ͬ²½Òƶ¯£¨BZM±à¼­¿òÄÚÈÝÓëHH±à¼­¿òÄÚÈÝÏàͬ£©¡£Èç¹û£¬ÒªÇó°´ÕÕ¾ßÌåµÄ¹Ø¼ü×ÖÖµÀ´²éѯ¶þ¸ö±íÖеÄÏà¹Ø¼Ç¼£¬ÄÇô£¬ÔÚ¡°¶¨Î»¡± ±à¼­¿òÖÐÊäÈë¾ßÌåµÄ¹Ø¼ü×ÖÖµ£¬È»ºó£¬ÓÃÊó±êµã»÷¡°¹ØÁª¡±°´Å¥£¬¾Í»á¼ûµ½¶þ¸ö±íÔÚеļǼ¼¯ÊµÏÖ¹ØÁª¡£

±í1£º FSB±í½á¹¹
×Ö¶ÎÃû
ÀàÐÍ
±¸×¢
BZM
C
Ë÷Òý¹Ø¼ü×Ö
DGDL1
N

DGZD1
N

ÆäËü×Ö¶Î



±í2£º DBK1±í
×Ö¶ÎÃû
ÀàÐÍ
±¸×¢
HH
C
Ë÷Òý¹Ø¼ü×Ö
BL
N

ZZCM
C

ÆäËü×Ö¶Î

¡¡¡¡»ùÓÚMFC ODBCÀ࿪·¢µÄÊý¾Ý¿âÓ¦ÓóÌÐò£¬ÊÇͨ¹ýMFC ODBCÀàʹÓÃSQLÓï¾ä·½Ê½²Ù×ÝÊý¾Ý±íµÄ¡£Êý¾Ý¿âÖбíFSBÓë±íDBK1¹ØÁª²éѯµÄSQLÓï¾äÊÇ£º
SELECT * FROM FSB£¬DBK1 WHERE FSB.BZM=DBK1.HH
ÓÉÓÚ´´½¨Ò»¸öCRecordsetÅÉÉúÀàʱ£¬Ò»°ãֻѡÔñÒ»¸öÊý¾ÝÔ´ÖеÄÒ»¸ö±í£¬Òò´Ë»ùÓÚMFC ODBCÀ࿪·¢µÄÊý¾Ý¿âÓ¦ÓóÌÐòҪʵÏÖ¶þ¸ö±í¹ØÁª£¬¾ÍҪʹÓÃCRecordsetÀàµÄ²ÎÊým _strFilter¡£ËüÏ൱ÓÚSQLÓï¾äÖеÄWHERE×Ӿ䡣²ÎÊým _strSortÏ൱ÓÚSQLÓï¾äÖеÄGROUP BY×Ӿ䡣ҪעÒâm_strFilter×Ö·û´®Öв»Òª°üº¬¡°WHERE¡±¹Ø¼ü×Ö¡£±¾ÀýÔÚ±íFSBÓë±íDBK1¶ÔÓ¦µÄCRecordsetÅÉÉúÀàÖзֱðʹÓÃÁËmbzmºÍmhh¶þ¸öm _strFilter²ÎÊý¡£ÓÃÊó±êµã»÷¡°¹ØÁª¡±°´Å¥Ê±£¬³ÌÐòÊ×Ïȸù¾Ý¡°¶¨Î»¡± ±à¼­¿òÖеÄÄÚÈÝ×÷ΪmbzmµÄÖµ£¬ÔÚ±íFSB¼ìË÷½á¹û¼¯¡£±íDBK1¶ÔÓ¦µÄCRecordsetÅÉÉúÀà¸ù¾Ý±íFSB¶ÔÓ¦µÄCRecordsetÅÉÉúÀàµÄµ±Ç°¼Ç¼m_bzmÖµ£¬×÷ΪmhhµÄֵʵÐмìË÷£¬´Ó¶øµÃµ½Óë±íFSB¹Ø¼ü×Ö¶ÎBZM¶ÔÓ¦µÄ±íDBK1µÄ¼Ç¼¡£ÊµÏÖÁ˱íFSBÓë±íDBK1µÄ¹ØÁª¡£Óɴ˿ɼû£¬¶þ±í¹ØÁªµÄ¹Ø¼üÊÇm _strFilter²ÎÊýµÄÉèÖá£

ͼ 1

3£®2 Êý¾Ý¿âÓ¦ÓóÌÐò´´½¨
3£®2£® 1 ´´½¨µ¥±íµ¥ÎĵµµÄÊý¾Ý¿âÓ¦ÓóÌÐò
¸ù¾ÝÇ°Ãæ½¨Á¢µÄÊý¾ÝÔ´DB-FSB£¬Ê¹ÓÃVC++ Appwizard Éú³ÉÒ»¸öµ¥±íµ¥¡¢µ¥ÎĵµµÄÊý¾Ý¿âÓ¦ÓóÌÐò¡£Ñ¡ÔñÊý¾ÝÔ´DB-FSBµÄÊý¾Ý±íʱӦѡÔñFSB.DBF¡£Ó¦ÓóÌÐòÃûΪZF0001£¨¾ßÌå²½Öè¿É²Î¿¼ÓйØVC++×ÊÁÏ£©¡£ZF0001Ó¦ÓóÌÐòÖд´½¨ÁËCZf0001Doc¡¢CZf0001Set¡¢CZf0001ViewµÈÅÉÉúÀà¡£
3£®2£®2 ÉèÖÃm _strFilter²ÎÊý
ÔÚÉÏÒ»²½Éú³ÉµÄCZf0001SetÀàÖУ¬°´ÒÔÏ·½Ê½£¬ÔÚ¢Ù ¢Ú ¢Û³ÌÐòÖÐÉèÖÃm _strFilter²ÎÊý£¨ºÚÌ岿·ÖµÄÓï¾ä¶¼ÊÇΪCZf0001SetµÄ²ÎÊýmbzm¶øÊÖ¶¯Ôö¼ÓµÄ£©¡£Îª½Úʡƪ·ù£¬Ê¡ÂÔ³ÌÐòÇåµ¥µÄ²¿·ÖÄÚÈÝ¡£
¢Ù£® ÔÚCrecordsetÅÉÉúÀàµÄ¶¨ÒåÖУ¬ÃèÊöÁ˱»Á¬½ÓµÄÊý¾ÝÔ´±íµÄ×ֶΣ¬²¢ÔÚVC++ Appwizard Éú³ÉµÄ³ÌÐò×¢ÊÍ¡°// Field/Param Data ¡±ÖÐÌáʾÔڴ˿ɶ¨Òå²ÎÊý¡£
CRecordsetÅÉÉúÀࣺCZf0001SetµÄ¶¨Òå
class CZf0001Set : public Crecordset //CrecordsetÅÉÉúÀàCZf0001Set
{
public:
CZf0001Set(CDatabase* pDatabase = NULL);
DECLARE_DYNAMIC(CZf0001Set)
// Field/Param Data
//{{AFX_FIELD(CZf0001Set, CRecordset) //±»°ó¶¨µÄ×Ö¶Î
CString m_bzm;
CString m_dgqd1;
¡¢¡¢¡¢¡¢¡¢¡¢ //Ϊ½Úʡƪ·ù£¬Ê¡ÂÔ²¿·Ö×Ö¶Î
CString m_bz;
//}}AFX_FIELD
CString mbzm; // ²ÎÊýmbzm
// Overrides
// ClassWizard generated virtual function overrides
¡¢¡¢¡¢¡¢¡¢¡¢¡¢
virtual void Dump(CDumpContext& dc) const;
#endif
};
¢Ú£®CrecordsetÅÉÉúÀࣺCZf0001SetµÄ¹¹Ô캯Êý
ÆäÖУ¬¶Ô±»°ó¶¨×ֶεÄÏàÓ¦ÄÚ´æ±äÁ¿½øÐÐÁ˳õʼ»¯¡£
CZf0001Set::CZf0001Set(CDatabase* pdb) : CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CZf0001Set)
m_bzm = _T("");
m_dgqd1 = _T("");
¡¢¡¢¡¢¡¢¡¢¡¢
m_bz = _T("");
m_nFields = 16; //Êý¾ÝÔ´±íµÄ¼Ç¼×ֶθöÊý
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
m_nParams=1; // CZf0001SetµÄ²ÎÊý¸öÊý
mbzm=""; //²ÎÊý³õʼ»¯
}
¢Û£®¼Ç¼×ֶν»»»£¨RFX£©
ͨ¹ýʹÓÃRFX£¬MFC¿ò¼Ü¿ÉÒÔÔÚÊý¾Ý¿âºÍCRecordsetÀà±äÁ¿Ö®¼ä½»»»¡£½»»»ÊÇͨ¹ýÖ´ÐÐDoFieldExchange£¨£©º¯Êý¶ø½¨Á¢µÄ¡£
void CZf0001Set::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CZf0001Set)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("[bzm]"), m_bzm);
RFX_Text(pFX, _T("[dgqd1]"), m_dgqd1);
¡¢¡¢¡¢¡¢¡¢¡¢;
RFX_Text(pFX, _T("[dgdl2]"), m_dgdl2);
RFX_Text(pFX, _T("[bz]"), m_bz);
//}}AFX_FIELD_MAP
pFX->SetFieldType(CFieldExchange::param);
//°Ñ×Ö¶ÎÀàÐÍÉèΪCFieldExchange::param
RFX_Text(pFX,"mbzm",mbzm); //Ϊ²ÎÊýÉèÖÃRFX ºê£¬Èç¹ûÓжà¸ö²ÎÊý£¬±ØÐë°´SQLµÄÓï¾äÖеÄλÖñêÖ¾·ûµÄ˳ÐòÉèÖã¬RFX ºêÖеIJÎÊýµÄÃû×ÖÈç"mbzm"£¬²¢·ÇÓÃÀ´Óë²ÎÊýÆ¥Å䣬¿ÉÒÔ×Ô¼º¶¨Òå¡£
}
3£®2£®3 Ôö¼ÓµÚ¶þ¸ö±í£¬²¢ÉèÖõڶþ¸ö±íµÄ²ÎÊý
ÔÚ3¡£2¡£1´´½¨µÄÊý¾Ý¿âÓ¦ÓóÌÐò»ù´¡ÉÏ£¬½øÈëClassWizard£¬µã»÷Add Class...°´Å¥²¢ÔÚµ¯³öµÄ²Ëµ¥ÖÐÑ¡ÔñNew...£¬È»ºóÔÚCreate New Class¶Ô»°¿òÖеÄNameÀ¸ÖÐÊäÈëCZf1001£¬ÔÚBase classÀ¸ÖÐÑ¡ÔñCRecordset£¬°´Create°´Å¥¡£
ÔÚµ¯³öµÄDatabase Options¶Ô»°¿òÖУ¬ÔÚODBC×éºÏ¿òÀïÑ¡ÔñDB-FSBÊý¾ÝÔ´¡£È»ºó°´OK°´Å¥¡£ÔÚµ¯³öµÄSelect Database Tables¶Ô»°¿òÖÐÑ¡ÔñDBK1±í¡£°´OKÈ·ÈÏ¡£²¢ÔÚËùÓдæÔÚ #include "CZf0001Set.h" µÄÎļþÖУ¬¶¼¼ÓÈë#include "CZf1001.h" ¡£ÕâÑù¾Í´´½¨ÁËÓëDBK1±í¶ÔÓ¦µÄCrecordsetÅÉÉúÀà¡£
ÔÚµÚÒ»²½´´½¨µÄCZf0001DocÀàÖУ¬Ôö¼ÓÒ»¸öCZf1001 ¶ÔÏóµÄÖ¸Õë±äÁ¿m_zf1002£¨¼´£ºCZf1001* m_zf1002£©¡£
°´3.2.2½éÉܵÄCZf0001SetÀàm _strFilter²ÎÊýµÄÉèÖ÷½·¨£¬ÔÚCZf1001ÀàÖУ¬ÉèÖòÎÊýmhh¡£
3£® 3 ²ÎÊýmhh¼°²ÎÊýmbzmÔÚCrecordViewµÄÅÉÉúÀàCZf0001ViewÖеÄʹÓÃ
3£®3£®1 ²ÎÊýÔÚCZf0001View::OnInitialUpdate()º¯ÊýʹÓÃ
ÔÚCZf0001View::OnInitialUpdate()º¯ÊýµÄ¿ªÍ·²¿·Ö£¬µ÷ÓÃCZf0001View:: GetDocument()´ÓÎĵµÀàCZf0001DocÀàÖУ¬·µ»Ø¶þ¸öCrecordSetÀࣨCZf0001Set¡¢CZf1001£©µÄÖ¸Õë¡£¸ù¾Ý·µ»ØµÄÖ¸Õ룬ÉèÖÃm _strFilter (Ï൱ÓÚSQLÓï¾äµÄWHERE×Ó¾ä)£¬²¢È·¶¨¶þ¸ö²ÎÊýµÄ³õʼֵ¡£ÕâÀïҪ˵Ã÷Ò»µã£º
m_pSet->m_strFilter="BZM like ?";
m_pSet2->m_strFilter="hh like ?";
Óï¾äÖеġ°£¿¡±£¬ÔÚµ÷ÓÃOpen»òRequeryʱ£¬¡°?"½«·Ö±ð×Ô¶¯µØ±»CZf0001Set::mbzmºÍ CZf1001::mhhµÄֵȡ´ú¡£ÀýÈ磬ָ¶¨mbzmΪ¡°31001"£¬Ôòm_pSet->m_strFilter½«±ä³É"BZM =31001"¡£ÕâÑùÓû§Ö»ÒªÖ¸¶¨ÁËmbzm£¬¾Í¿ÉÒԵõ½ËùÐèÒªµÄ¼Ç¼¼¯¡£CZf0001View::OnInitialUpdate()µÄ³ÌÐòÇåµ¥ÈçÏ£¨ºÚÌ岿·ÖµÄÓï¾äÊÇÊÖ¹¤Ôö¼ÓµÄ£©£º
void CZf0001View::OnInitialUpdate()
{ m_pSet = &GetDocument()->m_zf0001Set;
m_pSet2=&GetDocument()->m_zf1002;
if(!m_pSet2->Open())
return;
m_pSet->m_strFilter="BZM like ?";
m_pSet->mbzm= "%"; //³õʼѡÔñËùÓмǼ
m_pSet->m_strSort="";
m_pSet2->m_strFilter="hh like ?";
m_pSet2->mhh=m_pSet->m_bzm; //½«±íFSB¶ÔÓ¦µÄCRecordsetÅÉÉúÀàµÄm_bzmµÄÖµ£¬×÷Ϊ²ÎÊýmhhµÄÖµ¡¡
m_pSet2->m_strSort=""; ¡¡//¼ìË÷µÄ½á¹û²»½øÐÐÅÅÐò
m_pSet->m_pDatabase= m_pSet2->m_pDatabase; //¹²ÏíCDatabase

CRecordView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
3£®3£®2 ÔÚ¶Ô»°¿òÖмÓÈë±à¼­¿ò
ÔÚ×ÊÔ´ÊÓͼDialogµÄIDD_ZF0001_FORM±íµ¥ÖУ¬¼ÓÈëÓû§ÐèÒªµÄ±à¼­¿ò¡£ÓÃClassWizardÔÚµÚÒ»¸ö±íFSBÖÐÑ¡ÔñÓйØ×Ö¶ÎÓëËüÃÇÏàÁ¬¡£µ«ÊÇ.ʹÓÃClassWizardÎÞ·¨ÕÒµ½µÚ¶þ¸ö±íDBK1×ֶαäÁ¿£¬Òò´Ë£¬¶ÔÓڼƻ®ÓëµÚ¶þ¸ö±íDBK1×Ö¶ÎÏàÁ¬µÄ±à¼­¿ò£¬±ØÐëÓÃÊÖ¹¤ÐÞ¸ÄCRecordViewÀàµÄDoDataExchange()(¶Ô»°¿òÊý¾Ý½»»»º¯Êý)¡£ ÔÚDoDataExchange()º¯Êý ¡°//}}AFX_DATA_MAP¡± ºóÃæ¼ÓÈëÓйØÄÚÈÝ¡£¼ûÏÂÃæ³ÌÐòµÄºÚÌ岿·Ö¡£Èç¹ûºÚÌ岿·ÖÓï¾ä¼ÓÔÚ¡°//}}AFX_DATA_MAP¡±µÄÇ°Ãæ,ÄÇô,ÒªÔÙ´ÎÐÞ¸ÄIDD_ZF0001_FORM±íµ¥Ê±,¾ÍÎÞ·¨Ê¹ÓÃClassWizard.
void CZf0001View::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CZf0001View)
DDX_Control(pDX, IDC_COMBO1, m_comb);
DDX_Control(pDX, IDC_EDIT4, m_SS);
DDX_FieldText(pDX, IDC_EDIT2, m_pSet->m_bl1, m_pSet);
DDX_FieldText(pDX, IDC_EDIT3, m_pSet->m_dgdl1, m_pSet);
DDX_FieldCBString(pDX, IDC_COMBO1, m_pSet->m_bzm, m_pSet);
DDX_FieldText(pDX, IDC_EDIT5, m_pSet->m_dgqd1, m_pSet);
//}}AFX_DATA_MAP
DDX_FieldText(pDX, IDC_EDIT1, m_pSet2->m_bl, m_pSet2);
DDX_FieldText(pDX, IDC_EDIT6, m_pSet2->m_hh, m_pSet2);
DDX_FieldText(pDX, IDC_EDIT7, m_pSet2->m_zzcm, m_pSet2);
}
3£®3£®3 ÔÚ¶Ô»°¿òÖмÓÈëÒ»¸ö°´Å¥
ΪÑÝʾ¶þ¸ö±í¹ØÁªµÄЧ¹û£¬ÔÚ¶Ô»°¿òÖмÓÈëÒ»¸ö¡°¹ØÁª¡±°´Å¥ºÍÒ»¸öÊäÈë²ÎÊýÓõÄ"¶¨Î»"±à¼­¿ò¡£²¢¸ø´Ë°´Å¥Ôö¼Óµ¥»÷ʼþ´úÂëÈçÏÂ:

void CZf0001View::OnButton1()
{
// TODO: Add your control notification handler code here
char ll[11];
int nn=0;
m_SS.GetLine(0,ll); //¶Á¡°¶¨Î»¡±±à¼­¿òÖеÄÄÚÈÝ
nn=m_SS.LineLength(0); //¶Á¡°¶¨Î»¡±±à¼­¿òÖеÄ×Ö·ûÄÚÈݵij¤¶È
if(nn) //¡°¶¨Î»¡±±à¼­¿òÖÐÓÐÊäÈëÄÚÈÝ£¬Ôò°´ÄÚÈݼìË÷ÐγÉеļǼ¼¯
{ m_pSet->mbzm=(CString)ll;
m_pSet->mbzm=m_pSet->mbzm.Left(nn)+"%"; //¡°%¡±ÓÉSQLÓï·¨¹æ¶¨´ú±íÈÎÒⳤ¶È£¨³¤¶È¿ÉÒÔΪ0£©µÄ×Ö·û´®
m_pSet->Requery(); //ÔÚ±íFSBÖÐÖØÐ¼ìË÷
if(m_pSet->IsEOF())
{ MessageBox("¼ìË÷½á¹ûΪ¿Õ!");
UpdateData(FALSE);
m_pSet->mbzm="%";
m_pSet->Requery();
}
m_pSet2->Requery(); //ÒÔ±í1µ±Ç°¼Ç¼BZMÖµ£¬ÔÚ±í2£ºDBK1ÖмìË÷
UpdateData(FALSE); //Ë¢ÐÂ±íµ¥ÄÚÈÝ
m_SS.SetSel(0,-1);
m_SS.ReplaceSel(""); //Çå³ý¡°¶¨Î»¡±±à¼­¿òÖеÄÄÚÈÝ£¬Ê¹ÏÂÒ»´Îµ¥»÷¡°¹ØÁª¡±°´Å¥Ê±£¬²»»áÖØ¸´¼ìË÷£¨¼´Ê¹nn=0£©
}
else //¡°¶¨Î»¡±±à¼­¿òΪ¿Õ£¬Ôò°´±í1ÏÖÓеĽá¹û¼¯Óë±í2£ºDBK1¹ØÁª
{
m_pSet2->mhh=m_pSet->m_bzm; //½«±í1µ±Ç°¼Ç¼BZMÖµ£¬×÷Ϊ±íDBK1µÄ²éÕÒ²ÎÊý
m_pSet2->Requery();
UpdateData(FALSE);
m_pSet->MoveNext();
}
}
4£® С½á
ͨ¹ý±¾Àý¿ÉÖª£¬ËäÈ»VC++ÌṩÁËAppwizardºÍClasswizard, Ϊ±à³ÌÕß½ÚÊ¡ÁË´óÁ¿µÄ¹¤×÷£¬µ«ÊÇÏë±à³öÓÅÐãµÄVC++Ó¦ÓóÌÐò,½öƾÕâЩÊÇÔ¶Ô¶²»¹»µÄ;±ØÐëÊìϤMFCÀà¿â¡¢ActiveX¿Ø¼þµÈ֪ʶ¡£±¾ÎÄ×÷Ϊһ¸öÀý×Ó½éÉÜÁ˶þ¸ö±íµÄÁª½Ó·½·¨¡£ÔÚʵ¼ÊµÄÓ¦ÓÃÖУ¬¶ÁÕß¿ÉÒÔ¾ÙÒ»·­Èý£¬±àÖÆ¸ü¼ÓÍêÉÆµÄÊý¾Ý¿âÓ¦ÓóÌÐò¡£

²Î¿¼ÎÄÏ×
1. ¿µ²©´´×÷ÊҵȱàÖø. Visual C++6.0 ¸ß¼¶¿ª·¢½Ì³Ì. ÈËÃñÓʵç³ö°æÉç
2. ÆëÊæ´´×÷ÊÒ ±àÖø. Visual C++6.0±à³Ì¼¼ÇÉÓëʵÀý·ÖÎö. ÖйúË®ÀûË® µç³ö°æÉç
3. ¹ÙÕÂÈ« Áõ¼ÓÃ÷±àÖø. Visual C++6.0 Àà¿â´óÈ«. µç×Ó¹¤Òµ³ö°æÉç

¡¡¡¡Õª×Ô¡¶Èí¼þÊÀ½ç¡·¡¡

 

¡¶Ê¹ÓÃOLEDB±àдÊý¾Ý¿âÓ¦ÓóÌÐò¡·

ÈÕÆÚ£º2001.11.10 ä¯ÀÀ£º7

 

ʹÓÃOLE DB
Ò»¡¢¸ÅÊö
OLE DB
µÄ´æÔÚΪÓû§ÌṩÁËÒ»ÖÖͳһµÄ·½·¨À´·ÃÎÊËùÓв»Í¬ÖÖÀàµÄÊý¾ÝÔ´¡£OLE DB¿ÉÒÔÔÚ²»Í¬µÄÊý¾ÝÔ´ÖнøÐÐת»»¡£ÀûÓÃOLE DB£¬¿Í»§¶ËµÄ¿ª·¢ÈËÔ±ÔÚ½øÐÐÊý¾Ý·ÃÎÊʱֻÐè°Ñ¾«Á¦¼¯ÖÐÔÚºÜÉÙµÄһЩϸ½ÚÉÏ£¬¶ø²»±ØÅª¶®´óÁ¿²»Í¬Êý¾Ý¿âµÄ·ÃÎÊЭÒé¡£
OLE DB
ÊÇÒ»Ì×ͨ¹ýCOM½Ó¿Ú·ÃÎÊÊý¾ÝµÄActiveX½Ó¿Ú¡£Õâ¸öOLE DB½Ó¿ÚÏ൱ͨÓã¬×ãÒÔÌṩһÖÖ·ÃÎÊÊý¾ÝµÄͳһÊֶΣ¬¶ø²»¹Ü´æ´¢Êý¾ÝËùʹÓõķ½·¨ÈçºÎ¡£Í¬Ê±£¬OLE DB»¹ÔÊÐí¿ª·¢ÈËÔ±¼ÌÐøÀûÓûù´¡Êý¾Ý¿â¼¼ÊõµÄÓŵ㣬¶ø²»±ØÎªÁËÀûÓÃÕâЩÓÅµã¶ø°ÑÊý¾ÝÒÆ³öÀ´¡£

¶þ¡¢Ê¹ÓÃATLʹÓÃOLE DBÊý¾ÝʹÓóÌÐò
ÓÉÓÚÖ±½ÓʹÓÃOLE DBµÄ¶ÔÏóºÍ½Ó¿ÚÉè¼ÆÊý¾Ý¿âÓ¦ÓóÌÐòÐèÒªÊéд´óÁ¿µÄ´úÂ롣ΪÁ˼ò»¯³ÌÐòÉè¼Æ£¬Visual C++ÌṩÁËATLÄ£°åÓÃÓÚÉè¼ÆOLE DBÊý¾ÝÓ¦ÓóÌÐòºÍÊý¾ÝÌṩ³ÌÐò¡£
ÀûÓÃATLÄ£°å¿ÉÒÔºÜÈÝÒ׵ؽ«OLE DBÓëMFC½áºÏÆðÀ´£¬Ê¹Êý¾Ý¿âµÄ²ÎÊý²éѯµÈ¸´Ôӵıà³ÌµÃµ½¼ò»¯¡£MFCÌṩµÄÊý¾Ý¿âÀàʹOLE DBµÄ±à³Ì¸ü¾ßÓÐÃæÏò¶ÔÏóµÄÌØÐÔ¡£Viual C++ËùÌṩÓÃÓÚOLE DBµÄATLÄ£°å¿É·ÖΪÊý¾ÝÌṩ³ÌÐòµÄÄ£°åºÍÊý¾ÝʹÓóÌÐòµÄÄ£°å¡£
ʹÓÃATLÄ£°å´´½¨Êý¾ÝÓ¦ÓóÌÐòÒ»°ãÓÐÒÔϼ¸²½Ö裺
1
¡¢ ´´½¨Ó¦Óÿò¼Ü
2
¡¢ ¼ÓÈëATL²úÉúµÄÄ£°åÀà
3
¡¢ ÔÚÓ¦ÓÃÖÐʹÓòúÉúµÄÊý¾Ý·ÃÎʶÔÏó

Èý¡¢²»ÓÃATLʹÓÃOLE DBÊý¾ÝʹÓóÌÐò
ÀûÓÃATLÄ£°å²úÉúÊý¾ÝʹÓóÌÐò½ÏΪ¼òµ¥£¬µ«ÊÊÓÃÐÔ²»¹ã£¬²»Äܶ¯Ì¬ÊÊÓ¦Êý¾Ý¿âµÄ±ä»¯¡£ÏÂÃæÎÒÃǽéÉÜÖ±½ÓʹÓÃMFC OLE DBÀàÀ´Éú³ÉÊý¾ÝʹÓóÌÐò¡£
Ä£°åµÄʹÓÃ
OLE DB
Êý¾ÝʹÓÃÕßÄ£°åÊÇÓÉһЩģ°å×é³ÉµÄ£¬°üÀ¨ÈçÏÂһЩģ°å£¬ÏÂÃæ¶ÔһЩ³£ÓÃÀà×÷һЩ½éÉÜ¡£
1
¡¢ »á»°Àà
CDataSource
Àà
CDataSource
ÀàÓëOLE DBµÄÊý¾ÝÔ´¶ÔÏóÏà¶ÔÓ¦¡£Õâ¸öÀà´ú±íÁËOLE DBÊý¾ÝÌṩ³ÌÐòºÍÊý¾ÝÔ´Ö®¼äµÄÁ¬½Ó¡£Ö»Óе±Êý¾ÝÔ´µÄÁ¬½Ó±»½¨Á¢Ö®ºó£¬²ÅÄܲúÉú»á»°¶ÔÏ󣬿ÉÒÔµ÷ÓÃOpenÀ´´ò¿ªÊý¾ÝÔ´µÄÁ¬½Ó¡£
CSession
Àà
CSession
Ëù´´½¨µÄ¶ÔÏó´ú±íÁËÒ»¸öµ¥¶ÀµÄÊý¾Ý¿â·ÃÎʵĻỰ¡£Ò»¸öÓÃCDataSourceÀà²úÉúµÄÊý¾ÝÔ´¶ÔÏó¿ÉÒÔ´´½¨Ò»¸ö»òÕß¶à¸ö»á»°£¬ÒªÔÚÊý¾ÝÔ´¶ÔÏóÉϲúÉúÒ»¸ö»á»°¶ÔÏó£¬ÐèÒªµ÷Óú¯ÊýOpen()À´´ò¿ª¡£Í¬Ê±£¬»á»°¶ÔÏ󻹿ÉÓÃÓÚ´´½¨ÊÂÎñ²Ù×÷¡£
CEnumeratorAccessor
Àà
CEnumeratorAccessor
ÀàÊÇÓÃÀ´·ÃÎÊö¾ÙÆ÷²éѯºóËù²úÉúµÄÐм¯ÖпÉÓÃÊý¾ÝÌṩ³ÌÐòµÄÐÅÏ¢µÄ·ÃÎÊÆ÷£¬¿ÉÌṩµ±Ç°¿ÉÓõÄÊý¾ÝÌṩ³ÌÐòºÍ¿É¼ûµÄ·ÃÎÊÆ÷¡£
2
¡¢ ·ÃÎÊÆ÷Àà
CAcessor
Àà
CAccessor
Àà´ú±íÓë·ÃÎÊÆ÷µÄÀàÐÍ¡£µ±Óû§ÖªµÀÊý¾Ý¿âµÄÀàÐͺͽṹʱ£¬¿ÉÒÔʹÓôËÀà¡£ËüÖ§³Ö¶ÔÒ»¸öÐм¯²ÉÓöà¸ö·ÃÎÊÆ÷£¬²¢ÇÒ£¬´æ·ÅÊý¾ÝµÄ»º³åÇøÊÇÓÉÓû§·ÖÅäµÄ¡£
CDynamicAccessor
Àà
CDynamicAccessor
ÀàÓÃÀ´ÔÚ³ÌÐòÔËÐÐʱ¶¯Ì¬µÄ´´½¨·ÃÎÊÆ÷¡£µ±ÏµÍ³ÔËÐÐʱ£¬¿ÉÒÔ¶¯Ì¬µØ´ÓÐм¯ÖлñµÃÁеÄÐÅÏ¢£¬¿É¸ù¾Ý´ËÐÅÏ¢¶¯Ì¬µØ´´½¨·ÃÎÊÆ÷¡£
CManualAccessor
Àà
CManualAccessor
ÀàÖÐÒÔÔÚ³ÌÐòÔËÐÐʱ½«ÁÐÓë±äÁ¿°ó¶¨»òÕßÊǽ«²ÎÊýÓë±äÁ¿À¦¶¨¡£
3
¡¢ Ðм¯Àà
CRowSet
Àà
CRowSet
Àà·â×°ÁËÐм¯¶ÔÏóºÍÏàÓ¦µÄ½Ó¿Ú£¬²¢ÇÒÌṩÁËһЩ·½·¨ÓÃÓÚ²éѯ¡¢ÉèÖÃÊý¾ÝµÈ¡£¿ÉÒÔÓÃMove£¨£©µÈº¯Êý½øÐмÇÂ¼ÒÆ¶¯£¬ÓÃGetData()º¯Êý¶ÁÈ¡Êý¾Ý£¬ÓÃInsert()¡¢Delete()¡¢SetData()À´¸üÐÂÊý¾Ý¡£
CBulkRowset
Àà
CBulkRowset
ÀàÓÃÓÚÔÚÒ»´Îµ÷ÓÃÖÐÈ¡»Ø¶à¸öÐоä±ú»òÕß¶Ô¶à¸öÐнøÐвÙ×÷¡£
CArrayRowset
Àà
CArrayRowset
ÀàÌṩÓÃÊý×éÏÂ±ê½øÐÐÊý¾Ý·ÃÎÊ¡£
4
¡¢ ÃüÁîÀà
CTable
Àà
CTable
ÀàÓÃÓÚ¶ÔÊý¾Ý¿âµÄ¼òµ¥·ÃÎÊ£¬ÓÃÊý¾ÝÔ´µÄÃû³ÆµÃµ½Ðм¯£¬´Ó¶øµÃµ½Êý¾Ý¡£
CCommand
Àà
CCommand
ÀàÓÃÓÚÖ§³ÖÃüÁîµÄÊý¾ÝÔ´¡£¿ÉÒÔÓÃOpen()º¯ÊýÀ´Ö´ÐÐSQLÃüÁҲ¿ÉÒÔPrepare£¨£©º¯ÊýÏȶÔÃüÁî½øÐÐ×¼±¸£¬¶ÔÓÚÖ§³ÖÃüÁîµÄÊý¾ÝÔ´£¬¿ÉÒÔÌá¸ß³ÌÐòµÄÁé»îÐԺͽ¡×³ÐÔ¡£
ÔÚstdafx.hÍ·ÎļþÀ¼ÓÈëÈçÏ´úÂë¡£
#include <atlbase.h>
extern CComModule _Module;
#include <atlcom.h>
#include <atldbcli.h>
#include <atldbsch.h> // if you are using schema templates
ÔÚstdafx.cppÎļþÀ¼ÓÈëÈçÏ´úÂë¡£
#include <atlimpl.cpp>
CComModule _Module;
¾ö¶¨Ê¹ÓúÎÖÖÀàÐ͵ĴæÈ¡³ÌÐòºÍÐм¯¡£
»ñÈ¡Êý¾Ý
ÔÚ´ò¿ªÊý¾ÝÔ´£¬»á»°£¬Ðм¯¶ÔÏóºó¾Í¿ÉÒÔ»ñÈ¡Êý¾ÝÁË¡£Ëù»ñÈ¡µÄÊý¾ÝÀàÐÍÈ¡¾öÓÚËùÓõĴæÈ¡³ÌÐò£¬¿ÉÄÜÐèÒª°ó¶¨ÁС£°´ÒÔϲ½Öè¡£
1
¡¢ ÓÃÕýÈ·µÄÃüÁî´ò¿ªÐм¯¶ÔÏó¡£
2
¡¢ Èç¹ûʹÓÃCManualAccessor£¬ÔÚʹÓÃ֮ǰÓëÏàÓ¦ÁнøÐа󶨡£Òª°ó¶¨ÁУ¬¿ÉÒÔÓú¯ÊýGetColumnInfo,ÈçÏÂËùʾ£º
// Get the column information
ULONG ulColumns
¡¡¡¡¡¡ = 0;
DBCOLUMNINFO* pColumnInfo
¡¡= NULL;
LPOLESTR pStrings
¡¡¡¡¡¡= NULL;
if (rs.GetColumnInfo(&ulColumns, &pColumnInfo, &pStrings) != S_OK)
AfxThrowOLEDBException(rs.m_pRowset, IID_IColumnsInfo);
struct MYBIND* pBind = new MYBIND[ulColumns];
rs.CreateAccessor(ulColumns, &pBind[0], sizeof(MYBIND)*ulColumns);
for (ULONG l=0; l<ulColumns; l++)
rs.AddBindEntry(l+1, DBTYPE_STR, sizeof(TCHAR)*40, &pBind[l].szValue, NULL, &pBind[l].dwStatus);
rs.Bind();
3
¡¢ ÓÃwhileÑ­»·À´È¡Êý¾Ý¡£ÔÚÑ­»·ÖУ¬µ÷ÓÃMoveNextÀ´²âÊÔ¹â±êµÄ·µ»ØÖµÊÇ·ñΪS_OK£¬ÈçÏÂËùʾ£º
while (rs.MoveNext() == S_OK)
{
¡¡ // Add code to fetch data here
¡¡ // If you are not using an auto accessor, call rs.GetData()
}
4
¡¢ ÔÚwhileÑ­»·ÄÚ£¬¿ÉÒÔͨ¹ý²»Í¬µÄ´æÈ¡³ÌÐò»ñÈ¡Êý¾Ý¡£
1
£© Èç¹ûʹÓõÄÊÇCAccessorÀ࣬¿ÉÒÔͨ¹ýʹÓÃËüÃǵÄÊý¾Ý³ÉÔ±½øÐÐÖ±½Ó·ÃÎÊ¡£ÈçÏÂËùʾ£º
2
£© Èç¹ûʹÓõÄÊÇCDynamicAccessor »òCDynamicParameterAccessor À࣬¿ÉÒÔͨ¹ýGetValue»òGetColumnº¯ÊýÀ´»ñÈ¡Êý¾Ý¡£¿ÉÒÔÓÃGetTypeÀ´»ñÈ¡ËùÓÃÊý¾ÝÀàÐÍ¡£ÈçÏÂËùʾ£º
while (rs.MoveNext() == S_OK)
{
¡¡ // Use the dynamic accessor functions to retrieve your
¡¡ // data
¡¡ ULONG ulColumns = rs.GetColumnCount();
¡¡ for (ULONG i=0; i<ulColumns; i++)
¡¡ {
¡¡¡¡ rs.GetValue(i);
¡¡ }
}
3
£© Èç¹ûʹÓõÄÊÇCManualAccessor,¿ÉÒÔÖ¸¶¨×Ô¼ºµÄÊý¾Ý³ÉÔ±£¬°ó¶¨ËüÃÇ¡£¾Í¿ÉÒÔÖ±½Ó´æÈ¡¡£ÈçÏÂËùʾ£º
while (rs.MoveNext() == S_OK)
{
¡¡ // Use the data members you specified in the calls to
¡¡ // AddBindEntry.
¡¡ wsprintf("%s", szFoo);
}
¾ö¶¨Ðм¯µÄÊý¾ÝÀàÐÍ
ÔÚÔËÐÐʱ¾ö¶¨Êý¾ÝÀàÐÍ£¬ÒªÓö¯Ì¬»òÊÖ¹¤µÄ´æÈ¡³ÌÐò¡£Èç¹ûÓõÄÊÇÊÖ¹¤´æÈ¡³ÌÐò£¬¿ÉÒÔÓÃGetColumnInfoº¯ÊýµÃµ½Ðм¯µÄÁÐÐÅÏ¢¡£´ÓÕâÀï¿ÉÒԵõ½Êý¾ÝÀàÐÍ¡£
ËÄ¡¢×ܽá
ÓÉÓÚÏÖÔÚÓжàÖÖÊý¾ÝÔ´£¬£¬ÏëÒª¶ÔÕâЩÊý¾Ý½øÐзÃÎʹÜÀíµÄΨһ;¾¶¾ÍÊÇͨ¹ýһЩͬÀà»úÖÆÀ´ÊµÏÖ£¬ÈçOLE DB¡£¸ß¼¶OLE DB½á¹¹·Ö³ÉÁ½²¿·Ö£º¿Í»§ºÍÌṩÕß¡£¿Í»§Ê¹ÓÃÓÉÌṩÕßÉú³ÉµÄÊý¾Ý¡£
¾ÍÏñÆäËü»ùÓÚCOMµÄ¶àÊý½á¹¹Ò»Ñù£¬OLE DBµÄ¿ª·¢ÈËÔ±ÐèҪʵÏֺܶàµÄ½Ó¿Ú£¬ÆäÖд󲿷ÖÊÇÄ£°åÎļþ¡£
µ±Éú³ÉÒ»¸ö¿Í»§¶ÔÏóʱ£¬¿ÉÒÔͨ¹ýATL¶ÔÏóÏòµ¼Ö¸ÏòÒ»¸öÊý¾ÝÔ´¶ø´´½¨Ò»¸ö¼òµ¥µÄ¿Í»§¡£ATL¶ÔÏóÏòµ¼½«»á¼ì²éÊý¾ÝÔ´²¢´´½¨Êý¾Ý¿âµÄ¿Í»§¶Ë´úÀí¡£´ÓÄÇÀ¿ÉÒÔͨ¹ýOLE DB¿Í»§Ä£°åʹÓñê×¼µÄä¯ÀÀº¯Êý¡£
µ±Éú³ÉÒ»¸öÌṩÕßʱ£¬Ïòµ¼ÌṩÁËÒ»¸öºÜºÃµÄ¿ª¶Ë£¬ËüÃǽö½öÊÇÉú³ÉÁËÒ»¸ö¼òµ¥µÄÌṩÕßÀ´ÁоÙijһĿ¼ÏµÄÎļþ¡£È»ºó£¬ÌṩÕßÄ£°å°üº¬ÁËOLE DBÖ§³ÖµÄÍêÈ«²¹³äÄÚÈÝ¡£ÔÚÕâÖÖÖ§³ÖÏ£¬Óû§¿ÉÒÔ´´½¨OLE DBÌṩÕߣ¬À´ÊµÏÖÐм¯¶¨Î»²ßÂÔ¡¢Êý¾ÝµÄ¶ÁдÒÔ¼°½¨Á¢ÊéÇ©¡£

 

 

 

¡¶ÔÚVisual C++ÖÐÓÃADO½øÐÐÊý¾Ý¿â±à³Ì¡·

ÈÕÆÚ£º2001.11.10 ä¯ÀÀ£º11

 

¡¡¡¡ActiveXÊý¾Ý¶ÔÏó£¨ADO£©ÊÇOLE DBÉÏÃæµÄ¸ß²ãÊý¾Ý¿âAPI¡£ÎÒÃÇÔÚC£«£«³ÌÐòÖÐÒ²¿ÉÒÔµ÷ÓÃADO¡£±¾ÎĽ«ÔÚVC 6.0»·¾³ÏÂ×öÒ»¸öССµÄÀý×Ó½âÊÍÈçºÎʹÓÃADO¡£

¡¡¡¡1. Éú³ÉÓ¦ÓóÌÐò¿ò¼Ü²¢³õʼ»¯OLE/COM¿â»·¾³

¡¡¡¡´´½¨Ò»¸ö±ê×¼µÄMFC AppWizard(exe)Ó¦ÓóÌÐò£¬È»ºóÔÚÓ¦ÓóÌÐòÀàµÄInitInstanceº¯ÊýÖгõʼ»¯OLE/COM¿â£¨ÒòΪADO¿âÊÇÒ»¸öCOM DLL¿â£©¡£

¡¡¡¡BOOL CADOTestApp::InitInstance()

¡¡¡¡{ //³õʼ»¯OLE/COM¿â»·¾³

AfxOleInit();}

¡¡¡¡2. ÒýÈëADO¿âÎļþ

¡¡¡¡Ê¹ÓÃADOǰ±ØÐëÔÚ¹¤³ÌµÄstdafx.hÎļþÀïÓÃÖ±½ÓÒýÈë·ûºÅ££importÒýÈëADO¿âÎļþ£¬ÒÔʹ±àÒëÆ÷ÄÜÕýÈ·±àÒë¡£´úÂëÈçÏ£º

¡¡¡¡ ££include ¡´comdef.h¡µ

¡¡¡¡ ££import "c:\program files\common files\system\ado\msado15.dll"

¡¡¡¡ no_namespace

¡¡¡¡ rename ("EOF","adoEOF")

¡¡¡¡Í·Îļþcomdef.hʹÎÒÃǵÄÓ¦ÓóÌÐòÄܹ»Ê¹ÓÃVisual C£«£«ÖеÄÒ»Ð©ÌØÊâCOMÖ§³ÖÀ࣬ÕâЩÀàʹµÃ´¦ÀíOLE×ÔÖθüΪÈÝÒ×һЩ£¬OLE×ÔÖÎÊÇADOʹÓõÄÊý¾ÝÀàÐÍ¡£ºóÈýÐÐʹÓã£importÖ¸ÁîÔÚÎÒÃǵÄÓ¦ÓóÌÐòÖÐÊäÈëADOÀà¿â¶¨Òå¡£

¡¡¡¡ADOÀàµÄ¶¨ÒåÊÇ×÷ΪһÖÖ×ÊÔ´´æ´¢ÔÚADO DLL(msado15.dll£©ÖУ¬ÔÚÆäÄÚ²¿³ÆÎªÀàÐͿ⡣ÀàÐÍ¿âÃèÊöÁË×ÔÖνӿڣ¬ÒÔ¼°C£«£«Ê¹ÓõÄCOM vtable½Ó¿Ú¡£µ±Ê¹Óã£importÖ¸Áîʱ£¬ÔÚÔËÐÐʱVisual C£«£«ÐèÒª´ÓADO DLLÖжÁÈ¡Õâ¸öÀàÐͿ⣬²¢ÒÔ´Ë´´½¨Ò»×éC£«£«Í·Îļþ¡£ÕâЩͷÎļþ¾ßÓÐ.tli ºÍ.tlhÀ©Õ¹Ãû£¬¶ÁÕß¿ÉÒÔÔÚÏîÄ¿µÄĿ¼ÏÂÕÒµ½ÕâÁ½¸öÎļþ¡£ÔÚC£«£«³ÌÐò´úÂëÖе÷ÓõÄADOÀàÒªÔÚÕâЩÎļþÖж¨Òå¡£

¡¡¡¡³ÌÐòµÄµÚÈýÐÐָʾADO¶ÔÏó²»Ê¹ÓÃÃû³Æ¿Õ¼ä¡£ÔÚÓÐЩӦÓóÌÐòÖУ¬ÓÉÓÚÓ¦ÓóÌÐòÖеĶÔÏóÓëADOÖеĶÔÏóÖ®¼ä¿ÉÄÜ»á³öÏÖÃüÃû³åÍ»£¬ËùÒÔÓбØÒªÊ¹ÓÃÃû³Æ¿Õ¼ä¡£Èç¹ûҪʹÓÃÃû³Æ¿Õ¼ä£¬Ôò¿É°ÑµÚÈýÐгÌÐòÐÞ¸ÄΪ£º rename_namespace("AdoNS")¡£µÚËÄÐдúÂ뽫ADOÖеÄEOF(Îļþ½áÊø)¸üÃûΪadoEOF£¬ÒÔ±ÜÃâÓ붨ÒåÁË×Ô¼ºµÄEOFµÄÆäËû¿â³åÍ»¡£

¡¡¡¡3£®ÀûÓÃÖÇÄÜÖ¸Õë½øÐÐÊý¾Ý¿â²Ù×÷

¡¡¡¡ÔÚCaboutDlgÍ·ÎļþÖж¨ÒåÁ½¸öADOÖÇÄÜÖ¸ÕëÀàʵÀý,²¢ÔÚ¶Ô»°¿òÖмÓÈëÒ»¸öListCtrl¡£

_ConnectionPtr m_pConnection;

_RecordsetPtr m_pRecordset;

¡¡¡¡ClistCtrl m_List;

¡¡¡¡ADO¿â°üº¬Èý¸öÖÇÄÜÖ¸Õë:_ConnectionPtr¡¢_CommandPtrºÍ_RecordsetPtr¡£

_ConnectionPtr
ͨ³£±»ÓÃÀ´´´½¨Ò»¸öÊý¾ÝÁ¬½Ó»òÖ´ÐÐÒ»Ìõ²»·µ»ØÈκνá¹ûµÄSQLÓï¾ä£¬ÈçÒ»¸ö´æ´¢¹ý³Ì¡£

_CommandPtr
·µ»ØÒ»¸ö¼Ç¼¼¯¡£ËüÌṩÁËÒ»ÖÖ¼òµ¥µÄ·½·¨À´Ö´Ðзµ»Ø¼Ç¼¼¯µÄ´æ´¢¹ý³ÌºÍSQLÓï¾ä¡£ÔÚʹÓÃ_CommandPtr½Ó¿Úʱ£¬¿ÉÒÔÀûÓÃÈ«¾Ö_ConnectionPtr½Ó¿Ú£¬Ò²¿ÉÒÔÔÚ_CommandPtr½Ó¿ÚÀïÖ±½ÓʹÓÃÁ¬½Ó´®¡£

_RecordsetPtr
ÊÇÒ»¸ö¼Ç¼¼¯¶ÔÏó¡£ÓëÒÔÉÏÁ½ÖÖ¶ÔÏóÏà±È£¬Ëü¶Ô¼Ç¼¼¯ÌṩÁ˸ü¶àµÄ¿ØÖƹ¦ÄÜ£¬Èç¼ÇÂ¼Ëø¶¨¡¢ÓÎ±ê¿ØÖÆµÈ¡£

¡¡¡¡ÔÚOnInitDialog()ÖмÓÈëÒÔÏ´úÂë:

¡¡¡¡BOOL CAboutDlg::OnInitDialog()

¡¡¡¡{

CDialog::OnInitDialog();

_variant_t TheValue;

m_List.ResetContent();

¡¡¡¡m_pConnection.CreateInstance(_uuidof(Connection));

¡¡¡¡m_pRecordset.CreateInstance(_uuidof(Recordset));

¡¡¡¡try{

m_pConnection->Open("DSN=ADOTest","","",0); //
Á¬½Ó½Ð×÷ADOTestµÄODBCÊý¾ÝÔ´

m_pRecordset->Open("SELECT * FROM BlockDefine",(IDispatch*)m_pConnection,
adOpenDynamic,
adLockOptimistic,
adCmdText);

¡¡¡¡//Ö´ÐÐSQLÓï¾äµÃµ½Ò»¸ö¼Ç¼¼¯

¡¡¡¡ while(!m_pRecordset->adoEOF)

¡¡¡¡//±éÀúËùÓмǼ

¡¡¡¡ {

¡¡¡¡ TheValue = m_pRecordset->GetCollect("BlockIndex");

¡¡¡¡//µÃµ½×Ö¶ÎBlockIndexµÄÖµ

¡¡¡¡ if(TheValue.vt!=VT_NULL)

¡¡¡¡ m_List.AddString((char*)_bstr_t(TheValue)); //½«¸ÃÖµ¼ÓÈëµ½ÁÐ±í¿Ø¼þÖÐ

¡¡¡¡ m_pRecordset->MoveNext();

¡¡¡¡}

¡¡¡¡ m_pRecordset->Close();

m_pConnection->Close();

¡¡¡¡ }

¡¡¡¡ catch(_com_error e) //Òì³£´¦Àí

¡¡¡¡ {

AfxMessageBox(e.ErrorMessage());

¡¡¡¡}

¡¡¡¡m_pRecordset = NULL;

m_pConnection = NULL;

¡¡¡¡return TRUE; // return TRUE unless you set the focus to a control

¡¡¡¡}

¡¡¡¡³ÌÐòÖÐͨ¹ý_variant_tºÍ_bstr_tת»»COM¶ÔÏóºÍC£«£«ÀàÐ͵ÄÊý¾Ý, _variant_tÀà·â×°ÁËOLE×ÔÖÎVARIANTÊý¾ÝÀàÐÍ¡£ÔÚC£«£«ÖÐʹÓÃ_variant_tÀàÒª±ÈÖ±½ÓʹÓÃVARIANTÊý¾ÝÀàÐÍÈÝÒ׵öࡣ

¡¡¡¡ºÃ£¬±àÒëºó¸Ã³ÌÐò¾ÍÄÜÔËÐÐÁË£¬µ«¼ÇסÔËÐÐǰҪ´´½¨Ò»¸ö½ÐADOTestµÄODBCÊý¾ÝÔ´¡£¸Ã³ÌÐò½«°Ñ±íBlockDefineÖеÄBlockIndex×Ö¶ÎÖµÏÔʾÔÚÁÐ±í¿Ø¼þÖС£

×÷Õß:½¯¶«Óî

 

DAO¼¼Êõ


DAO
¼¼Êõ

4
£®1 DAOÓëODBC

ÔÚWINDOWS»·¾³Ï½øÐÐÊý¾Ý¿â·ÃÎʹ¤×÷ÄúÓÐÁ½ÖÖÑ¡Ôñ£ºÊ¹ÓÃDAO¼¼Êõ»òÕßʹÓÃODBC¼¼Êõ¡£ODBC£¨OPEN DATABASE CONNECTIVITY£©¼´¿ª·ÅʽÊý¾Ý¿â»¥Áª£¬×÷ΪWINDOWS¿ª·Å–Ó×¼½á¹¹µÄÒ»¸öÖØÒª²¿·ÖÒѾ­ÎªºÜ¶àµÄWINDOWS³ÌÐòÔ±ËùÊìϤ¡£DAO£¨DATA ACCESS OBJECTS£©¼´Êý¾Ý·ÃÎʶÔÏ󼯣¨DATA ACCESS OBJECTS£©ÊÇMICROSOFTÌṩµÄ»ùÓÚÒ»¸öÊý¾Ý¿â¶ÔÏ󼯺ϵķÃÎʼ¼Êõ¡£ËüÃǶ¼ÊÇWINDOWS APIµÄÒ»¸ö²¿·Ö£¬¿ÉÒÔ¶ÀÁ¢ÓÚDBMS½øÐÐÊý¾Ý¿â·ÃÎÊ¡£ÄÇôODBCºÍDAOµÄÇø±ðÔÚÄÄÀïÄØ£¿ODBCºÍDAO·ÃÎÊÊý¾Ý¿âµÄ»úÖÆÊÇÍêÈ«²»Í¬µÄ¡£ODBCµÄ¹¤×÷ÒÀÀµÓÚÊý¾Ý¿âÖÆÔìÉÌÌṩµÄÇý¶¯³ÌÐò£¬Ê¹ÓÃODBC APIµÄʱºò£¬WINDOWSµÄODBC¹ÜÀí³ÌÐò£¬°ÑÊý¾Ý¿â·ÃÎʵÄÇëÇ󴫵ݸøÕýÈ·µÄÇý¶¯³ÌÐò£¬Çý¶¯³ÌÐòÔÙʹÓÃSQLÓï¾äָʾDBMSÍê³ÉÊý¾Ý¿â·ÃÎʹ¤×÷¡£DAOÔòÈÆ¿ªÁËÖм价½Ú£¬Ö±½ÓʹÓÃMICROSOFTÌṩµÄÊý¾Ý¿âÒýÇæ£¨MICROSOFT JET DATABASE ENGINE£©ÌṩµÄÊý¾Ý¿â·ÃÎʶÔÏ󼯽øÐй¤×÷¡£ËٶȱÈODBC¿ì¡£Êý¾Ý¿âÒýÇæÄ¿Ç°ÒѾ­´ïµ½ÁË3.0°æ±¾¡£ËüÊÇDAO¡¢MS ACCESS¡¢MS VISUAL BASICµÈµÈWINDOWSÓ¦ÓýøÐÐÊý¾Ý¿â·ÃÎʵĻù´¡¡£ÒýÇæ±¾ÉíµÄÊý¾Ý¿â¸ñʽΪMDB£¬Ò²Ö§³Ö¶ÔĿǰÁ÷Ðеľø´ó¶àÊýÊý¾Ý¿â¸ñʽµÄ·ÃÎÊ£¬µ±È»MDBÊÇÊý¾Ý¿âÒýÇæÖÐЧÂÊ×î¸ßµÄÊý¾Ý¿â¡£

Èç¹ûÄúʹÓÿͻ§»ú/·þÎñÆ÷Ä£Ð͵ϰ£¬½¨ÒéÄúʹÓÃODBC·½°¸£»Èç¹ûÄúÏ£Íû²ÉÓÃMDB¸ñʽµÄÊý¾Ý¿â£¬»òÕßÀûÓÃÊý¾Ý¿âÒýÇæµÄËÙ¶È£¬ÄÇôDAOÊǸüºÃµÄÑ¡Ôñ¡£

4
£®2 ʹÓÃMFCʵÏÖDAO¼¼Êõ

MFC
¶ÔËùÓеÄDAO¶ÔÏó¶¼½øÐÐÁË·â×°¡£Ê¹ÓÃMFC½øÐÐDAO±à³Ì£¬Ê×ÏÈҪΪÿһ¸ö´ò¿ªµÄÊý¾Ý¿âÎļþÌṩһ¸öÊý¾Ý¿â¶ÔÏ󩤩¤CDaoDatabase£¬ÓÉÕâ¸ö¶ÔÏó¹ÜÀíÊý¾Ý¿âµÄÁ¬½Ó¡£È»Éú³É¼Ç¼¼¯¶ÔÏ󩤩¤CDaoRecordset£¬Í¨¹ýËüÀ´½øÐвéѯ¡¢²Ù×÷¡¢¸üеȵȵŤ×÷¡£Èç¹ûÐèÒªÔÚ³ÌÐòÖйÜÀíÊý¾Ý¿âµÄ½á¹¹£¬ÔòÐèҪʹÓÃDAOµ±Öеıí½á¹¹ÐÅÏ¢¶ÔÏóCDaoTableInfo¼°×ֶζ¨Òå¶ÔÏóCDaoFieldInfoÀ´½øÐлñµÃ»òÕ߸ıäÊý¾Ý¿â±í½á¹¹µÄ¹¤×÷¡£CDaoDatabase¡¢CDaoRecordset¡¢CDaoTableDefInfo¡¢CDaoFieldInfoÊÇʹÓÃMFC½øÐÐDAO±à³ÌµÄ×î»ù±¾Ò²ÊÇ×î³£ÓõÄÀà¡£

ÏÂÃæ£¬ÎÒÃÇͨ¹ýÒ»¸öʵÀýÀ´½éÉÜÈçºÎʹÓÃMFCµÄDAOÀàÀ´½øÐÐÊý¾Ý¿â·ÃÎʵŤ×÷¡£ÔÚÕâ¸öʵÀýµ±ÖУ¬ÎÒÃǽ«ÔÚ³ÌÐòµ±Öн¨Á¢Ò»¸öѧÉúµµ°¸¹ÜÀíÊý¾Ý¿â£¬²¢Í¨¹ý¶Ô»°¿òÀ´Ìí¼Ó¡¢É¾³ýºÍä¯ÀÀ¼Ç¼¡£ÎÒÃÇÊ×ÏÈ¿´ÒÔϳÌÐòÔËÐеÄÇé¿ö¡£

ÎÒÃǽ«Õë¶Ô³ÌÐòµÄ¹¦ÄÜÒÀ´Î½éÉÜÈçºÎÉú³ÉºÍʹÓÃÊý¾Ý¿â¶ÔÏ󡢼Ǽ¼¯¶ÔÏóÒÔ¼°ÈçºÎͨ¹ý¼Ç¼¼¯À´²Ù×ÝÊý¾Ý¿â¡£ÎÒÃǽ«Í¨¹ý½âÊͶÔÊý¾Ý¿â½øÐвÙ×÷µÄÔ´³ÌÐòÀ´½éÉÜÈçºÎÓÃMFCÀ´ÊµÏÖDAO¼¼Êõ¡£

ÏÂÃæ½éÉÜÈçºÎ½¨¿â£º

Ê×ÏÈн¨Ò»¸öÊý¾Ý¿â¶ÔÏó¡£

newDatabase = new CDaoDatabase;

newDatabase_>Create(_T("stdfile.mdb"),

dbLangGeneral, dbVersion30);

ÀûÓÃÊý¾Ý¿âÒýÇæÔÚ´ÅÅÌÉϽ¨Á¢Ò»¸öMDB¸ñʽµÄÊý¾Ý¿âÎļþ¡£

stdfile.mdb
ÊÇÔÚ´ÅÅÌÉÏÃæ½¨Á¢µÄÊý¾Ý¿âÎļþµÄÃû×Ö£¬

dbLangGeneral
ÊÇÓïÑÔÑ¡Ïî¡£

dbVersion30
ÕâÊÇÊý¾Ý¿âÒýÇæ°æ±¾Ñ¡Ïî¡£

ͼ3.12

È»ºóн¨Ò»¸öÊý¾Ý¿â±í¶¨ÒåÐÅÏ¢¶ÔÏó¡£

CDaoTableDef *TableInfo;

TableInfo = new CDaoTableDef(newDatabase);

TableInfo_>Create(_T("student"));

н¨Ò»¸ö×ֶζ¨ÒåÐÅÏ¢¶ÔÏó¡£

°´ÒªÇóÌîд×ֶζ¨ÒåÐÅÏ¢¶ÔÏó¡£

¶¨Òå×Ö¶ÎÃû³Æ£º

FieldInfo_>m_strName = CString("studentName");

¶¨Òå×Ö¶ÎÀàÐÍ£º

FieldInfo_>m_nType = dbText;

¶¨Òå×Ö¶ÎËùÕ¼µÄ×Ö½ÚÊý´óС£º

FieldInfo_>m_lSize = 10;

¶¨Òå×Ö¶ÎÌØÐÔ£º

FieldInfo_>m_lAttributes = dbVariableField | dbUpdatableField;

dbVariableField
²ÎÊýµÄÒâ˼ÊǸÃ×ֶεÄËùÕ¼µÄ×Ö½ÚÊýÊǿɱäµÄ¡£

dbUpdatableField
²ÎÊýµÄÒâ˼ÊǸÃ×ֶεÄÖµÊǿɱäµÄ¡£

¸ù¾Ý×ֶζ¨Òå¶ÔÏóÔÚÊý¾Ý¿â±í¶ÔÏóµ±ÖÐÉú³É×ֶΡ£

TableInfo_>CreateField(*FieldInfo);

ÔÚÉú³ÉÁËËùÓеÄ×Ö¶ÎÖ®ºó£¬½«ÐµÄÊý¾Ý¿â±íµÄ¶¨ÒåÌî¼Óµ½Êý¾Ý¿â¶ÔÏóµ±ÖÐÈ¥¡£

TableInfo_>Append();

ÏÂÃæ½éÉÜÈçºÎ½øÐÐÊý¾Ý¿â²Ù×÷£º

Ê×ÏÈÉú³É¼Ç¼¼¯¶ÔÏó£º

Recordset = new CDaoRecordset(newDatabase);

È»ºóʹÓÃSQLÓï¾ä´ò¿ª¼Ç¼¼¯¶ÔÏó¡£Ê×ÏȰÑSQLÓï¾ä¼ÇÈëÒ»¸ö×Ö·û´®£º

CString strQuery = _T("Select * from student");

ʹÓÃÕâ¸ö×Ö·û´®´ò¿ª¼Ç¼¼¯¡£

Recordset_>Open(dbOpenDynaset , strQuery);

dbOpenDynaset
²ÎÊýµÄÒâ˼ÊDZíʾ¼Ç¼¼¯´ò¿ªµÄÀàÐÍ¡£dbOpenDynasetµÄÒâ˼ÊÇ´ò¿ªÒ»¸ö¿ÉÒÔË«Ïò¹ö¶¯µÄ¶¯Ì¬¼Ç¼¼¯¡£Õâ¸ö¼Ç¼¼¯ÖеļǼÊÇʹÓÃÎÒÃǶ¨ÒåµÄSQLÓï¾ä¶ÔÊý¾Ý¿â½øÐвéѯµÃµ½µÄ¡£Õâ¸ö²ÎÊý»¹ÓÐÁíÍâµÄÁ½ÖÖÑ¡Ôñ£º

dbOpenTable
²ÎÊýָʾ´ò¿ªÒ»¸öÊý¾Ý±íÀàÐ͵ļǼ¼¯£¬Ê¹ÓÃÕâÖÖÀàÐ͵ļǼ¼¯Ö»ÄܶԵ¥Ò»µÄÊý¾Ý¿âÖеļǼ½øÐвÙ×Ý¡£

Èç¹ûʹÓÃdbOpenSnapshot²ÎÊý±íʾ´ò¿ªµÄÊÇÓ³Ïñ¼Ç¼¼¯£¬Ëüʵ¼ÊÉÏÊÇËùÑ¡ÔñµÄ¼Ç¼¼¯µÄÒ»¸ö¾²Ì¬µÄ¿½±´£¬ÔÚÖ»ÐèÒª½øÐвéѯ²Ù×÷»òÕßÏ£ÍûÖÆ×÷±¨±íµÄʱºò£¬Ê¹ÓÃÕâÖּǼ¼¯±È½ÏºÏÊÊ£¬Ëü²»»á¶ÔÊý¾Ý¿âÖеÄÊý¾Ý½øÐÐÐ޸ġ£

½ÓÏÂÀ´¶Ô¼Ç¼¼¯µ±ÖеÄÒ»¸ö±ê־λ¸³Öµ£¬ËµÃ÷ÊÇ·ñÒªÇó×Ô¶¯µØ±ê¼Ç³öCACHEµ±Öо­¸Ä±äµÄ¼Ç¼¡£Ê¹ÓüǼ¼¯µÄʱºòÊÇDAO°Ñ±»¼ìË÷³öµÄ¼Ç¼¶ÁÈëCACHE£¬ËùÓеIJÙ×ݶ¼ÊÇÕë¶ÔCACHEÖеļǼ½øÐеģ¬ÒªÊµÏÖ¶ÔÊý¾Ý¿âµ±ÖеļǼ¸üбØÐë°ÑCACHE¼Ç¼Öб»¸Ä±äµÄ×ֶεÄֵд»Øµ½Êý¾Ý¿âÎļþµ±ÖÐÈ¥¡£Õâ¸ö±ê־λµÄ×÷ÓþÍÊǵ±CACHEÖеÄÊý¾Ý¸Ä±äµÄʱºò£¬ÊÇ·ñÐèÒª×Ô¶¯µÄ±ê¼Ç³ö¼Ç¼ÖÐÄÇЩӦ¸Ã±»Ð´»ØµÄ×ֶΡ£

ÏÂÃæ½éÉÜÈçºÎÌî¼ÓÒ»¸ö¼Ç¼¡£

¡¡

m_Recordset _>AddNew();

m_Recordset_>Update();

ʹÓÃAddNew()Õâ¸öº¯Êý¿ÉÒÔÔÚÊý¾Ý±í¼Ç¼¼¯»òÕßÊǶ¯Ì¬¼Ç¼¼¯µ±ÖÐÌí¼ÓеļǼ£¬µ÷ÓÃAddNew()Ö®ºó±ØÐë½Ó×ŵ÷ÓÃUpdate()À´È·ÈÏÕâ¸öÌí¼Ó¶¯×÷£¬½«ÐµļǼ±£´æµ½Êý¾Ý¿âÎļþµ±ÖÐÈ¥¡£ÐµļǼÔÚÊý¾Ý¿âµ±ÖеÄλÖÃÈ¡¾öÓÚµ±Ç°¼Ç¼¼¯µÄÀàÐÍ£ºÈç¹ûÊǶ¯Ì¬¼Ç¼¼¯£¬Ð¼Ç¼¶¼½«±»²åÈëµ½¼Ç¼¼¯µÄĩβ¡£Èç¹ûÊÇÊý¾Ý±í¼Ç¼¼¯µÄ»°£¬µ±Êý¾Ý¿â±íÖж¨ÒåÁËÖ÷¼üµÄʱºòмǼ½«°´ÕÕ¿â±íµÄÅÅÐò¹æÔò²åÈëµ½ºÏÊʵĵط½£»Èç¹ûûÓж¨ÒåÖ÷¼üÄÇôмǼҲ»á±»²åÈëµ½¼Ç¼¼¯µÄĩβ¡£

ÓÃAddNew()»á¸Ä±ä¼Ç¼¼¯µÄµ±Ç°¼Ç¼¡£Ö»Óн«µ±Ç°¼Ç¼¶¨Î»ÔÚмǼÉÏ£¬²ÅÄÜÌîдËüµÄÊý¾Ý¡£ËùÒÔÎÒÃÇʹÓÃMoveLastº¯Êýʹ¸Õ¸ÕÌí¼ÓµÄ¼Ç¼³ÉΪµ±Ç°¼Ç¼£¬È»ºóµ÷ÓÃEditº¯Êý¶ÔмǼ½øÐб༭¡£

m_Recordset_>MoveLast();

m_Recordset_>Edit();

ÒÀ´Î¸øÐ¼Ç¼µÄ×ֶνøÐи³Öµ£º

COleVariant var1(m_Name , VT_BSTRT);

m_Recordset_>SetFieldValue(_T("studentName") , var1);

COleVariant var2(m_ID , VT_BSTRT);

m_Recordset_>SetFieldValue(_T("studentID") , var2);

COleVariant var3(m_Class , VT_BSTRT);

m_Recordset_>SetFieldValue(_T("studentClass") , var3);

COleVariant var4(m_SID , VT_BSTRT);

m_Recordset_>SetFieldValue(_T("studentSID") , var4);

COleVariant
Õâ¸öÀà·â×°ÁËWIN32ÌṩµÄVARIANTÕâ¸ö½á¹¹ÒÔ¼°¶ÔËüµÄ²Ù×÷¡£Õâ¸öÀ൱ÖпÉÒÔ´æ´¢¶àÖÖÀàÐ͵ÄÊý¾Ý¡£ÐèҪעÒâµÄÊÇÕâÖÖ°üÈÝÄÜÁ¦ÊÇͨ¹ýCÓïÑÔµ±ÖеÄUNIONÌṩµÄ£¬¾ÍÊÇ˵һ¸öCOleVariant ¶ÔÏóÖ»Äܱ£´æÒ»ÖÖÀàÐ͵ÄÊý¾Ý¡£ÎÒÃÇÏȰÑ×ֶεÄÖµ×°ÈëOLE±äÌå¶ÔÏó£¬ÔÙʹÓÃÕâ¸ö±äÌå¶ÔÏó¶Ô¼Ç¼ÖеÄ×ֶνøÐи³Öµ¡£VT_BSTRT²ÎÊýµÄ×÷ÓÃÊÇÔÚÉú³ÉOLE±äÌå¶ÔÏóµÄʱºòָʾ½«Òª·âÈëµÄÊý¾ÝµÄÀàÐÍΪ×Ö·û´®¡£µ±¶ÔËùÓеÄ×ֶζ¼½áÊø¸³Öµºó£¬µ÷ÓÃUpdate º¯ÊýÀ´±£´æ¸Õ²ÅµÄÐ޸ġ£

m_Recordset_>Update();

×¢Ò⣬ÔÚµ÷ÓÃUpdateº¯Êý֮ǰ,Èç¹û½øÐÐÁ˸ı䵱ǰ¼Ç¼µÄ²Ù×÷,ÄÇÃ´Ç°Ãæ½øÐеÄËùÓеĸ³Öµ¹¤×÷¶¼½«¶ªÊ§£¬¶øÇÒ²»»á¸ø³öÈκεľ¯¸æ¡£

Õâ¶Î´úÂë´Ó¼Ç¼¼¯ÖÐÈ¡³öÒ»¸ö¼Ç¼µÄÖµ,ÕâÀïͬÑùÒªÓõ½OLE±äÌå¶ÔÏ󡣼Ǽ¼¯µÄGetFieldValue½«·µ»ØÒ»¸ö±äÌå¶ÔÏó£¬ÎÒÃÇÊ×ÏÈÈ¡µÃÕâ¸ö±äÌå¶ÔÏó£¬È»ºó´ÓÖÐÈ¡³öÐèÒªµÄÖµ¡£

ÕâÀïV_BSTRTָʾ´Ó±äÌå¶ÔÏóµ±ÖÐÈ¡³ö×Ö·û´®ÀàÐ͵ÄÊý¾Ý¡£

ÈçºÎ´ÓÊý¾Ý¿âÖÐɾȥһ¸ö¼ÇÂ¼ÄØ£¿Ê×ÏÈҪʹ¸Ã¼Ç¼³ÉΪµ±Ç°¼Ç¼¡£È»ºóʹÓÃDeleteº¯ÊýÀ´Ö´ÐÐɾ³ý²Ù×÷¡£

m_Recordset_>Delete();

ɾ³ýÖ®ºó£¬ÎÒÃDZØÐë°Ñµ±Ç°¼Ç¼¸ü¸ÄΪÆäËûµÄ¼Ç¼£¬ÒÔÈ·ÈÏÕâ¸öɾ³ý¶¯×÷¡£

ÒÔÉϾÍÊÇÔÚMFCÖÐʹÓÃDAO½øÐÐÊý¾Ý¿â²Ù×÷µÄ·½·¨¡£

Á˽âÁËÇ°ÃæµÄÄÚÈÝ£¬ÏàÐÅÄú¶ÔMFCÀà¿âÒѾ­ÓÐÁ˱ȽÏÉîÈëµÄÈÏʶ£¬¿ÉÒÔʹÓÃMFC±àд³ö²»´íµÄ³ÌÐòÁË¡£ÏÂÃæ£¬ÎÒÃǽ«ÏòÄú½éÉÜÈçºÎÔÚVISUAL C++¼¯³É¿ª·¢»·¾³Ö®Ïµ÷ÊÔ×Ô¼ºµÄ³ÌÐò¡£


Öлª¼¼ÊõÍøÕûÀí·¢²¼ http://www.asfocus.com

Ò»¸ö¹¦ÄÜÇ¿´óµÄÓÃADO·ÃÎÊÊý¾Ý¿âµÄÀà


ADO
·ÃÎÊÊý¾Ý¿âÊÇ»ùÓÚCOM ,·ÃÎÊËٶȿ졢ʹÓ÷½±ãµÈÌØµã¡£ÎÒÔÚʵ¼ÊµÄ¹¤×÷µ±Öз¢ÏÖ¿ÉÒÔ°ÑһЩ³£Óõķ½·¨¹¹Ôì³ÉÒ»¸öÀ࣬²»·Á½ÐËýΪ CAdoEx Àà°É¡£ÏÂÃæ·Ö±ðÊÇÍ·Îļþ¡¢ÊµÏÖÎļþ¡£ÒªÊÇÓв»Í×Ö®´¦Çë¸øÎÒ·¢Óʼþ luoshizhen@163.net

*
˵Ã÷:--------------------------------------------*/
/*
×¢ stdafx.h ÀïÒªÓÐÏÂÃæÁ½ÐÐ */
/* #include <comdef.h> */
/* #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF") */
/* AfxOleInit() ; ADO
³õʼÔÚÓ¦ÓõÄÖ÷Ï̳߳õʼ»¯Ê±µ÷Óà */
/*
˵Ã÷:--------------------------------------------*/


/*
ÒÔÏÂÊÇÀàµÄ³ÉԱ˵Ã÷ */
#ifndef _ADOEX_H_
#define _ADOEX_H_

#include "stdafx.h"

class CAdoEx
{
public:
CAdoEx();
virtual ~CAdoEx();

/*
´ò¿ª Ado Êý¾Ý¿â*/
BOOL OpenAdo(LPCTSTR lpDSN ,LPCTSTR lpUID ,LPCTSTR lpPWD);


file://--------------------------------------------//
/* ADO
ͨÓòéѯº¯Êý */
/*
µ÷ÓòÎÊý: