TN055: การโยกย้าย MFC ODBC โปรแกรมประยุกต์ฐานข้อมูลชั้นการเรียน MFC DAO

ภาพรวม

ในหลายกรณี ดังกล่าวอาจเป็นการโยกย้ายโปรแกรมประยุกต์ที่ใช้ชั้นฐานข้อมูล ODBC MFC ของการเรียนที่เปิดฐานข้อมูล DAO MFC ของ หมายเหตุทางเทคนิคนี้จะมีรายละเอียดมากที่สุดของความแตกต่างระหว่างคลาสที่ MFC ODBC และ DAO มีความแตกต่างในใจ ไม่ควรยากสุดเหวี่ยงกับโยกย้ายโปรแกรมประยุกต์จากคลาสที่ ODBC ไปยังคลาสที่ MFC ถ้าต้อง?

ทำไมโยกย้ายจาก ODBC เพื่อ DAO?

มีหลายเหตุผลที่ทำไมคุณอาจต้องการย้ายโปรแกรมประยุกต์จากคลาสที่ฐานข้อมูล ODBC กับคลาสที่ฐานข้อมูล DAO แต่การตัดสินใจไม่จำเป็นต้องง่าย หรือไม่ชัดเจน สิ่งหนึ่งที่ควรระลึกคือ Microsoft Jet database engine ที่ถูกใช้ โดย DAO สามารถอ่านแหล่งข้อมูล ODBC ใด ๆ ที่คุณมีโปรแกรมควบคุม ODBC มันอาจจะเพิ่มประสิทธิภาพในการใช้คลาสที่ฐานข้อมูล ODBC หรือเรียก ODBC โดยตรงด้วยตัวเอง แต่ Microsoft Jet database engine สามารถอ่านข้อมูล ODBC?

มีบางกรณีที่ง่าย ๆ ที่ทำให้ง่ายต่อการตัดสินใจของ ODBC/DAO ตัวอย่าง เมื่อคุณเพียงต้องการเข้าถึงข้อมูลในรูปแบบ Microsoft Jet engine สามารถอ่านได้โดยตรง (รูปแบบ Access, FoxPro รูป รูปแบบ Excel และอื่น ๆ) ทางเลือกที่ชัดเจนคือการ ใช้คลาสที่ฐานข้อมูล DAO?

กรณีที่ซับซ้อนมากขึ้นเกิดขึ้นเมื่อมีการให้ข้อมูลของคุณอยู่ บนเซิร์ฟเวอร์ หรือ บนเซิร์ฟเวอร์ที่แตกต่างกันมากมาย ในกรณีนี้ การตัดสินใจการใช้คลาสที่ฐานข้อมูล ODBC หรือฐานข้อมูล DAO คลาสที่เป็นขึ้นยาก ถ้าคุณต้องการ ทำสิ่งที่ชอบรวมแตกต่างกัน (การรวมข้อมูลจากเซิร์ฟเวอร์ในหลายรูปแบบเช่น SQL Server และ Oracle), แล้ว Microsoft Jet database engine จะทำการรวมสำหรับคุณแทนที่จะบังคับให้คุณทำงานจำเป็นหากคุณใช้คลาสที่ฐานข้อมูล ODBC หรือเรียกว่า ODBC โดยตรง ถ้าคุณกำลังใช้โปรแกรมควบคุม ODBC ที่สนับสนุนโปรแกรมควบคุมเคอร์เซอร์ ทางเลือกที่ดีที่สุดของคุณอาจจะเรียนฐานข้อมูล ODBC?

ตัวเลือกที่มีความซับซ้อน ดังนั้นคุณอาจต้องการเขียนโค้ดบางอย่างในการทดสอบประสิทธิภาพของวิธีการต่าง ๆ ที่กำหนดความต้องการพิเศษของคุณ หมายเหตุทางเทคนิคนี้ถือว่า คุณได้ทำการตัดสินใจการโยกย้ายจากคลาสที่ฐานข้อมูล ODBC เพื่อเรียนในฐานข้อมูล DAO?

