VC³£ÓÃÊý¾Ý¿â²Ù×÷·½·¨ ÏÂÔر¾ÎÄ

VCÖг£ÓÃÊý¾Ý¿â²Ù×÷µÄʵÏÖ

1£® ³£ÓõÄÊý¾Ý¿â½á¹¹Ìåϵ¸ÅÊö

ODBC£¨Open Database Connectivity£¬¿ª·ÅʽÊý¾Ý¿âÁ¬½Ó£©£¬ÊÇÒ»ÖÖÓÃÀ´ÔÚÏà¹Ø»ò²»Ïà¹ØµÄÊý¾Ý¿â¹ÜÀíϵͳ£¨DBMS£©ÖдæÈ¡Êý¾ÝµÄ±ê×¼Ó¦ÓóÌÐò½Ó¿Ú£¨API£©¡£ Microsoft Developer StudioΪ´ó¶àÊý±ê×¼µÄÊý¾Ý¿â¸ñʽÌṩÁË32λODBCÇý¶¯Æ÷¡£ÕâЩ±ê×¼Êý¾Ý¸ñʽ°üÀ¨ÓУºSQL Server¡¢Access¡¢Paradox¡¢dBase¡¢FoxPro¡¢Excel¡¢OracleÒÔ¼°Microsoft Text¡£Èç¹ûÓû§Ï£ÍûʹÓÃÆäËûÊý¾Ý¸ñʽ£¬Óû§ÐèÒªÏàÓ¦µÄODBCÇý¶¯Æ÷¼°DBMS¡£Óû§Ê¹ÓÃ×Ô¼ºµÄDBMSÊý¾Ý¿â¹ÜÀí ¹¦ÄÜÉú³ÉеÄÊý¾Ý¿âģʽºó£¬¾Í¿ÉÒÔʹÓÃODBCÀ´µÇ¼Êý¾ÝÔ´¡£¶ÔÓû§µÄÓ¦ÓóÌÐòÀ´Ëµ£¬Ö»Òª°²×°ÓÐÇý¶¯³ÌÐò£¬¾ÍÄÜ×¢²áºÜ¶à²»Í¬µÄÊý¾Ý¿â¡£µÇ¼Êý¾Ý¿âµÄ¾ßÌå²Ù×÷²Î¼ûÓйØODBCµÄÁª»ú°ïÖú¡£

ADO£¨ActiveX Data Object, Active Êý¾Ý¶ÔÏó£©ÊÇMicrosoftΪ×îкÍ×îÇ¿´óµÄÊý¾Ý·ÃÎÊ·¶Àý OLE DB ¶øÉè¼ÆµÄ£¬ÊÇÒ»¸ö±ãÓÚʹÓõÄÓ¦ÓóÌÐò²ã½Ó¿Ú¡£ADO ʹÄúÄܹ»±àдӦÓóÌÐòÒÔͨ¹ý OLE.DB ÌṩÕß·ÃÎʺͲÙ×÷Êý¾Ý¿â·þÎñÆ÷ÖеÄÊý¾Ý¡£ADO ×îÖ÷ÒªµÄÓŵãÊÇÒ×ÓÚʹÓá¢Ëٶȿ졢ÄÚ´æÖ§³öÉٺʹÅÅÌÒż£Ð¡¡£ADO ÔڹؼüµÄÓ¦Ó÷½°¸ÖÐʹÓÃ×îÉÙµÄÍøÂçÁ÷Á¿£¬²¢ÇÒÔÚÇ°¶ËºÍÊý¾ÝÔ´Ö®¼äʹÓÃ×îÉٵIJãÊý£¬ËùÓÐÕâЩ¶¼ÊÇΪÁËÌṩÇáÁ¿¡¢¸ßÐÔÄܵĽӿڡ£

