永发信息网

VC++(MFC)如何从对话框写数据到Excel

答案:3  悬赏:30  手机版
解决时间 2021-03-13 07:55
网上好多例子都是用代码直接写入的,所以想问问各位高手如何通过ODBC从对话框中编辑数据然后存到Excel中。比如对话框中有姓名和学号两项,输入"张三"和“123”后能自动保存到Excel表格中。
最佳答案
MFC里面连的数据库一般是access,一般不用excel。
用ADO或者ODBC直接连接access,很容易。
编程的话,也很简单。
全部回答
MFC访问EXCEL,那可是比较麻烦的了。给个以前做过的项目。是访问数据库的 你自己整理着看下 希望有帮助。 if(m_bDataBase) //有数据库 { HRESULT hr; try { hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象 if(SUCCEEDED(hr)) { m_pConnection->ConnectionTimeout=3;///设置超时时间为3秒 CString szOpen = theApp.m_szDataMisDir; if(szOpen.Right(1) != "\\") szOpen += "\\"; //hr = m_pConnection->Open(Filepath,"","",adModeUnknown); #ifndef _OFFICE97 szOpen = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+szOpen+"BiocaDatabase.mdb;"; #else szOpen = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source="+szOpen+"BiocaDatabase.mdb;"; #endif hr = m_pConnection->Open((_bstr_t)szOpen,"","",adModeUnknown); } } catch(_com_error e)//捕捉异常 { CString temp; if(m_bChinese) temp.Format("连接数据库错误信息:%s",e.ErrorMessage()); else temp.Format("Connecting database failure:%s",e.ErrorMessage()); AfxMessageBox(temp); m_pConnection = NULL; } //如果当前数据库为空,则导入最近使用的数据库 if(m_pConnection!=NULL) { CString szSQL = "SELECt * FROM TestData"; _RecordsetPtr pSearchRecordSet; try { pSearchRecordSet.CreateInstance("ADODB.Recordset"); pSearchRecordSet->Open((_variant_t)szSQL,_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText); if(pSearchRecordSet->adoEOF) { if(!CopyFile(m_szDesFileName1,m_szDataMisDir+"\\BiocaDatabase.mdb",FALSE)) { //判断是否是装完软件后第一次运行 int RunNo=GetProfileInt("RunNo","No",0); //第一次运行 if(RunNo==0) WriteProfileInt("RunNo","No",1); //已经运行过了 else { if(m_bChinese) AfxMessageBox("导入数据库失败!"); else AfxMessageBox("Input database failure!"); } } } } catch(_com_error e)///捕捉异常 { CString temp; if(m_bChinese) temp.Format("导入数据库出错:%s",e.ErrorMessage()); else temp.Format("Input database failure:%s",e.ErrorMessage()); AfxMessageBox(temp); } } //if(!m_pConnection=NULL) } //if(m_bDataBase)
不要用odbc,用ado 第一步 // 加入ado支持库 #import "c:\program files\common files\system\ado\msado15.dll"\ no_namespace \ rename ("eof", "adoeof") #pragma comment(lib, "shlwapi.lib") 第二步: #pragma once #include #include #include class cdbmanager { public: cdbmanager(void); public: ~cdbmanager(void); void init(cstring ip, cstring dbname, cstring dbuser, cstring dbpass, int type);//初始化数据库连接设置 bool test();//测试数据库连接是否正常 bool update(cstring sql);//执行insert、update和delete语句 bool query(cstring sql, coblist& result );//得到查询的记录集合 public: cstring m_dbstr;//数据库ado连接字符串 }; 2、dbmanager.cpp #include "stdafx.h" #include "dbmanager.h" #include "config.h" cdbmanager::cdbmanager(void) { m_dbstr = _t(""); } cdbmanager::~cdbmanager(void) { } void cdbmanager::init(cstring ip, cstring dbname, cstring dbuser, cstring dbpass, int type) { if(type == db_server_sql_type) m_dbstr.format(_t("provider='sqloledb';data source='%s';initial catalog='%s';user id='%s';password='%s';"),ip,dbname,dbuser,dbpass); else m_dbstr.format(_t("provider='oraoledb.oracle';data source='%s_%s';user id='%s';password='%s';"),dbname,ip,dbuser,dbpass); } bool cdbmanager::test() { bool flag = false; ::coinitialize(null); _connectionptr m_pconnection = null; try { hresult hr = m_pconnection.createinstance(__uuidof(connection)); _bstr_t strconnect= m_dbstr; m_pconnection->open(strconnect,l"",l"",admodeunknown); if(m_pconnection!=null) flag = true; if(m_pconnection->state) m_pconnection->close(); } catch(_com_error e) { flag = false; } ::couninitialize(); return flag; } bool cdbmanager::update(cstring sql) { bool flag = false; ::coinitialize(null); _connectionptr m_pconnection = null; try { hresult hr = m_pconnection.createinstance(__uuidof(connection)); _bstr_t strconnect= m_dbstr; m_pconnection->open(strconnect,l"",l"",admodeunknown); if(m_pconnection==null) return false; _bstr_t bstr_sql = sql; m_pconnection->execute(bstr_sql,null,1); flag = true; } catch(_com_error e) { flag = false; } if(m_pconnection->state) m_pconnection->close(); ::couninitialize(); return flag; } bool cdbmanager::query(cstring sql, coblist& result) { bool flag = true; ::coinitialize(null); _connectionptr m_pconnection = null; _recordsetptr m_precordset = null; try { hresult hr = m_pconnection.createinstance(__uuidof(connection)); _bstr_t strconnect= m_dbstr;//"provider=sqloledb;server=192.168.1.64;database=mserver; uid=mserver; pwd=mserver;"; m_pconnection->open(strconnect,l"",l"",admodeunknown); if(m_pconnection==null) return false; // 创建记录集对象 m_precordset.createinstance(__uuidof(recordset)); // 取得表中的记录 m_precordset->open("select * from t_mediaserver",m_pconnection.getinterfaceptr(), adopendynamic,adlockoptimistic,adcmdtext); int columnssize = m_precordset->fields->getcount(); while (!m_precordset->endoffile) { result.addtail(new cmapstringtostring); for(int j = 0; j < columnssize; j++) { fieldptr fptr = m_precordset->fields->getitem((long)j); _variant_t vname = fptr->name; _variant_t vvalue = fptr->value; cstring name((wchar*)(_bstr_t)vname); cstring value = _t(""); if(vvalue.vt != vt_null) value.format(_t("%s"),(wchar*)(_bstr_t)vvalue); ((cmapstringtostring*)result.gettail())->setat(name,value); } m_precordset->movenext(); ///移到下一条记录 } m_precordset->close(); // 关闭记录集 } catch(_com_error e) { flag = false; } if(m_precordset->state) m_precordset->close(); if(m_pconnection->state) m_pconnection->close(); ::couninitialize(); return flag; } 备注: 1、需要在stdafx.h中加入 #import "c:\program files\common files\system\ado\msado15.dll" \ no_namespace rename("eof", "endoffile") //ado数据库连接 2、连接oracle数据库前需要先在客户机配置oracle客户端。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
iPhone6 9.2.1可以越狱吗?
鲜艳的艳还可以组什么词
报团去港澳游,不购物会怎么样
广东省茂名盐业总公司信宜公司地址在什么地方
如何形容人的观念
成语接龙幽期密约
pokemon go cp低怎么办
河南华塑这个地址在什么地方,我要处理点事
求到定点a(0,0,c)与到xoy面等距离的动点的轨
柯南为什么说本堂瑛祐挺聪明的?
执月是什么意思? 轮流掌管一个月?
关于国际经济与贸易这个专业,这个专业怎么样
青铜峡镇富有保健计划生育服务站地址在哪,我
隐藏分高有什么用
迪士尼在中国的授权情况?
推荐资讯
角3是直角其中包括角1和角2角2比角1大20度角1
福建协发食品有限公司我想知道这个在什么地方
郑州哪里有卖新百伦鞋的?
刺客信条2 羽毛 雕像
移民巴西有多少方法
指纹门禁系统接线图请问一下假如停电了,那门
平安小吃我想知道这个在什么地方
若|a|=a,那么a______0
炒豇豆要怎么炒才好吃
智尕日村地址在什么地方,想过去办事
大口潮边炉山庄地址在什么地方,想过去办事
镇安县中小企业促进局这个地址在什么地方,我
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?