MFC DAO編程中的複製基本表操作

Access是關係型數據庫,根據關係型數據庫理論,同一個數據庫中一般不存在相同結構的基本表,因爲沒有必要,完全可以union起來。但是,在實際編程開發過程中,總會存在一些奇特的需求;比如我現在做的這個項目,一個井眼對應一個基本表,而這些基本表的結構卻完全相同,又不能合併。既然沒有必要存在相同結構的基本表,當讓就不存在複製基本表(或基本表的結構)的函數了,因而只能自己用代碼來完成;大致思路是這樣,先創建一個新的表定義,然後獲取已存在的的基本表的字段信息和索引信息,然後利用這些信息設置新表定義的對應信息,看代碼:   m_pDataSet->Open();   CDaoTableDef *pTableDef=new CDaoTableDef(m_pDataSet->m_pDatabase);   pTableDef->Create(str);

  CDaoFieldInfo newfield;   int j=m_pDataSet->GetFieldCount();   for(int i=0;i<j;i++)   {    m_pDataSet->GetFieldInfo(i,newfield,AFX_DAO_SECONDARY_INFO);    pTableDef->CreateField(newfield);   }      CDaoIndexInfo newindex;   j=m_pDataSet->GetIndexCount();   for(int i=0;i<j;i++)   {    m_pDataSet->GetIndexInfo(2,newindex,AFX_DAO_SECONDARY_INFO);    pTableDef->CreateIndex(newindex);   }      pTableDef->Append();      m_pDataSet->Close();   m_pDataSet->Open(pTableDef); .........

剩下的工作就簡單了,對新表進行數據插入操作。

兩個結構體的定義如下: struct CDaoFieldInfo          //字段信息結構 {    CStringm_strName;           // Primary    shortm_nType;               // Primary    longm_lSize; // Primary    longm_lAttributes;          // Primary    shortm_nOrdinalPosition;    // Secondary    BOOLm_bRequired;            // Secondary    BOOLm_bAllowZeroLength;     // Secondary    longm_lCollatingOrder;      // Secondary    CStringm_strForeignName;    // Secondary    CStringm_strSourceField;    // Secondary    CStringm_strSourceTable;    // Secondary    CStringm_strValidationRule; // All    CStringm_strValidationText; // All    CStringm_strDefaultValue;   // All };

struct CDaoIndexInfo              //索引信息結構 {    CDaoIndexInfo( );                   // Constructor    CStringm_strName;                  // Primary    CDaoIndexFieldInfo*m_pFieldInfos;  // Primary    shortm_nFields;                    // Primary    BOOLm_bPrimary;                    // Secondary    BOOLm_bUnique;                     // Secondary    BOOLm_bClustered;                  // Secondary    BOOLm_bIgnoreNulls;                // Secondary    BOOLm_bRequired;                   // Secondary    BOOLm_bForeign;                    // Secondary    longm_lDistinctCount;              // All    // Below the // Implementation comment:    // Destructor, not otherwise documented };

其實我沒有認真看着兩個結構的定義,沒必要嘛! 還要對GetFieldInfo和GetIndexInfo兩個函數的第三個參數說明一下: //AFX_DAO_PRIMARY_INFO (默認值)函數將獲得包括字段名、字段類型、字段尺寸及字段屬性等基本信息 //AFX_DAO_SECONDARY_INFO   不僅包括上面的信息,還包括字段序號、可控性、是否允許空字符串、排序規則、別名、源字段名以及源表名等輔助信息 //AFX_DAO_ALL_INFO   不僅包括基本信息和輔助信息,還包括合法性規則以及合法性文版在內的全部信息 當然,包含的信息越多,函數執行的速度越低,應當根據實際需求來取捨!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章