文档章节

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

RogerLee
 RogerLee
发布于 2016/11/24 16:15
字数 414
阅读 1
收藏 0
点赞 0
评论 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语言/C++编程学习强势之处的体现

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

小辰带你看世界 ⋅ 05/12 ⋅ 0

C语言编程学习项目实战:图书管理系统

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

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

如何自学成为C/C++程序员大牛

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

小辰带你看世界 ⋅ 05/11 ⋅ 0

C语言/C++程序员编程学习:版权和版本

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

小辰带你看世界 ⋅ 05/16 ⋅ 0

C语言/C++编程学习:获取电脑开机时间

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

小辰带你看世界 ⋅ 05/21 ⋅ 0

C语言编程基础新手学习经典练习题和答案详解入门必备

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

小辰带你看世界 ⋅ 05/13 ⋅ 0

C语言/C++程序员编程学习自信心曲线图

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

小辰带你看世界 ⋅ 05/10 ⋅ 0

C语言/C++编程新手学习常见问题

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

小辰带你看世界 ⋅ 05/11 ⋅ 0

C语言编程学习数据类型——基本类型

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

小辰带你看世界 ⋅ 05/25 ⋅ 0

C语言编程基础学习如何定义一维数组和二维数组

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

小辰带你看世界 ⋅ 04/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

IDEA PermGen space内存溢出

解决方案: File -> Settings -> Build, Execution, Deployment / Build Tools / Maven / Runner下,找到VM Options选项,默认是空的,改为如下内容(或更大值)...

快乐的小火柴 ⋅ 17分钟前 ⋅ 0

前端常见跨域解决方案

什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。 广义的跨域: 1.) 资源跳转: A链接、重定向、表单提交2.) 资源嵌入: <link>、<script>、<im...

临江仙卜算子 ⋅ 18分钟前 ⋅ 0

系统管理命令service

service命令用来控制系统服务的实用工具,例如启动、停止、重启和关闭系统服务,以及当前状态。当然也可以直接操作,例如/etc/init.d/mysqld restart等。 语法 service (选项)(参数) 选项...

Jpchina ⋅ 23分钟前 ⋅ 0

MySQL 联合索引的命中规则

为什么要用联合索引? 对于查询语句“SELECT T.* FROM T WHERE T.c1=1 AND T.c3=2”涉及到两列,这个时候我们一般采用一个联合索引(c1, c3);而不用两个单列索引,这是因为一条查询语句往往应...

hensemlee ⋅ 31分钟前 ⋅ 0

Spring 自动组件扫描

通常情况下都是在XML配置文件中手动声明Bean和组件的。不过Spring也可以自动扫描组件实例化Bean,这样就可以避免在XML文件中繁琐的Bean声明。 手动声明Bean: 这里不再啰嗦,就是简单地在XML...

霍淇滨 ⋅ 35分钟前 ⋅ 0

MapReduce简单需求分析-共同好友及查找互粉的情况

MapReduce的设计,最重要的是要找准key,然后制定一系列的数据处理流程。MapReduce的Map中,会把key相同的分配到同一个reduce中,对于key的选择,可以找到某个相同的因素。以下面的几个例子说...

Jason_typ ⋅ 37分钟前 ⋅ 0

springboot多数据源自动切换

SpringBoot多数据源切换,先上配置文件: 1.pom: <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20......

JackyRiver ⋅ 39分钟前 ⋅ 0

Boost库编译应用

版本:Boost 1.66.0 Windows库编译 官网指南:直接执行bootstrap.bat处理文件即可,可以我却遇到一堆的问题。 环境:Windows 10 + Visual Studio 2017 Boost编译出来库命名 boost库生成文件命...

水海云 ⋅ 44分钟前 ⋅ 0

解决Eclipse发布到Tomcat丢失依赖jar包的问题

如果jar文件是以外部依赖的形式导入的。Eclipse将web项目发布到Tomcat时,是不会自动发布这些依赖的。 可以通过Eclipse在项目上右击 - Propertics - Deployment Assembly,添加“Java Build ...

ArlenXu ⋅ 44分钟前 ⋅ 0

iview tree组件层级过多时可左右滚动

使用vue+iview的tree组件,iview官网iview的tree树形控件 问题描述:tree层级过多时左右不可滚动 问题解决:修改overflow属性值 .el-tree-node>.el-tree-node_children { overflow: vi...

YXMBetter ⋅ 46分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部