转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
建立同SAS交互的开发式VB客户端         ★★★★

建立同SAS交互的开发式VB客户端

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1576 更新时间:2009/4/23 15:41:30
简介
 程序员常问哪一种语言能访问SAS,那就是用SAS的IT机制,它容许开发式客户访问SAS,程序员能用不同的语言快速的建立同SAS交互的强壮的应用,此文主要介绍大家如何用VB同SAS交互
读前需知
 该文假设读者对VB/COM/SAS知识有一定的了解
SAS IT的组件
 SAS IT是一个中间件,是为用户提供访问SAS和呈现数据的接口,它包含下面功能
 1、LDAP(轻量级目录访问协议)目录集成 
  LDAP是一个分布式存储数据的工业标准,程序员可以使用微软的ADSI(动态目录服务接口)访问LDAP目录,你可以把LDAP认为一个可以通过TCP/IP访问的数据库,通常,一个组织会有一个单一的LDAP 服务器,并被该组织的所有机器共享
 2、发布/订阅
  这种积极的信息传送机制能使你制造SAS输出(发布者)到那些对这些输出感兴趣的人(订阅者) 
  这种机制是由IOM(整合对象模型)接口、SAS语言调用语法和LDAP对象组成并协同工作的
 3、消息队列
  SAS可以把输出信息输出到消息队列,这样客户端没有必要等待SAS执行完成
  关于消息队列的详细用法情参考:
   http://www.sas.com/rnd/itech/doc/messageq/index.htm  
 4、IOM(综合对象模型)  
  IOM是一组COM对象的集合,其中大多数通常被VB使用
SAS IT比以前版本提供的OLE接口的优势
 IT是以前OLE的延伸,下面比较一下三种主要的不同
  1、IT提供了多层次的接口,而OLE只提供了单一的接口
  2、IT是跨平台(SAS所能支持的平台,如:WIN/UNIX/OS等)的,VB应用能通过远端调用IT对象,而OLE只能运行于WIN平台
  3、IT对象容许SAS 程序异步运行,而OLE不能
  注:IT对象的根对象为“SAS.workspace” ,其对应了OLE的 “SAS.application”对象
VB程序员的IT工具
 包含IOM、SAS workspace manager、IOM数据提供者、IOM bridge for COM、scripto
IOM
 客户端可以通过多种连接方式连接到IOM 服务器,如CORBA/JDBC/COM/OMG等,而没有必要附加代码到客户端
 IOM是一个对象模型,因为它暴露了一组对象供用户使用
 这些对象可以用来实现2个目标:提交代码给SAS和获得SAS的输出
 在所以IOM对象中,数组被广泛的使用,所以所有请求是被同时返回的
 所需注意的是:如果没有SAS IT产品的授权,IOM接口只能被本地COM使用,如过有授权,则可以通过网络访问远端的IOM接口
 IOM对象层次上的根对象是workspace,每个这样的对象都有它自己的WORK库
 workspace对象提供了下面可用的对象
  dataservice对象:返回一个操作SAS库的接口,它同时也提供了一个读写SAS数据的接口,但VB程序员不能直接使用,只能通过SAS 数据提供者间接调用
  fileservice对象:返回一个读写SAS服务器文件和文件引用的接口
  getapplication对象:返回一个有SAS/AF建立的自定义接口
  languageservice 对象:返回一个提交SAS代码并获得输出的接口