OLE DBÊÇ¡±×é¼þ¶ÔÏóÄ£ÐÍ¡±(COM) ½Ó¿Ú£¬ÊÇеÄÊý¾Ý¿âµÍ²ã½Ó¿Ú£¬Ëü·â×°ÁËODBCµÄ¹¦ÄÜ£¬²¢ÒÔͳһµÄ·½Ê½·ÃÎÊ´æ´¢ÔÚ²»Í¬ÐÅÏ¢Ô´ÖеÄÊý¾Ý¡£OLE DBÊÇMicrosoft UDA(Universal Data Access)²ßÂԵļ¼Êõ»ù´¡¡£OLE DB ΪÈκÎÊý¾ÝÔ´ÌṩÁ˸ßÐÔÄܵķÃÎÊ£¬ÕâЩÊý¾ÝÔ´°üÀ¨¹ØϵºÍ·Ç¹ØϵÊý¾Ý¿â¡¢µç×ÓÓʼþºÍÎļþϵͳ¡¢Îı¾ºÍͼÐΡ¢×Ô¶¨ÒåÒµÎñ¶ÔÏóµÈµÈ¡£Ò²¾ÍÊÇ˵£¬OLE DB ²¢²»¾ÖÏÞÓÚ ISAM¡¢Jet ÉõÖÁ¹ØϵÊý¾ÝÔ´£¬ËüÄܹ»´¦ÀíÈκÎÀàÐ͵ÄÊý¾Ý£¬¶ø²»¿¼ÂÇËüÃǵĸñʽºÍ´æ´¢·½·¨¡£ÔÚʵ¼ÊÓ¦ÓÃÖУ¬ÕâÖÖ¶àÑùÐÔÒâζ×Å¿ÉÒÔ·ÃÎÊפÁôÔÚ Excel µç×ÓÊý¾Ý±í¡¢Îı¾Îļþ¡¢µç×ÓÓʼþ/Ŀ¼·þÎñÉõÖÁÓʼþ·þÎñÆ÷£¬ÖîÈç Microsoft Exchange ÖеÄÊý¾Ý¡£µ«ÊÇ£¬OLE DB Ó¦ÓóÌÐò±à³Ì½Ó¿ÚµÄÄ¿µÄÊÇΪ¸÷ÖÖÓ¦ÓóÌÐòÌṩ×î¼ÑµÄ¹¦ÄÜ£¬Ëü²¢²»·ûºÏ¼òµ¥»¯µÄÒªÇó¡£ÄúÐèÒªµÄAPI Ó¦¸ÃÊÇÒ»×ùÁ¬½ÓÓ¦ÓóÌÐòºÍ OLE DB µÄÇÅÁº£¬Õâ¾ÍÊÇ ActiveX Data Objects (ADO)¡£

2£® ²Ù×÷¶ÔÏó

MFCÌṩµÄODBCÊý¾Ý¿âÀࣺ

VisualC++µÄMFC»ùÀà¿â¶¨ÒåÁ˼¸¸öÊý¾Ý¿âÀà¡£ÔÚÀûÓÃODBC±à³Ìʱ£¬¾­³£ÒªÊ¹Óõ½CDatabase(Êý¾Ý¿âÀà)£¬CRecordSet(¼Ç¼¼¯Àà)ºÍCRecordView(¿ÉÊӼǼ¼¯Àà)¡£ ÆäÖУº

CDatabaseÀà¶ÔÏóÌṩÁ˶ÔÊý¾ÝÔ´µÄÁ¬½Ó£¬Í¨¹ýËüÄã¿ÉÒÔ¶ÔÊý¾ÝÔ´½øÐвÙ×÷¡£

CRecordSetÀà¶ÔÏóÌṩÁË´ÓÊý¾ÝÔ´ ÖÐÌáÈ¡³öµÄ¼Ç¼¼¯¡£CRecordSet¶ÔÏóͨ³£ÓÃÓÚÁ½ÖÖÐÎʽ£º ¶¯Ì¬Ðм¯£¨dynasets£©ºÍ¿ìÕÕ¼¯£¨snapshots£©¡£¶¯Ì¬Ðм¯Äܱ£ ³ÖÓëÆäËûÓû§Ëù×öµÄ¸ü¸Ä±£³Öͬ²½¡£¿ìÕÕ¼¯ÔòÊÇÊý¾ÝµÄÒ»¸ö¾²Ì¬ÊÓͼ¡£Ã¿Ò»ÖÖÐÎʽÔڼǼ¼¯±»´ò¿ªÊ±¶¼Ìṩһ×é¼Ç¼£¬Ëù²»Í¬µÄÊÇ£¬µ±ÄãÔÚÒ»¸ö¶¯Ì¬Ðм¯Àï¹ö ¶¯µ½Ò»Ìõ¼Ç¼ʱ£¬ÓÉÆäËûÓû§»òÊÇÄãÓ¦ÓóÌÐòÖеÄÆäËû¼Ç¼¼¯¶Ô¸Ã¼Ç¼Ëù×öµÄ¸ü¸Ä»áÏàÓ¦µØÏÔʾ³öÀ´¡£