ความคล้ายคลึงกันระหว่างชั้นฐานข้อมูล ODBC และชั้นฐานข้อมูล MFC DAO

การออกแบบต้นฉบับของคลาสที่ MFC ODBC ยึดแบบวัตถุ DAO ซึ่งได้ถูกใช้งานใน Microsoft Access และ Microsoft Visual Basic ซึ่งหมายความ ว่า มีคุณลักษณะทั่วไปหลาย ๆ อย่าง ODBC และ DAO MFC ชั้น ซึ่งจะไม่ใช่ทั้งหมดจะแสดงในส่วนนี้ ทั่วไป แบบจำลองที่มีการเขียนโปรแกรมจะเหมือนกัน?

เพื่อเน้นความคล้ายคลึงกันเพียงไม่กี่:

ตัวอย่าง ในทั้งสองรุ่น คือกระบวนการเรียกข้อมูลการ สร้าง และเปิดวัตถุฐานข้อมูล สร้าง และเปิดวัตถุ recordset และการนำทาง (ย้าย) แม้ว่าข้อมูลการดำเนินการบางอย่าง?

ความแตกต่างระหว่างโปรแกรมควบคุม ODBC และคลาสของ DAO MFC

คลาสที่ DAO รวมวัตถุมากกว่าหนึ่งวัตถุและชุดอื่น ๆ วิธีการ แต่ในส่วนนี้จะรายละเอียดความแตกต่างในชั้นเรียนที่คล้ายคลึงกันและการทำงานเท่านั้น?

ความแตกต่างที่เด่นชัดระหว่างการเรียนอาจมีการเปลี่ยนแปลงชื่อสำหรับชั้นที่คล้ายคลึงกันและฟังก์ชันสากล Ofnbsp เปลี่ยนแปลงชื่อ แสดงรายการต่อไปนี้ วัตถุ วิธีการ และฟังก์ชันที่เกี่ยวข้องกับคลาสที่ฐานข้อมูลสากล(&N):

คลาสหรือฟังก์ชัน เทียบเท่าในคลาสของ MFC DAO
CDatabase CDaoDatabase
CDatabase::ExecuteSQL CDaoDatabase::Execute
CRecordset CDaoRecordset
CRecordset::GetDefaultConnect CDaoRecordset::GetDefaultDBName
CFieldExchange CDaoFieldExchange
RFX_Bool DFX_Bool
RFX_Byte DFX_Byte
RFX_Int DFX_Short
RFX_Long DFX_Long
DFX_Currency
RFX_Single DFX_Single
RFX_Double DFX_Double
RFX_Date * DFX_Date (COleDateTime-ใช้)
RFX_Text DFX_Text
RFX_Binary DFX_Binary
RFX_LongBinary DFX_LongBinary

* ฟังก์ชันRFX_DateจะยึดCTimeและTIMESTAMP_STRUCT?

