วิธีทำฉันแทนการเข้าถึงแบบไดนามิก?

เมื่อคุณใช้CDynamicAccessorวิธีการเปิดคำสั่งสร้างตัวเข้าถึงสำหรับคุณโดยอัตโนมัติ ตามข้อมูลที่คอลัมน์ของ rowset ที่เปิดอยู่ คุณสามารถแทนที่การเข้าถึงแบบไดนามิกเพื่อควบคุมเหมือนว่าคอลัมน์ถูกผูกไว้?

เมื่อต้องการแทนที่การเข้าถึงแบบไดนามิก ผ่านเท็จเป็นพารามิเตอร์ล่าสุดวิธีCCommand::Open การป้องกันไม่ให้เปิดจากการสร้างการเข้าถึงโดยอัตโนมัติ คุณสามารถโทรGetColumnInfoและเรียกAddBindEntryสำหรับแต่ละคอลัมน์ที่คุณต้องการผูก รหัสต่อไปนี้แสดงวิธีการดังกล่าว

USES_CONVERSION
คู่ dblProductID

CCommandltCDynamicAccessor > ผลิตภัณฑ์
/ / เปิดตาราง ผ่านเท็จเพื่อป้องกันไม่ให้อัตโนมัติรวมผลิตภัณฑ์เปิด (เซสชัน _T (" Select * จากผลิตภัณฑ์"), NULL, NULL, DBGUID_DEFAULT, false);

ULONG nColumns
DBCOLUMNINFO * pColumnInfo
/ / รับข้อมูลคอลัมน์จาก rowset ที่เปิด
ผลิตภัณฑ์GetColumnInfo (& nColumns และ pColumnInfo);

/ / ผูกหมายเลขผลิตภัณฑ์เป็น double
.wType pColumnInfo [0] = DBTYPE_R8
.ulColumnSize pColumnInfo [0] = 8
ผลิตภัณฑ์AddBindEntry(pColumnInfo[0])

/ / ผูกชื่อผลิตภัณฑ์ซึ่งเป็น
ผลิตภัณฑ์AddBindEntry(pColumnInfo[1])

/ / ผูกระดับการสั่งซื้ออีกครั้งเป็นสตริง
.wType pColumnInfo [8] = DBTYPE_STR
.ulColumnSize pColumnInfo [8] = 10
ผลิตภัณฑ์AddBindEntry(pColumnInfo[8])

/ / เราเสร็จแล้วผูกที่ระบุ ไปข้างหน้า และผูก
ผลิตภัณฑ์Bind()
/ / ฟรีสำหรับคอลัมน์ข้อมูลที่เราดึงข้อมูลในหน่วยความจำ / / ก่อนหน้าเรียกไปยัง GetColumnInfo
CoTaskMemFree(pColumnInfo)

char * pszProductName
char * pszReorderLevel
bool bRC

/ / ทำการวนรอบผ่านระเบียนการสืบค้นกลับออกจากข้อมูลที่
ในขณะที่ (ผลิตภัณฑ์MoveNext() == S_OK)
{
   bRC =ผลิตภัณฑ์GetValue (1 และ dblProductID);
   pszProductName = (char *) ผลิตภัณฑ์GetValue(2)
   pszReorderLevel = (char *) ผลิตภัณฑ์GetValue(9)

ATLTRACE (_T ("แทน% lf \"%s\ = " \"%s\"\n"), dblProductID
      A2T(pszProductName), A2T(pszReorderLevel))
}

Index