CRecordViewÀà¶ÔÏóÄÜÒÔ¿ØÖƵÄÐÎʽ ÏÔʾÊý¾Ý¿â¼Ç¼¡£Õâ¸öÊÓͼÊÇÖ±½ÓÁ¬µ½Ò»¸öCRecordSet¶ÔÏóµÄ±íÊÓͼ¡£

ADOÄ£ÐÍ°üÀ¨ÁËÏÂÁжÔÏó£ºÁ¬½Ó£¨Connection£©¡¢ÃüÁî (Command)¡¢¼Ç¼¼¯ (Recordset)¡¢×ֶΠ(Field)¡¢²ÎÊý (Parameter)¡¢´íÎó (Error)¡¢ÊôÐÔ (Property)¡¢¼¯ºÏ ¡¢Ê¼þ.ËüÃÇÖ®¼äµÄ¹ØϵÈçÏÂͼ:

3£® ODBCµÄÊý¾Ý¿â²Ù×÷

Ó¦ÓÃVisualC++µÄAppWizard¿ÉÒÔ×Ô¶¯Éú ³ÉÒ»¸öODBCÓ¦ÓóÌÐò¿ò¼Ü¡£·½·¨ÊÇ£º´ò¿ªFile²Ëµ¥µÄNewÑ¡ ÏѡȡProjects£¬ÌîÈ빤³ÌÃû£¬Ñ¡ÔñMFCAppWizard(exe)£¬È»ºó°´AppWizard µÄÌáʾ½øÐвÙ×÷¡£µ±AppWizardѯÎÊÊÇ·ñ°üº¬Êý¾Ý¿âÖ§³Ö ʱ£¬Èç¹ûÄãÏë¶ÁдÊý¾Ý¿â£¬ÄÇôѡ¶¨Database view with file support£»¶øÈç¹ûÄãÏë·ÃÎÊÊý¾Ý¿âµÄÐÅÏ¢¶ø²»Ïë»ØдËù×ö µÄ¸Ä±ä£¬ÄÇôѡ¶¨Database view without file supportÑ¡Ïî¾Í±È½ÏºÏ ÊÊÁË¡£Ñ¡ÔñÁËÊý¾Ý¿âÖ§³ÖÖ®ºóDatabase Source°´Å¥»á¼¤»î£¬ Ñ¡ÖÐËüÈ¥µ÷ÓÃData Options¶Ô»°¿ò¡£ÔÚDatabase Options¶Ô»°¿òÖлá ÏÔʾÒÑÏòODBC×¢²áµÄÊý¾Ý¿â×ÊÔ´£¬Ñ¡¶¨ÄãËùÒª²Ù×÷µÄÊý¾Ý¿â£¬È磺Super_ES£¬µ¥»÷OKºó»á³öÏÖSelect Database Tables¶Ô»° ¿ò£¬ÆäÖÐÁоÙÁËÄãËùÑ¡ÖеÄÊý¾Ý¿âÖаüº¬µÄÈ«²¿±í£¬Ñ¡ÔñÄãÏ£Íû²Ù×÷µÄ±íºó£¬µ¥»÷OK¡£ÔÚÑ¡¶¨ÁËÊý¾Ý¿âºÍÊý¾Ý±íÖ®ºó£¬Äã¿ÉÒÔ°´ÕÕ¹ßÀý¼ÌÐø½øÐÐAppWizard²Ù×÷¡£