IOM使用例子
 假设下面代码已经被执行
  Dim obWsMgr As New _
  SASWorkspaceManager.WorkspaceManager
  Dim obSAS As SAS.Workspace
  Dim xmlInfo As String
  '''' This creates a SAS Server running on the
  '''' local machine
  Set obSAS = obWsMgr.Workspaces.CreateWorkspaceByServer ("", VisibilityNone, nothing, "", "", xmlInfo)
 例子1:提交代码
  有2种方式可以提交代码到SAS SERVER
   方式1:使用LanguageService
    obSAS.LanguageService.Submit _
    "data a; do x= 1 to 10; y=x*x*x;" & _
    "output;end;run;"
    MsgBox obSAS.LanguageService.FlushLog(100000)   
   方式2:使用 StoredProcessService
    这种方式请求SAS文件存放在已知的目录中,且能过通过宏的方式传参数给文件,而在SAS文件中要想接收参数信息,需使用这样的语法: 
    *ProcessBody;
    它会自动把传入的参数转换为宏
    
    如有多个参数,在传入的时候用【空格】分隔
    例如:
     '''' Run the SAS program at c:\temp\looper.SAS
     Dim obStoredProcessService As _
     SAS.StoredProcessService
     Set obStoredProcessService = _
     obSAS.LanguageService.StoredProcessService
     obStoredProcessService.Repository = _
     "file:c:\temp"
     obStoredProcessService.Execute "looper", _
     "loopTimes=10"
     MsgBox obSAS.LanguageService.FlushLog(100000)    
  
    looper.sas文件内容如下:
     %let loopTimes=3;
     *ProcessBody;
     data a;
     do x= 1 to &loopTimes;
     y=x*x*x;
     output;
     end;
     run;
 例子2:执行代码 
  Async属性:如果为false,则为同步执行,否,为异步执行,可以通过事件获得是否已成功执行完成
  如下定义一个错误发生事件:
   Public WithEvents obSASLanguage As _ SAS.LanguageService
   '''' To enable events, you must associate the
   '''' obSASLanguage
   '''' interface with the same LanguageService
   '''' interface used to make calls.
   Set obLanguage = obSAS.LanguageService
   obLanguage.Submit "this is an error;run;"
   Private Sub obLanguage_StepError()
   '''' An error has occurred. Dump the log
   Debug.Print obLanguage.FlushLog(100000)
   End Sub
 例子3:获得输出
  SAS会输出多种类型的信息供用户使用,如下
   IOM Data Provider 能够提供二进制数据访问给用户
   LanguageService的FlushList FlushListLines方法可以获得SAS的窗口输出
   如果想获得ODS输出,可以通过文件引用的方式,SAS提供的FileService提供这样的服务
   下面演示如何通用FileService方式获得输出
   Dim obFileref As SAS.Fileref
   Dim obTextStream As SAS.TextStream
   Dim obFileSystem As New Scripting.FileSystemObject
   Dim obFile As Scripting.TextStream
   Set obFile = obFileSystem.CreateTextFile ("c:\temp\sasOutput.htm", True)
   obSAS.LanguageService.Submit "filename fref TEMP;" & "ods html body=fref;" & "proc corr data=sashelp.class;" & "run;" & "ods html close;"
   Set obFileref =  obSAS.FileService.UseFileref("fref")
   Set obTextStream = obFileref.OpenTextStream (StreamOpenModeForReading, 10000)
   sOdsOutput = obTextStream.Read(100000)
   While (Len(sOdsOutput) > 0)
   '''' Do something with the read text here
   obFile.Write sOdsOutput
   sOdsOutput = obTextStream.Read(100000)
   Wend
   WebBrowser1.Navigate "c:\temp\sasOutput.htm"   
   其实在单机环境中就没有必要这样做了 :)
   
  使用ResultPackageService也可获得输出,它可以通过Workspace.Utilities.ResultPackageService引用
  你可以使用ResultPackageService提供的接口建立ResultPackage,当然也可以通过SAS语言的CALL语法
  一个ResultPackage可以是任意的SAS输出,如文件,数据集,ODS输出、图片等
  下面这个例子显示如何建立一个 ResultPackage
   %macro CheckRC(rc);
   if rc ne 0 then do;
   msg = sysmsg();
   put msg;
   ABORT;
   end;
   %mend;
   data _null_;
   call PACKAGE_BEGIN(pid, desc, nameval, rc);
   %CheckRC(rc);
   call INSERT_FILE(pid, ''''FILEREF:fref'''',
   "TEXT", "text/html", "Some ODS Output",
   '''''''', rc);
   %CheckRC(rc);
   /* Nothing in the package actually gets
   * written out until we call publish.
   * So, if you modify any filerefs after
   * calling insert but before calling
   * this, then you will get the
   * modified fileref.*/
   call PACKAGE_PUBLISH(pid, "TO_ARCHIVE", rc,
   "archive_path, archive_name", "c:\temp",
   "archive");
   %CheckRC(rc);
   /* You could call PACKAGE_PUBLISH as many
   * times as you want for any given package,
   * as long as you
   * do so before calling PACKAGE_END. */
   call PACKAGE_END(pid, rc);
   %CheckRC(rc);
   run;    
  下面显示如何读这个  ResultPackage
   Dim props() As String
   Dim obResultPackage As SAS.ResultPackage
   Dim obFileEntry As SAS.ResultPackageFileEntry
   Dim obRPS as SAS.ResultPackageService
   Set obRPS = obSAS.Utilities.ResultPackageService
   Set obResultPackage = obRPS.BrowseResultPackage( "ARCHIVE", "c:\temp\archive.spk", props)
   Set obFileEntry = obResultPackage.GetEntry(0)
   Set obTextStream = obFileEntry.Open (StreamOpenModeForReading, 100000)
   sOdsOutput = obTextStream.Read(100000)
   While (Len(sOdsOutput) > 0)
   '''' Do something with the read text here
   obFile.Write sOdsOutput
   sOdsOutput = obTextStream.Read(100000)
   Wend
   WebBrowser1.Navigate "c:\temp\sasOutput.htm" 
关于SAS Workspace Manager 
 它是一个完成下面功能的ACTIVEX控件
  1、它同SAS建立连接,并返回工作空间
  2、它提供了一个池保证每个工作空间在WEB环境中是安全的
  3、自动保持同SAS的连接
 你可以使用以下2种方式建立同SAS的连接
  非被管理模式(所有连接信息保留在客户端)
  被管理模式 (所以连接信息保留在文件或者LDAP中)
 这些连接信息包含 连接到哪台机器、用什么协议、使用什么端口或者服务名字、用户名、用户ID等,同时DCOM或者IOM支持加密的SESSION
 例子1:建立连接,非被管理模式
  Dim obWSMgr As New _
  SASWorkspaceManager.WorkspaceManager
  Dim obSAS As SAS.Workspace
  Dim xmlInfo As String
  Dim obServer As New _
  SASWorkspaceManager.ServerDef
  obServer.MachineDNSName = "remote.sas.com"
  Set obSAS = _
  obWSMgr.Workspaces.CreateWorkspaceByServer _
  ("", VisibilityNone, obServer, "", "", _
  xmlInfo)
  xmlInfo参数返回服务器实际上使用的值
关于IOM Data Provider  
 IOM Data Provider是一个使用IOM DataServ

[1] [2]  下一页


[C语言系列]Socket 编程,一个服务器,多个客户端,互相通信  [常用软件]微软最新VoIP服务器及客户端软件下周开测
[常用软件]uTorrent:史上最省资源BT客户端试用  [常用软件]越看越流畅三款主流网络电视客户端导购
[常用软件]Allpeers:让Firefox摇身一变为P2P客户端  [常用软件]编译给自己专用的FTP客户端
[常用软件][网络]FTPRush FTP客户端 软件评测  [VB.NET程序]WinVista新技术 WCF开发指南之客户端开发
[VB.NET程序]用VB实现一个简单的ESMTP客户端  [Web开发]利用JS获取IE客户端IP及MAC的实现
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台