VC++(MFC)如何从对话框写数据到Excel
答案:3 悬赏:30 手机版
解决时间 2021-03-13 07:55
- 提问者网友:刺鸟
- 2021-03-12 08:45
网上好多例子都是用代码直接写入的,所以想问问各位高手如何通过ODBC从对话框中编辑数据然后存到Excel中。比如对话框中有姓名和学号两项,输入"张三"和“123”后能自动保存到Excel表格中。
最佳答案
- 五星知识达人网友:罪歌
- 2021-03-12 09:44
MFC里面连的数据库一般是access,一般不用excel。
用ADO或者ODBC直接连接access,很容易。
编程的话,也很简单。
用ADO或者ODBC直接连接access,很容易。
编程的话,也很简单。
全部回答
- 1楼网友:怀裏藏嬌
- 2021-03-12 12:14
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)
- 2楼网友:一袍清酒付
- 2021-03-12 10:38
不要用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客户端。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