向Excle中插入多个表

时间:2022-10-19 21:43:02

向Excle中插入表,点击按钮时 编辑框中的内容 不能和以前的相同

//使用CDatabase、CRecordset时,需要使用的头文件  
#include <odbcinst.h>
#include <afxdb.h>

// 递进初始化 CDatabase、CRecordset对象 以及初始化之后的相关操作
// num 控制Table的名字
// 函数功能仅仅是创建新表 并向 新表中插入几条数据
void CExcle2Dlg::AddTableS(CString num)
{
m_Driver ="Microsoft Excel Driver (*.xls)";
m_ExcelFile = GetSpecialPath();

//1.通过连接数据源间接连接到驱动上
//m_DSN.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",m_Driver,m_ExcelFile);

//2.直接连接到驱动上
m_DSN.Format("DRIVER={%s};DNS='';FIRSTROWHASNAME=1;READONLY=FALSE;CREATE_DB\"%s\";DBQ=%s",
m_Driver,m_ExcelFile,m_ExcelFile);

m_Database = new CDatabase;
BOOL bRetDatabase=m_Database->OpenEx(m_DSN, CDatabase::noOdbcDialog);

if(!bRetDatabase)
return;
CStringArray arrSQL;
CString str;
str.Format("CREATE TABLE [GGGG%s] ([姓名] char(255), [年龄] char(255))",num);
arrSQL.Add(str);str.Empty();
str.Format("INSERT INTO [GGGG%s$A1:IV1] ([姓名], [年龄]) VALUES ('谢志敏', '26岁')",num);
arrSQL.Add(str);str.Empty();
str.Format("INSERT INTO [GGGG%s$A1:IV2] ([姓名], [年龄]) VALUES ('张海平', '24岁')",num);
arrSQL.Add(str);str.Empty();
str.Format("INSERT INTO [GGGG%s$A1:IV3] ([姓名], [年龄]) VALUES ('*超', '26岁')",num);
arrSQL.Add(str);str.Empty();
str.Format("INSERT INTO [GGGG%s$A1:IV4] ([姓名], [年龄]) VALUES ('刘永健', '25岁')",num);
arrSQL.Add(str);str.Empty();
str.Format("INSERT INTO [GGGG%s$A1:IV5] ([姓名], [年龄]) VALUES ('等异形', '26岁')",num);
arrSQL.Add(str);str.Empty();

for (int i=0;i<6;i++)
{
m_Database->ExecuteSQL(arrSQL.GetAt(i));
}

m_Recordset = new CRecordset(m_Database);
BOOL bRetRecordset=FALSE;

try
{
str.Format("SELECT * FROM [GGGG%s$A1:IV65536]",num);
bRetRecordset=m_Recordset->Open(CRecordset::forwardOnly,str, CRecordset::readOnly);
str.Empty();
}
catch (...)
{
str.Empty();
::MessageBox(0,0,0,0);
delete m_Recordset;
m_Recordset=NULL;
}

if(bRetRecordset)
m_Recordset->Close();
m_Database->Close();
}

测试用例:EDIT控件改变num的内容

void CExcle2Dlg::OnButton1() 
{
// TODO: Add your control notification handler code here
Invalidate(FALSE);
CString str;
str.Empty();
m_CtrlEdit.GetWindowText(str);
AddTableS(str);
}