เปลี่ยนหลักการทำงานซึ่งอาจส่งผลกระทบต่อโปรแกรมประยุกต์ของคุณ และต้องเปลี่ยนชื่อมากกว่าธรรมดา อยู่ด้านล่าง?

  1. มีการเปลี่ยนแปลงค่าคงและแมโครที่ใช้ในการระบุชนิดเปิดสิ่งที่ต้องการชุดระเบียน และตัวเลือกเปิดชุดระเบียน?

    คลาสที่ ODBC MFC จำเป็นในการกำหนดตัวเลือกเหล่านี้ผ่านแมโคร หรือระบุชนิด?

    กับคลาสที่ DAO, DAO ให้คำจำกัดความของตัวเลือกเหล่านี้ในส่วนหัวของแฟ้ม (DBDAOINTH) . ชนิดชุดระเบียนคือ สมาชิกที่ระบุของCRecordsetแต่กับดาว เป็นค่าคงแทน ตัวอย่าง ที่คุณจะใช้snapshot ของเมื่อระบุชนิดของCRecordsetใน ODBC แต่DB_OPEN_SNAPSHOTเมื่อระบุชนิดของCDaoRecordset?

  2. ชนิดชุดระเบียนเริ่มต้นสำหรับCRecordsetเป็นsnapshot ของขณะที่ชนิดชุดระเบียนที่เริ่มต้นสำหรับCDaoRecordsetเป็นdynaset (ดูหมายเหตุด้านล่างสำหรับปัญหาเพิ่มเติมเกี่ยวกับ snapshot ของคลาส ODBC)?

  3. ODBC CRecordsetชั้นมีตัวเลือกในการสร้างชนิดของชุดระเบียนไปข้างหน้าเท่านั้น ในคลาCDaoRecordsetไปข้างหน้าเดียวคือไม่ ชนิดชุดระเบียน แต่ค่อนข้างคุณสมบัติ (หรือเลือก) บางชนิดของชุดระเบียน?

  4. การผนวกข้อมูลเดียว recordset เมื่อเปิดวัตถุCRecordsetตั้งใจ ว่า ข้อมูลของชุดระเบียนอาจจะอ่าน และผนวก ด้วยวัตถุCDaoRecordsetตัวเลือกผนวกเดียวหมาย ตามตัวอักษรว่า ของชุดระเบียนข้อมูลได้เฉพาะผนวก (และไม่อ่าน)?

  5. ฟังก์ชันที่สมาชิกของคลาสที่ ODBC ธุรกรรมเป็นสมาชิกของCDatabaseและการกระทำที่ระดับฐานข้อมูล ในคลาสที่ DAO ฟังก์ชันสมาชิกธุรกรรมเป็นสมาชิกของคลาสระดับสูง (CDaoWorkspace) และดังนั้นจึง อาจลดหลายCDaoDatabaseวัตถุที่ใช้ร่วมกันของพื้นที่ทำงานเดียวกัน (ช่องว่างของธุรกรรม)?

  6. คลายกเว้นมีการเปลี่ยนแปลง CDBExceptionsจะส่งออกไปในชั้นเรียนของ ODBC และCDaoExceptionsในคลาสที่ DAO?

  7. RFX_Dateใช้วัตถุCTimeและTIMESTAMP_STRUCTในขณะที่DFX_Dateใช้COleDateTime COleDateTimeจะเกือบเหมือนกับCTimeแต่ใช้ OLE 8 ไบต์วันแทนที่เป็นแบบ 4 ไบต์time_tเพื่อให้มันสามารถค้างไว้มากใหญ่ช่วงของข้อมูล?

หมายเหตุnbsp  Snapshot ของ DAO (CDaoRecordset) เป็นแบบอ่านอย่างเดียวในขณะที่ snapshot ของ ODBC (CRecordset) อาจสามารถปรับปรุงทั้งนี้ขึ้นอยู่กับโปรแกรมควบคุมและการใช้ ODBC เคอร์เซอร์ไลบรารี ถ้าคุณกำลังใช้เคอร์เซอร์ไลบรารี snapshot ของCRecordsetจะสามารถปรับปรุงได้ ถ้าคุณกำลังใช้โปรแกรมควบคุม Microsoft จากเดสก์ท็อปไดรเวอร์ Pack 3.0 ใด ๆ โดย ODBC เคอร์เซอร์ไลบรารี snapshot ของCRecordsetเป็นแบบอ่านอย่างเดียว ถ้าคุณกำลังใช้โปรแกรมควบคุมอื่น ตรวจสอบเอกสารประกอบของโปรแกรมควบคุมเพื่อดูถ้า snapshot ของ (STATIC_CURSORS) เป็นแบบอ่านอย่างเดียว(&N)?

หมายเหตุด้านเทคนิคตามหมายเลข|nbsp หมายเหตุด้านเทคนิคตามประเภท(&N)

Index