工控编程吧
标题:
304上位机VC MFC使用ODBC创建与读取EXCEL表格文件
[打印本页]
作者:
qq263946146
时间:
2016-9-24 16:00
标题:
304上位机VC MFC使用ODBC创建与读取EXCEL表格文件
(, 下载次数: 3)
上传
点击文件名下载附件
ODBC创建读取EXCEL文件
功能展示
EXCEL是很常用的办公软件,可以创建表格文件,那么我们的数据库文件如何与之相连呢?我们当前例程演示实现这一功能,即使用ODBC创建EXCEL文件(后缀为XLS),与读取EXCEL文件,效果如图,点击<创建EXCEL文件>例程会用ODBC在指定的目录创建XLS文件并显示出文件创建的路径,点击<读取创建EXCEL文件>会将保存的XLS文件读取并显示在列表控件上;
要点提示
EXCEL文件的创建可以用Cdatabase的相关函数实现,OpenEx可以创建Excel表格文件,使用ExecuteSQL执行相关SQL语句可实现相关功能,如“CREATE TABLE 表格名(字段名 字段类型,字段名 字段类型,字段名 字段类型”
可以插入表字段;
如“INSERT INTO MyExcel (网站名称,网站地址,站长微信) VALUES (‘工控编程吧’,‘gkbc8.com’,‘263946146’)”可向插入具体数据
实现功能
1.新建基于对话框的应用程序
2.按照例程界面添加一编辑框IDC_EDIT1,列表控件IDC_LIST1,两按钮控件<创建EXCEL文件><读取创建EXCEL文件>关联按钮点击函数
#include <afxdb.h>
void CGkbc8Dlg::OnCreatexcell()
{
CFileDialog Dlg(FALSE,".xls","工控编程吧",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"XLS文件(.XLS)|*.XLS|全部文件(*.*)|*.*||");
if(IDOK==Dlg.DoModal())
{
CDatabase DB;
CString StrExcelFile = Dlg.GetPathName();
CString StrDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; //Excel驱动
CString StrSQL;
StrSQL.Format("DRIVER={%s};DSN='';FIRSTROWHASNameS=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",StrDriver,StrExcelFile,StrExcelFile);
TRY
{
if(DB.OpenEx(StrSQL,CDatabase::noOdbcDialog) )// 创建Excel表格文件
{
//创建表结构 字段名不能是Index
StrSQL = "CREATE TABLE MyExcel (网站名称 TEXT,网站地址 TEXT,站长微信 TEXT)";
DB.ExecuteSQL(StrSQL);
//插入数值
StrSQL = "INSERT INTO MyExcel (网站名称,网站地址,站长微信) VALUES ('工控编程吧','gkbc8.com','263946146')";
DB.ExecuteSQL(StrSQL);
StrSQL = "INSERT INTO MyExcel (网站名称,网站地址,站长微信) VALUES ('百度','baidu.com','3838438')";
DB.ExecuteSQL(StrSQL);
StrSQL = "INSERT INTO MyExcel (网站名称,网站地址,站长微信) VALUES ('新浪','xinlan.com','1314530')";
DB.ExecuteSQL(StrSQL);
}
DB.Close();// 关闭数据库
}
CATCH_ALL(e)
{
TRACE1("没有安装Excel驱动: %s",StrDriver);
}
END_CATCH_ALL;
MessageBox("Excel文件创建成功!","信息提示",MB_OK);
SetDlgItemText(IDC_EDIT1,Dlg.GetPathName() );
}
}
void CGkbc8Dlg::OnRead()
{
CString StrFile;
GetDlgItemText(IDC_EDIT1,StrFile);
if(StrFile.IsEmpty())
return;
CDatabase DB;
CString StrSQL;
CString StrDsn;
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);
pListCtrl->DeleteAllItems();
StrDsn.Format("ODBC;DRIVER={MICROSOFT EXCEL DRIVER (*.XLS)};DSN='';DBQ=%s",StrFile);
TRY
{
DB.Open(NULL, false, false, StrDsn);// 打开Excel文件)
CRecordset DBSet(&DB);
StrSQL = "SELECT * FROM MyExcel";// 设置读取的查询语句
DBSet.Open(CRecordset::forwardOnly, StrSQL, CRecordset::readOnly);//执行查询语句
int nIndex=0;
while (!DBSet.IsEOF())// 获取查询结果
{
pListCtrl->InsertItem(nIndex,"工控编程吧");
CString Str;
for(int i=0;i<DBSet.GetODBCFieldCount();i++)//读取Excel内部数值
{
DBSet.GetFieldValue(i, Str);
pListCtrl->SetItemText(nIndex,i,Str);
}
DBSet.MoveNext();
}
DB.Close();// 关闭数据库
}
CATCH(CDBException, e)
{
AfxMessageBox("数据库错误: " + e->m_strError);
}
END_CATCH;
}
3.程序初始化时,设置列表控件的属性等
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);
pListCtrl->ModifyStyle(0,LVS_REPORT);
pListCtrl->InsertColumn(0,"网站名称",LVCFMT_LEFT,80);
pListCtrl->InsertColumn(1,"网站地址",LVCFMT_LEFT,80);
pListCtrl->InsertColumn(2,"站长微信",LVCFMT_LEFT,80);
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/12e357cf8b5207530b52f3166dbff828/0/0/w_19rsu6gcht.swf-albumId=6391678509-tvId=6391678509-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件 [weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4