MFC新建Access数据库和表

1. 准备工作

(1) 把下面两局代码写进stdafx.h里。位置是倒数第二行,或者#include <afxdisp.h> // MFC 自动化类 这句的后面。(别的位置没试过) (如果改变了位置,要先清理解决方案,再重新生成解决方案)

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF")
#import "C:\Program Files\Common Files\system\ado\msadox.dll" rename_namespace("ADOX")

(2)把下面一行代码写进XXX.cpp的InitInstance()函数里,位置是return之前。

if (!AfxOleInit())//这就是MFC初始化COM库 
	{
		AfxMessageBox(_T("OLE初始化出错!"));
	}

(3)在XXXDlg.h里添加变量

_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;

2. 新建数据库

参数是文件路径和文件名的字符串,如:

CreateAccess(_T(".\\xx\\xxx.accdb"));

函数功能:如果存在则提示存在,不存在则创建数据库文件。

void CTestAccessDlg::CreateAccess(CString PathAndAccessName)
{
	if (PathFileExists(PathAndAccessName))
	{
		MessageBox(_T("文件已存在"));
	}
	else
	{
		//MessageBox(_T("文件不存在"));
		
		ADOX::_CatalogPtr m_pCatalog = NULL;	
		_bstr_t ConnectString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = " +                     
                                               (_bstr_t)PathAndAccessName;
		//MessageBox(ConnectString);
		try
		{
			m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
			m_pCatalog->Create((_bstr_t)ConnectString);
		}
		catch (_com_error *e)
		{
			AfxMessageBox(e->ErrorMessage());
		}
	}
}

3.新建数据表

还可写一个获取字段的函数,此处不写了,只写姓名和年龄两个字段

void CTestAccessDlg::OnInitADOConn();

void CTestAccessDlg::CreateAccessTable(CString TableName)
{
	_variant_t RecordsAffected;
	try
	{
		_bstr_t bstr1 = "CREATE TABLE ";
		_bstr_t bstr2 = (_bstr_t)TableName;
		_bstr_t bstr3 = "(姓名 TEXT, 年龄 INTEGER)";
		_bstr_t CommandText = bstr1 + bstr2 + bstr3;
		m_pConnection->Execute(CommandText, &RecordsAffected, adCmdText);
		MessageBox(_T("创建表成功"));
	}
	catch (_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}
}

void CTestAccessDlg::ExitADOConn();
void CTestAccessDlg::OnInitADOConn()
{
	m_pConnection.CreateInstance(__uuidof(Connection));
	_bstr_t ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = .\\Test.accdb";
	try
	{
		m_pConnection->Open(ConnectionString, "", "", adModeUnknown);
	}
	catch (_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}
}
void CTestAccessDlg::ExitADOConn()
{
	try
	{
		if (m_pConnection->State)
		{
			m_pConnection->Close();
		}
		m_pConnection = NULL;
	}
	catch (_com_error e)
	{
		AfxMessageBox(e.ErrorMessage());
	}
}

长整型:Long

整型:short

单精度:single

双精度:Double

货币:Currency

文本:Char

二进制(OLE对象):Binary

自动编号:Counter

备注:Memo

日期时间:time

SQL语句命令如下:

ALTER TABLE tb ALTER COLUMN aa Byte 数字[字节]

ALTER TABLE tb ALTER COLUMN aa Long 数字[长整型] 

ALTER TABLE tb ALTER COLUMN aa Short 数字[整型]

ALTER TABLE tb ALTER COLUMN aa Single 数字[单精度 

ALTER TABLE tb ALTER COLUMN aa Double 数字[双精度]

ALTER TABLE tb ALTER COLUMN aa Currency 货币 

ALTER TABLE tb ALTER COLUMN aa Char 文本

ALTER TABLE tb ALTER COLUMN aa Text(n) 文本,其中n表示字段大小 

ALTER TABLE tb ALTER COLUMN aa Binary 二进制

ALTER TABLE tb ALTER COLUMN aa Counter 自动编号 

ALTER TABLE tb ALTER COLUMN aa Memo 备注

ALTER TABLE tb ALTER COLUMN aa Time 日期/时间

1.文本型(Text):用于输入文本或文本与数字相结合的数据,最长为255个字符(字节),默认值是50。在Access中,每一个汉字和所有特殊字符(包括中文标点符号)都算作一个字符。

2.货币型(Currency):用来存储货币值,占8个字节,在计算中禁止四舍五入

3.数字型(Number):用于可以进行数值计算的数据,但货币除外。数字型字段按字段大小分字节、整型、长整型、单精度型、双精度型、同步复制ID和小数7种情形,分别占1、2、4、4、8、16和12个字节。

4.日期/时间型(Date/Time):用于存储日期和(或)时间值,占8个字节。

5、自动编号型(AutoNumber):用于在添加记录时自动插入的序号(每次递增1或随机数),默认是长整型,也可以改为同步复制ID。自动编号不能更新。

6、是/否型(Yes/No):用于表示逻辑值(是/否,真/假),占1个字节。

7、备注型(Memo):用于长文本或长文本与数字(大于255个字符)的结合,最长为65535个字符。

8、OLE对象型(OLE Object):用于使用OLE协议在其它程序中创建的OLE对象(如Word文档、Excel电子表格、图片、声音等),最多存储1GB(受磁盘空间限制)。

9、超级链接型(Hyper Link):用于存放超级链接地址,最多存储64000个字符。

10、查阅向导型(Lockup Wizard):让用户通过组合框或列表框选择来自其它表或值列表的值,实际的字段类型和长度取决于数据的来源。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值