ÌرðÐèÒªÖ¸³öµÄÊÇ£ºÔÚÉú³ÉµÄÓ¦ÓóÌÐò¿ò¼ÜViewÀࣨÈ磺CSuper_ESView£©Öаüº¬Ò»¸öÖ¸ÏòCSuper_ESSet ¶ÔÏóµÄÖ¸Õëm_pSet£¬¸ÃÖ¸ÕëÓÉAppWizard½¨Á¢£¬Ä¿µÄÊÇÔÚÊÓ±íµ¥ºÍ¼Ç¼¼¯Ö®¼ä½¨Á¢ÁªÏµ£¬Ê¹µÃ¼Ç¼¼¯ÖеIJéѯ½á¹ûÄܹ»ºÜÈÝÒ×µØÔÚÊÓ±íµ¥ÉÏÏÔʾ³öÀ´¡£ÓйØm_pSetµÄÏêϸ Ó÷¨¿ÉÒԲμûVisualC++ OnlineBook¡£

³ÌÐòÓëÊý¾ÝÓïÑÔ½¨Á¢ÁªÏµ£¬Ê¹ ÓÃCDatebase::OpenEx()»òCDatabase::Open()º¯ÊýÀ´½øÐгõʼ»¯¡£Êý¾Ý¿â ¶ÔÏó±ØÐëÔÚÄãʹÓÃËü¹¹ÔìÒ»¸ö¼Ç¼¼¯¶ÔÏó֮ǰ±»³õʼ»¯¡£

ÏÂÃæ¾ÙÀý˵Ã÷ÔÚVisualC++»·¾³ÖÐODBC µÄ±à³Ì¼¼ÇÉ£º 1£®×¢²áODBCÊý¾ÝÔ´£º

SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,\Access Driver (*.mdb)\\0\BASE\\0\\0\

---- Äú¿ÉÒÔ¸ù¾ÝÄú²»Í¬µÄÉèÖÃÐèÒªÐÞ¸ÄÉÏÃæµÄÓï¾ä£¬SQLConfigDataSourceÒ»°ãÓÐÒÔϼ¸¸öÐí¿ÉµÄ²ÎÊý£º

ODBC_ADD_DSN: ¼ÓÈëÒ»¸öеÄÓû§Êý¾ÝÔ´£¬

ODBC_CONFIG_DSN: ÐÞ¸ÄÒ»¸ö´æÔÚµÄÓû§Êý¾ÝÔ´£¬

ODBC_REMOVE_DSN: ɾ³ýÒ»¸ö´æÔÚµÄÓû§Êý¾ÝÔ´£¬ODBC_ADD_SYS_DSN: Ôö¼ÓÒ»¸öеÄϵͳÊý¾ÝÔ´£¬

ODBC_CONFIG_SYS_DSN: ÐÞ¸ÄÒ»¸ö´æÔÚµÄϵͳÊý¾ÝÔ´£¬ ODBC_REMOVE_SYS_DSN: ɾ³ýÒ»¸ö´æÔÚµÄϵͳÊý¾ÝÔ´£¬ ODBC_REMOVE_DEFAULT_DSN: ɾ³ýʡȱµÄÊý¾ÝԴ˵Ã÷²¿·Ö¡£

ÐèҪעÒâµÄÊÇ£¬µ±ÎÒÃÇʹÓÃSQLConfigDataSource ODBC APIº¯Êýʱ±ØÐëÉùÃ÷°üº¬ÏµÍ³µÄodbcinst.hÍ·Îļþ£¬ËùÒÔÎÒÃÇÔÙÑ¡Ôñworkspace´°¿ÚÖÐFileView´ò¿ªHeader FilesÖÐtry.h£¬ÔÚÆäÖмÓÈë#include \£¬Èç¹û²»¼ÓÈëÕâ¸öÍ·Îļþ£¬ÏµÍ³±àÒëʱ¾Í»áÏÔʾundeclared identifier´íÎó£¬ÔÚÍê³ÉÉÏÊö²½Öèºó£¬¼ÙÈçÎÒÃÇÁ¢¼´±àÒë²¢LinkÕâ¸öÏîÄ¿£¬»á·¢ÏÖ³öÏÖÏÂÃæµÄ´íÎó£º tryDlg.obj :

