文档章节

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

RogerLee
 RogerLee
发布于 2016/11/24 16:15
字数 414
阅读 145
收藏 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;
}

© 著作权归作者所有

上一篇: 批处理改DNS
下一篇: C++ base64编解码
RogerLee
粉丝 2
博文 3
码字总数 1204
作品 0
武汉
程序员
私信 提问
加载中

评论(0)

vs2012 MFC连接及操作access(2007)数据库(ADO)

最近想写个图书管理软件,用到了数据库,但是由于是小白,弄了好半天才把数据库搞明白。虽然网上有一些教程,但大多都是长长的文字叙述,所以想写一个图文版的连接教程并把这两天的经验记录下...

Mr_yy
2016/07/06
0
0
VC中使用ADO操作数据库的方法

准备工作 (1)、引入ADO类 #import "c:\program files\common files\system\ado\msado15.dll" \ no_namespace \ rename ("EOF", "adoEOF") (2)、初始化COM 在MFC中可以用AfxOleInit();非MFC环......

小编辑
2010/05/18
6.5K
0
Electron-如何保护源码?

一开始听到这个需求挺懵的,作为一个聊天软件,代码里并没有所谓核心算法和商业机密,为什么需要保护源码。况且Electron本身在打包时提供了这种archive文件格式,会将所有源码和依赖封装。 ...

Charles0427
2019/02/18
0
0
SEH结构化(c语言)异常模型

从本篇文章开始,将全面阐述try,except,finally,leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型。将在这里与大家分享SEH( 结构化异常处理)的学习过程和经验总结。 ...

osc_wq7ij8li
2019/05/07
2
0
c++中数据表如何转成业务实体--map和结构体的相互转换

c++中数据表如何转成业务实体--map和结构体的相互转换 应用场景:如何把数据库表中的一行转换成一个业务实体结构体,c#和java中都有实体框架,表到实体的转换很方便,c++中缺少这些框架,但是...

南哥的天下
2019/12/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springBoot之配置文件的读取以及过滤器和拦截器的使用

springBoot之配置文件的读取以及过滤器和拦截器的使用 前言 在之前的学习springBoot中,成功的实现了Restful风格的基本服务。但是想将之前的工程作为一个项目来说,那些是仅仅不够的。可能还...

鹏十二
24分钟前
23
0
Springboot在Idea Intellij汉字Unicode读取乱码问题

问题核心:Unicode编码中的字母需要小写。比如\u8bbe\u5907\u53f7 首先,了解清楚Unicode编码是什么东西。请读者自己搜索。 然后,我们要清楚springboot是怎么加载配置文件的。兴趣的读者可以...

sunranhou
29分钟前
19
0
服务器管理规范

1、为了保证服务器的安全,服务器的账号密码不能随便透露给他人,必须指定人员负责管理。 2、服务器至少要安装360安全卫士。以此保障服务器的安全。 3、服务器要设置定期重启(可以使用命令 ...

ethanleellj
32分钟前
31
0
工厂方法

1. 介绍 工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期...

steven-黄笑笑
34分钟前
19
0
Ubuntu 18.04 安装GRASS GIS 7.8.3

在之前的Ubuntu 16.04 安装 Grass gis 7.6.1中主要是通过添加ppa源的方法安装预编译包,但由于众所周知的原因可能会失败,所以最好的安装方法是下载源码后自己编译安装,下面是安装步骤: 安...

ddd口木呆
34分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部