WHOOL! fantastic world 工作,学习,生活

31Jan/100

vba是个好东西

今天忙乎了一天,其实就两个小问题,哎,很多时候一个标点一个类型就会害死人啊
1.为什么要用matlab对数据库处理,不能直接用vba进行莫,感觉上好像是要快一些,不过没有用vba试过。用matlab就要用编译器,最近一段时间都没有编译成功的,还是换成vba直接做吧,是在不行用vc也好啊
编译一直到下午3点还没有成功,晚上说了一大堆的,可是好像都没有什么用,环境变量,编译器啥的,倒腾了很久都搞不定,最后还是不得不用vba直接实现了。
2尝试用vba传数吧,忙乎了一个上午,最后还是回到原来的办法。
不过没有什么进展,都不找自己在想什么。
vba是个好东西,最开始的时候通过matlab倒数,10000个数用来17秒,vba只用了5秒,而且不用编译了,恩,不错,信号搞定了,要不饭都不想吃了,话说今天很冷的说
3数据库的东西还是要看看的,很多东西都是常识性的东西,可是没有看过没有试过就不知道。
4  ado接口,这东西还是专门琢磨下的好,很多时候能用得上的。
继续的干活。
Tags: ,
Filed under: Excel, MatLab No Comments
31Jan/100

VBA ADO常用方法

没想到我现在的工作VBA联系得这么紧密,其实比起delphi,VBA应该算小菜啦,基本上现阶段的工作就是VBA连数据库进行操作了,以后会是
C#,delphi连数据库基本上是采用ado,很方便,VBA当然也用这种方法会很自由,以下是VBA用ado连数据库的方法(ZZ):
准备工作
========
Dim conn As New ADODB.Connection ‘创建一个 Connection
实例,在这里使用New等于将Dim和Set合并为一段代码执行
Dim rs As ADODB.Recordset ‘创建一个 Recordset 实例,不使用New
是因为,经常需要重复使用Set,因此没必要在这里使用
Dim CnStr As String, Sql As String
‘创建两个字符串变量分别存放两个集合的SQL语句代码段
1、装载数据库(不属于Recordset集合)
=============
Dim FileNamw$, DbIp$, DbName$, DbUser$, DbPw$
‘以上5个字符串变量分别表示文件路径和文件名、数据库地址、数据库名、数据操作员用户名、操作员密码
FileName = App.Path & "’数据库名’"
DbIp = "数据库地址"
DbName = "数据库名"
DbUser = "数据操作员用户名"
DbPw = "操作员密码"
‘以上变量根据数据库类型的不同而不同,有可能只需要1至两个变量
‘1)连接Access数据库:
‘——————-
CnStr = "PROVIDER=microsoft.jet.oledb.3.51;persist security
info =false;data source=" & FileName
& ";Jet OLEDB:Database Password="
& DbPw
‘2)连接Oracle数据库:
‘——————-
CnStr = "PROVIDER=MSDAORA.1;Password=" & DbPw
& ";User ID=" & DbUser
& ";Data Source=" & FileName
& ";Persist Security Info=True"
‘其中:
‘PASSword: 密码
‘User ID: 用户号
‘Data Source: 数据库名
‘Persist Security Info:
‘Provider:
Tags: , , ,
Filed under: Excel Continue reading
30Jan/100

matlab程序转换和在excel VBA中的调用。

金融行业中VBA有着几乎最广泛的运用,但是很多人苦于VBA很难找到如同matlab强大的数学运算工具库,而在某些问题的处理上会大费周章。我最近就遇到类似的问题。用matlab写了一个庞大的程序后,交到别人手里的时候需要转成VBA。而如果用手写的转换matlab的话,此项工程不下于用VB编写matlab……于是开始了matlab往VBA的调用转换过程。经过差不多有4个小时的时间,终于完成了摸索,调试,学习,完美实现的过程。因为网上能查找到的资料写得都异常混乱,我觉得很多人写的基本没有啥强的逻辑关系,估计那些人语文统统没学好。。。我把我自己做的过程简化如下,有兴趣的朋友们可以参照
首先打开matlab(我的版本matlab 2006b, version7.3),在命令窗口输入指令:
mbuild -setup
出现选择:
Please choose your compiler for building standalone MATLAB
applications:

Would you like mbuild to locate installed compilers [y]/n?

接着选择No
然后出现选择项:
Select a compiler:

[1] Borland C++Builder version 6.0

[2] Borland C++Builder version 5.0

