加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab关于ODBC数据源配置

(2014-04-13 16:16:09)
标签:

数据库

数据源

odbc

分类: Matlab编程
   最近在做matlab和数据库的混合编程,看到中文论坛上有版主发出的自动配置数据源的代码觉得很有意思,于是研究了一下,发现实际上ODBC在windows系统上开放的配置接口有很多(XP貌似不可行,未测),版主的例子使用的是修改注册表文件的方式自动注册,这里贴上其代码,供大家参考:

function f=LinkDB(DB_path,DB_sourcename,Index)
%本函数是用来自动配置数据库源文件。该函数仅适用于配置Access数据源。
%调用格式
%linkDB(DB_path,DB_sourcename,1)
DB_sourcename='godman'
DB_path='D:\Program Files\MATLAB71\work\demo.mdb'
%函数运行后将产生文件regedit_DB.reg
%Index=1时要删除regedit_DB.reg,Index=0时不删除regedit_DB.reg
%Godman 2009.4.3 tntuyh@163.com
TempStr1=StrSpliteToCell(DB_path,'\');
TempStr2=CellStrJoinWithSeparator(TempStr1,'\\\\');
DB_path=TempStr2.ans;
�d sourcename
fid=fopen('regedit_DB.reg','wt');
String='Windows Registry Editor Version 5.00\n\n';
fprintf(fid,String);
String='[HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\ODBC Data Sources]\n';
fprintf(fid,String);
String=strcat(['"' DB_sourcename '"'],'="Microsoft Access Driver (*.mdb)"\n\n');
fprintf(fid,String);
�d filepath
String=['[HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\',DB_sourcename,']\n'];
fprintf(fid,String);
String='"Driver"="C:\\\\WINDOWS\\\\system32\\\\odbcjt32.dll"\n';
fprintf(fid,String);
String=['"DBQ"="',DB_path,'"\n'];
fprintf(fid,String);
String='"DriverId"=dword:00000019\n';
fprintf(fid,String);
String='"FIL"="MS Access;"\n';
fprintf(fid,String);
String='"SafeTransactions"=dword:00000000\n';
fprintf(fid,String);
String='"UID"=""\n\n';
fprintf(fid,String);
�d jet
String=['[HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\',DB_sourcename,'\\Engines]\n\n'];
fprintf(fid,String);
String=['[HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\',DB_sourcename,'\\Engines\\Jet]\n'];
fprintf(fid,String);
String='"ImplicitCommitSync"=""\n';
fprintf(fid,String);
String='"MaxBufferSize"=dword:00000800\n';
fprintf(fid,String);
String='"PageTimeout"=dword:00000005\n';
fprintf(fid,String);
String='"Threads"=dword:00000003\n';
fprintf(fid,String);
String='"UserCommitSync"="Yes"\n';
fprintf(fid,String);
%
fclose(fid);
%打开regedit_DB.reg文件,将链接信息导入到注册表中
dos('regedit_DB.reg');
if Index==1
    delete('regedit_DB.reg');
end


function f=StrSpliteToCell(Str1,Str2)
�taPath ='D:\Program Files\MATLAB71\work\data.txt'
%Str='\'
%StrSpliteToCell(DataPath, Str)
%ans = 
% 'D:'    'Program Files'    'MATLAB71'    'work'    'data.txt'
Len1=length(Str1);
Len2=length(Str2);
Temp=strfind(Str1,Str2);
Temp=[1-Len2 Temp Len1+1];
CellLen=length(Temp)-1;
TempCell=cell(1,CellLen);
for i=1:CellLen
    TempCell(i)={Str1(Temp(i)+Len2:Temp(i+1)-1)};
end
f=TempCell;


function f=CellStrJoinWithSeparator(Array,varargin)
%本函数是用来把元胞格式转换为字符串格式
%str={'Godman','come','back!'};
�llStrJoinWithSeparator(str,' ')
%ans = 
%    Message: ''
%     ErrNum: 0
%        ans: 'Godman come back!'
f.Message='';
f.ErrNum=0;
f.ans='';
if isempty(varargin)
    Str=' ';
else
    Str=varargin{1};
end
if isempty(Array)
    f.Message='第一个参数不能为空!';
elseif ~iscellstr(Array)
    f.Message='第一个参数必须是cellstr数据类型!';
elseif ~ischar(Str)
    f.Message='第二个参数必须是str数据类型!';
end
if isempty(Str)
    Str=' ';
end
if f.Message
    f.ErrNum=1;
    f.ans='';
    return
end
len=length(Array);
temp=cell2mat(Array(1));
for i=2:len
    temp=strcat(temp,[Str,cell2mat(Array(i))]);
end
f.ErrNum=0;
f.ans=temp;

    然后博主来说说自己的想法,其实MSDN上有放出SQL数据库的配置函数SQLConfigDSN和ConfigDSN,而这些是可以在DOS命令下使用odbcconf命令自行创建的,详细信息大家可以看看MSDN上的说明或者在运行"odbcconf /?"有一部分帮助说明。
    于是乎使用matlab中的dos()函数就可以实现自动配置数据源和相关的设置,不需要输出一个注册表文件那么麻烦,而且不需要上面附加的格式改变子函数,直接调用输入的路径和DSN字符就可以配置成功。或许有些童鞋觉得ODBC已经过时了,但是作为一个兼容各种数据库的接口我觉得用起来仍然可以满足我的基本要求。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有