error LNK2001: unresolvedexternal symbol _SQLConfigDataSource

@16Debug/try.exe :

fatal error LNK1120: 1 unresolved externals

ÕâÊÇÒòΪµ±ÎÒÃÇʹÓÃSQLConfigDataSource Õâ¸öAPIº¯Êýʱºò±ØÐëÓõ½odbccp32.dll£¬ËüÊÇMicrosoftÌṩµÄ32λODBC°²×°ºÍ¹ÜÀíµÄDLL£¬Èç¹ûÊÇ16λ±ØÐëÓõ½odbcinst.dll£¬odbccp32.dllÓÐÒ»¸öimport library£¬ËùÒÔ½â¾öµÄ°ì·¨¾ÍÊÇ°ÑÕâ¸öodbccp32.lib¼Óµ½ÎÒÃǵÄÏîÄ¿ÖУ¬ÎÒÃÇ¿ÉÒÔ´ò¿ªProjectϵͳ²Ëµ¥ÏѡAdd to Project×Ӳ˵¥£¬ÔÚÆäÖÐÑ¡FilesÏ´ò¿ªVC°²×°Ä¿Â¼ÏµÄ\\vc\\lib\\Ŀ¼£¬ÎļþÀàÐÍÑ¡Library Files(.lib)£¬ Ñ¡ÔñÆäÖÐOdbccp32.libºó°´OK¼ü£¬È»ºóÖØбàÒë¼´¿Éͨ¹ý

2£®²éѯ¼Ç¼

²éѯ¼Ç¼ʹÓÃCRecordSet::Open()ºÍ CRecordSet::Requery()³ÉÔ±º¯Êý¡£ÔÚʹÓÃCRecordSetÀà¶ÔÏó֮ǰ£¬±ØÐëʹÓà CRecordSet::Open()º¯ÊýÀ´»ñµÃÓÐЧµÄ¼Ç¼¼¯¡£Ò»µ©ÒѾ­Ê¹ÓùýCRecordSet::Open() º¯Êý£¬Ôٴβéѯʱ¾Í¿ÉÒÔÓ¦ÓÃCRecordSet::Requery()º¯Êý¡£ÔÚµ÷ ÓÃCRecordSet::Open()º¯Êýʱ£¬Èç¹ûÒѾ­½«Ò»¸öÒѾ­´ò¿ªµÄCDatabase ¶ÔÏóÖ¸Õë´«¸øCRecordSetÀà¶ÔÏóµÄm_pDatabase³ÉÔ±±äÁ¿£¬Ôòʹ ÓøÃÊý¾Ý¿â¶ÔÏó½¨Á¢ODBCÁ¬½Ó£»·ñÔòÈç¹ûm_pDatabaseΪ¿ÕÖ¸ Õ룬¾Íн¨Ò»¸öCDatabaseÀà¶ÔÏó²¢Ê¹ÆäÓëȱʡµÄÊý¾ÝÔ´ ÏàÁ¬£¬È»ºó½øÐÐCRecordSetÀà¶ÔÏóµÄ³õʼ»¯¡£È±Ê¡Êý¾ÝÔ´ ÓÉGetDefaultConnect()º¯Êý»ñµÃ¡£ÄãÒ²¿ÉÒÔÌṩÄãËùÐèÒªµÄSQL Óï¾ä£¬²¢ÒÔËüÀ´µ÷ÓÃCRecordSet::Open()º¯Êý£¬ÀýÈ磺

----Super_ESSet.Open(AFX_DATABASE_USE_DEFAULT,strSQL); ----Èç¹ûûÓÐÖ¸¶¨²ÎÊý£¬³ÌÐòÔòʹ ÓÃȱʡµÄSQLÓï¾ä£¬¼´¶ÔÔÚGetDefaultSQL()º¯ÊýÖÐÖ¸¶¨µÄSQLÓï ¾ä½øÐвÙ×÷£º