[3] Borland C/C++ (free command line tools) version 5.5

[4] Lcc C version 2.4.1

[5] Microsoft Visual C/C++ version 8.0

[6] Microsoft Visual C/C++ version 7.1

[7] Microsoft Visual C/C++ version 6.0

[0] None

我们是要转换为excel可以调用的compiler,所以5,6,7都可。我自己的电脑装有VC++6.0,所以我选择的7
接下来就是让你输入你安装的vc++6.0的路径并确认。
做好这一步之后,就可以在命令窗口输入指令:deploytool
然后matlab右边会弹出一个操作窗口,然后新建一个项目和路径,记得选择成builder for excel。
然后在项目里面添加你要转换的所有你自己编写的matlab函数。(必须是matlab的函数,所以必须以function开头)
然后点击"build the project"的小图标,等着转换完成。
这一步做完后,就可以关闭matlab了。把你之前设立新项目的文件夹下多出的“distrie”和“src"两个文件夹拷贝到你要使用这些自定义函数的excel文件所在地方。然后打开excel,再打开excel的vba编辑器(Alt+F11),在编辑器里面点”文件—导入文件“导入刚才拷贝过来的”src“文件夹下后缀名.bas的文件。现在,就可以在excel里面轻松使用你自定义的函数了。调用的函数名称和你写的matlab函数名一样,所以非常简便。
如果函数返回值是一个矩阵,比如A=Personal(),返回的A会是3*3矩阵,那么就拖蓝一片3*3区域,输入"=Personal()”,然后点击"ctrl+shift+Enter",这样出来的结果,就是你matlab自定义函数"Personal()"应该返回的矩阵了。
用matlab调用VC++自带的转换器的好处是,在转换时,只需要添加进去你自己写的自定义函数,而自定义函数里面所使用的大量的matlab特有的计算函数是不用再特别找出来添加进去的。这是compiler会帮你干的事情
ps:本来上面写的一些我很快自己就摸索出来了,但是使用的时候忽略了一个小错误,而这个错误是换一台电脑就绝对不会出的错误,结果这种错误找起来,足足找了我2,3个小时。因为调用matlab函数后很不好调试,所以查错是一项超级艰难的过程,特别是matlab运行正常,vba里面运行却出问题的时候。结果原因是matlab里面xlsread这个函数读取excel数据的默认目录和vba调用matlab程序时读取那个excel文件的默认目录完全不一样造成的(matlab是读取当前程序所在的目录下的文件,而VBA是读取“我的文档”下的文件……)。而巧的是在vba的默认目录里面恰好存在了一个同名的excel文件。本来如果这个文件不存在,我在vba里面一运行,报错就会告诉我在某某路径找不到excel文件,我很快就能fix这个问题,而巧合的那个文件恰好造成vba不会报找不到文件,而只告诉我有逻辑错误,也不说是什么逻辑错误。。。。当我最终发现这个错误的时候,差点把血都吐光了
嗯,最后是无奈的吐槽,总之这次又把vba学了不少东西,收获不小,希翼此小文对偶然看到这篇文章的人小有帮助
Tags: ,
Filed under: Excel, MatLab No Comments
30Jan/100

matlab@excel

matlab 和excel的连接办法
我知道的有fetch和xlsread,查了下,还有用DAO的,不过没有用过,而且excel好像没有DAO接口吧。
简单的是建立一个数据库连接,然后用fetch,好处是容易管理吧。你知道数据源,知道取了什么东西
一、通过MATLAB 提供的数据库引擎, 以下是MATLAB ,DATABASE TOOLBOX中的例子,

通过ODBC/JDBC 接口访问具体的数据库

function dbimportdemo()

timeoutA=logintimeout(5)

%打开数据源 SampleDB

connA=database(‘SampleDB’,”,”)

% Check the database status.

ping(connA)

% Open cursor and execute SQL statement.

%执行SQL查询语句

cursorA=exec(connA,’select country from customers’);

% Fetch the first 10 rows of data.

%获取前十行数据

cursorA=fetch(cursorA,10)

%显示

AA=cursorA.Data

%关闭

close(cursorA)

close(connA)

Tags: ,
Filed under: Excel, MatLab Continue reading
25Jan/100

碎碎念

前些日子被问是不是有想起来嘴角微笑的人,想了下,发现没有,悲哀。
做人挺失败的
No tags for this post.
Filed under: 碎碎念 No Comments
Page 1 of 3123