文档章节

C++ access数据库中字段信息获取

RogerLee
 RogerLee
发布于 2016/11/24 16:15
字数 414
阅读 2
收藏 0
void CDataControl::GetFieldNameCn(const CString& sTableName,CADORecordset* pAdoAccess,const CString& sNameEn, CString& sNameCn)
{
	SAFEARRAY   FAR*   psa   =   NULL; 
	SAFEARRAYBOUND   rgsabound; 
	_variant_t     var; 
	_variant_t     Array; 
	rgsabound.lLbound   =   0; 
	rgsabound.cElements   =   4; 
	psa   =   SafeArrayCreate(VT_VARIANT,   1,   &rgsabound); 
	var.vt   =   VT_EMPTY; 
	long   ix; 
	ix   =   0; 
	SafeArrayPutElement(psa,   &ix,   &var); 
 
	ix=   1; 
	SafeArrayPutElement(psa,   &ix,   &var); 
 
	ix   =   2; 
	var.vt   =   VT_BSTR; 
	var.bstrVal   =sTableName.AllocSysString();		//表名  sTableName 
	SafeArrayPutElement(psa,   &ix,   &var); 
 
	var.vt   =   VT_BSTR; 
	ix   =   3; 
	var.bstrVal   =sNameEn.AllocSysString();//字段名
	SafeArrayPutElement(psa,   &ix,   &var); 
 
	Array.vt   =   VT_ARRAY|VT_VARIANT; 
	Array.parray   =   psa;   
 
	pAdoAccess->m_pRecordset   =   pAdoAccess->GetActiveConnection()->OpenSchema(adSchemaColumns,&Array);  
 
	Field *fd = pAdoAccess->m_pRecordset->Fields->GetItem("DESCRIPTION");
	if (fd->GetValue().vt != VT_NULL)
	{
		_bstr_t  column_discription = fd->Value;
		CString sNote;
		sNote.Format(_T("%s"), (LPCTSTR)column_discription);
		sNameCn =  (LPCTSTR)column_discription;
	}
	else
	{
		sNameCn = sNameEn;
	}
}
 
BOOL CDataControl::GetFileNULL(const CString& sTableName,const CString& sFileNameEN,CString& sFileNameCN,CADORecordset* pAdoAccess,BOOL& ISNullSet, int& OrdinalPostion)
{
	SAFEARRAY   FAR*   psa   =   NULL; 
	SAFEARRAYBOUND   rgsabound; 
	_variant_t     var; 
	_variant_t     Array; 
	rgsabound.lLbound   =   0; 
	rgsabound.cElements   =   4; 
	psa   =   SafeArrayCreate(VT_VARIANT,   1,   &rgsabound); 
	var.vt   =   VT_EMPTY; 
	long   ix; 
	ix   =   0; 
	SafeArrayPutElement(psa,   &ix,   &var); 
 
	ix=   1; 
	SafeArrayPutElement(psa,   &ix,   &var); 
 
	ix   =   2; 
	var.vt   =   VT_BSTR; 
	var.bstrVal   =sTableName.AllocSysString();		//表名  sTableName 
	SafeArrayPutElement(psa,   &ix,   &var); 
 
	var.vt   =   VT_BSTR; 
	ix   =   3; 
	var.bstrVal   =sFileNameEN.AllocSysString();//字段名
	SafeArrayPutElement(psa,   &ix,   &var); 
 
	Array.vt   =   VT_ARRAY|VT_VARIANT; 
	Array.parray   =   psa;   
 
	pAdoAccess->m_pRecordset   =   pAdoAccess->GetActiveConnection()->OpenSchema(adSchemaColumns,&Array);  
	//IS_NULL = 1 表示字段可以为空   0 表示必填
	ISNullSet = (pAdoAccess->m_pRecordset->Fields->GetItem("IS_NULLABLE")->Value.boolVal == -1)?TRUE:FALSE;//是否允许为空
	_bstr_t  column_name = pAdoAccess->m_pRecordset->Fields->GetItem("COLUMN_NAME")->Value;//字段名
	OrdinalPostion = pAdoAccess->m_pRecordset->Fields->GetItem("ORDINAL_POSITION")->Value;//字段序号
 
	Field *fd = pAdoAccess->m_pRecordset->Fields->GetItem("DESCRIPTION");
	if (fd->GetValue().vt != VT_NULL)
	{
		_bstr_t  column_discription = fd->Value;
		CString sNote;
		sNote.Format(_T("%s"), (LPCTSTR)column_discription);
		sFileNameCN =  (LPCTSTR)column_discription;
	}
	else
	{
		sFileNameCN = sFileNameEN;
	}
 
	//int  NUMERIC_PRECISION = m_pRecordset->Fields->GetItem("NUMERIC_PRECISION")->Value;
	//int  NUMERIC_SCALE = m_pRecordset->Fields->GetItem("NUMERIC_SCALE")->Value;
 
 
	return TRUE;
}
 
