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   不仅包括基本信息和辅助信息,还包括合法性规则以及合法性文版在内的全部信息 当然,包含的信息越多,函数执行的速度越低,应当根据实际需求来取舍!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值