VC + Matlab + 数据库

本文主要是将编写一个VC控制台程序,调用执行Matlab里的函数,而Matlab的数据又来源于Oracle,处理完后再存入Oracle中。

这里举的例子是

1 2 ,3 4 点乘 5 6 ,7 8

其中第一个矩阵的数据来自于biao1的4列,第二个矩阵来自表2,处理后将结果插入到biao3

首在Oracle数据库建表:

CREATE TABLE biao1(id1 INT,id2 INT,id3 INT,id4 INT)
CREATE TABLE biao2(id1 INT,id2 INT,id3 INT,id4 INT)
CREATE TABLE biao3(id1 INT,id2 INT,id3 INT,id4 INT)

然后在Matlab(不要在Oracle的SQL Plus中插入,因为数据格式不一样,Matlab插入的是cell
格式如[1]而用SQL Plus插入的是1)中插入初始试验数据

conn=database('oracleconn','scott','tiger');
%先要建立Oracle的本地数据源,默认的用户名与密码如上,可以先在控制面板的ODBC数据源
%那边测试下连接
 
colname={'id1','id2','id3','id4'}
 
colname =
 
'id1' 'id2' 'id3' 'id4'
 
exdata={1,2,3,4}
 
exdata =
 
[1] [2] [3] [4]
 
insert(conn,'biao1',colname,exdata)
 
exdata={5,6,7,8}
 
exdata =
 
[5] [6] [7] [8]
 
insert(conn,'biao2',colname,exdata)

以下是vc代码:

#include "stdafx.h"
#include "engine.h"
#include
#include
using namespace std;
 
int main(int argc, char* argv[])
{
printf("Hello World!\n");
Engine *ep;
if (!(ep=engOpen(NULL)))
{
printf("Can't start Matlab engine!" );//测试是否启动Matlab引擎成功
exit(1);
}
 
//engEvalString函数用于发送命令让Matlab执行
engEvalString(ep,"conn=database('oracleconn','scott','tiger');");
 
engEvalString(ep,"curs1=exec(conn,'select id1,id2,id3,id4 from biao1')");
engEvalString(ep,"cur1=fetch(curs1)");
 
engEvalString(ep,"curs2=exec(conn,'select id1,id2,id3,id4 from biao2')");
engEvalString(ep,"cur2=fetch(curs2)");
 
engEvalString(ep,"value=[cur1.data{1},cur1.data{2};cur1.data{3},cur1.data{4}].*[cur2.data{1},cur2.data{2};cur2.data{3},cur2.data{4}]");
engEvalString(ep,"colname={'id1','id2','id3','id4'};");
engEvalString(ep,"exdata={value(1,1),value(1,2),value(2,1),value(2,2)};");
engEvalString(ep,"insert(conn,'biao3',colname,exdata)");
return 0;
}

顺便再提一下vc环境的配置:

1) 通过菜单工程/选项,打开设置属性页,进入Directories页面,在目录下拉列表框中选择
Include files,添加路径:”C:\matlab\extern\include”(假定matlab安装在C:\matlab目
录)。

2) 选择Library files,添加路径:C:\matlab\extern\lib\win32\microsoft\msvc60。

3) 通过菜单工程/设置,打开工程设置属性页,进入Link页面,在Object/library modules编辑
框中,添加文件名libmx.lib libmat.lib libeng.lib。

12 hours ago, this page was being read.


Subscribe to Comments