BOOL CDataControl::GetFilePkName(const CString& sTableName,std::vector<CString>& sPkName,CADORecordset* pAdoAccess)
{
	SAFEARRAY   FAR*   psa   =   NULL; 
	SAFEARRAYBOUND   rgsabound; 
	_variant_t     var; 
	_variant_t     Array; 
	rgsabound.lLbound   =   0; 
	rgsabound.cElements   =   3; 
	psa   =   SafeArrayCreate(VT_VARIANT,   1,   &rgsabound); 
	var.vt   =   VT_EMPTY; 
	long   ix; 
	ix   =   0; 
	SafeArrayPutElement(psa,   &ix,   &var); 
 
	ix=   1; 
	SafeArrayPutElement(psa,   &ix,   &var); 
 
	ix   =   2; 
	var.vt   =   VT_BSTR; 
	var.bstrVal   =sTableName.AllocSysString();		//表名  sTableName 
	SafeArrayPutElement(psa,   &ix,   &var); 
 
	Array.vt   =   VT_ARRAY|VT_VARIANT; 
	Array.parray   =   psa;   
 
	pAdoAccess->m_pRecordset   =   pAdoAccess->GetActiveConnection()-> OpenSchema(adSchemaPrimaryKeys,&Array);  //adSchemaColumns
 
	while(!pAdoAccess->IsEOF())
	{
		_bstr_t  column_name = pAdoAccess->m_pRecordset->Fields->GetItem("COLUMN_NAME")->Value;
		_bstr_t   column_PK=   pAdoAccess->m_pRecordset-> Fields-> GetItem( "PK_NAME")-> Value; 
 
		sPkName.push_back((LPCTSTR)column_name);
		pAdoAccess->MoveNext();
	}
 
	return TRUE;
}

© 著作权归作者所有

共有 人打赏支持
RogerLee
粉丝 2
博文 3
码字总数 1204
作品 0
武汉
程序员
C++ 跨平台多功能扩展库 - cpgf

cpgf 可为C++代码增加反射(元数据)、序列化、以及Luau和Python脚本绑定等功能,且不依赖任何外部工具。 cpgf 的目标是扩展C++语言,其中包含许多易于使用的功能,这些功能仅在其他更高级别...

wqking
09/17
0
0
sqlite的创建数据库,表,插入查看数据

IOS sqlite数据库操作。步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 1、新建项目sqliteDemo,添加使用sqlite的库libsqlite3....

jackyyang
2012/07/15
0
0
C++ ORM ODB 入门介绍(二)

本节主要介绍ODB中的继承和C++之间的关系。 ORM中的O的关系是很复杂的。其中之一便是对象的继承体系。 在C++语言中支持类之间的继承,这这些继承的关系是否可以同时映射到数据库呢? 1. ODB...

newzai
2013/09/05
0
0
CSDN回帖得分大全(近两年)

√ vs2005调用dll的时候Initialize()函数返回错误 [VC/MFC 基础类] √ 为什么我创建登陆框之后,然后获取登陆框的数据时候总是出现非法操作! [VC/MFC 界面] √ CFileFind::FindFile 支持通配...

junwong
2012/03/09
0
0
C语言编程学习项目实战:图书管理系统

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
06/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

io流

码农屌丝
6分钟前
0
0
SpringBoot基础篇之重名Bean的解决与多实例选择

更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 当通过接口的方式注入Bean时,如果有多个子类的bean存在时,具体哪个bean会被注入呢?系统中能否存在两个重名的bean呢?如果可以,那么怎么...

小灰灰Blog
16分钟前
0
0
记录一次dubbo项目实战

一、案例说明 存在2个系统,A系统和B系统,A系统调用B系统的接口获取数据,用于查询用户列表。 二、环境搭建 安装zookeeper,解压(zookeeper-3.4.8.tar.gz)得到如下: 然后进入conf将zoo_s...

Java烂猪皮
20分钟前
0
0
拜托,别再问怎么深入学习分布式架构了!

由于分布式系统所涉及到的领域众多,知识庞杂,很多新人在最初往往找不到头绪,不知道从何处下手来一步步学习分布式架构。 本文试图通过一个最简单的、常用的分布式系统,来阐述分布式系统中...

Java架构资源分享
21分钟前
0
0
《netty入门与实战》笔记-05:心跳与空闲检测

本小节,我们一起探讨最后一个话题:心跳与空闲检测 首先,我们来看一下,客户端与服务端之间的网络会存在什么问题? 1. 网络问题 下图是网络应用程序普遍会遇到的一个问题:连接假死 连接假...

Funcy1122
27分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部