向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);
}