CString CSuper_ESSet::GetDefaultSQL()

{return _T(\

----¶ÔÓÚGetDefaultSQL()º¯Êý·µ»ØµÄ±íÃû£¬ ¶ÔÓ¦µÄȱʡ²Ù×÷ÊÇSELECTÓï¾ä£¬¼´£º

----SELECT * FROM BasicData,MainSize

----²éѯ¹ý³ÌÖÐÒ²¿ÉÒÔÀûÓÃCRecordSetµÄ ³ÉÔ±±äÁ¿m_strFilterºÍm_strSortÀ´Ö´ÐÐÌõ¼þ²éѯºÍ½á¹ûÅÅÐò¡£m_strFilter Ϊ¹ýÂË×Ö·û´®£¬´æ·Å×ÅSQLÓï¾äÖÐ

WHEREºóµÄÌõ¼þ´®£»m_strSort ΪÅÅÐò×Ö·û´®£¬´æ·Å×ÅSQLÓï¾äÖÐORDERBYºóµÄ×Ö·û´®¡£ È磺

Super_ESSet.m_strFilter=\µç¶¯»ú'\ Super_ESSet.m_strSort=\ Super_ESSet.Requery(); ¶ÔÓ¦µÄSQLÓï¾äΪ£º

SELECT * FROM BasicData,MainSize WHERE TYPE='µç¶¯»ú' ORDER BY VOLTAGE

----³ýÁËÖ±½Ó¸³Öµ¸øm_strFilterÒÔÍ⣬»¹ ¿ÉÒÔʹÓòÎÊý»¯¡£ÀûÓòÎÊý»¯¿ÉÒÔ¸üÖ±¹Û£¬¸ü·½±ãµØ Íê³ÉÌõ¼þ²éѯÈÎÎñ¡£Ê¹ÓòÎÊý»¯µÄ²½ÖèÈçÏ£º ----(1)£®ÉùÃ÷²Î±äÁ¿£º CStringp1; floatp2;

----(2)£®ÔÚ¹¹Ô캯ÊýÖгõʼ»¯²Î±äÁ¿ p1=_T(\ p2=0.0f;

m_nParams=2;

----(3)£®½«²Î±äÁ¿Óë¶ÔÓ¦Áаó¶¨

pFX->SetFieldType(CFieldExchange::param) RFX_Text(pFX,_T(\ RFX_Single(pFX,_T(\

----Íê³ÉÒÔÉϲ½ÖèÖ®ºó¾Í¿ÉÒÔÀûÓà ²Î±äÁ¿½øÐÐÌõ¼þ²éѯÁË£º m_pSet->m_strFilter=\ m_pSet->p1=\µç¶¯»ú\ m_pSet->p2=60.0; m_pSet->Requery();

----²Î±äÁ¿µÄÖµ°´°ó¶¨µÄ˳ÐòÌæ»» ²éѯ×Ö´®Öеġ°?¡±ÊÊÅä·û¡£

----Èç¹û²éѯµÄ½á¹ûÊǶàÌõ¼Ç¼µÄ »°£¬¿ÉÒÔÓÃCRecordSetÀàµÄº¯ÊýMove()£¬MoveNext()£¬MovePrev()£¬MoveFirst() ºÍMoveLast()À´Òƶ¯¹â±ê¡£ ----3£®Ôö¼Ó¼Ç¼

----Ôö¼Ó¼Ç¼ʹÓÃAddNew()º¯Êý£¬ÒªÇóÊý¾Ý¿â±ØÐëÊÇÒÔÔÊÐíÔö¼ÓµÄ·½Ê½´ò¿ª£º m_pSet->AddNew(); //ÔÚ±íµÄĩβÔö¼ÓмǼ

m_pSet->SetFieldNull(&(m_pSet->m_type),FALSE); m_pSet->m_type=\µç¶¯»ú\ ... //ÊäÈëеÄ×Ö¶ÎÖµ

m_pSet-> Update(); //½«Ð¼Ç¼´æÈëÊý¾Ý¿â m_pSet->Requery(); //Öؽ¨¼Ç¼¼¯