知识大全 建立同SAS交互的开发式VB客户端

Posted

篇首语:精诚所加,金石为开。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 建立同SAS交互的开发式VB客户端相关的知识,希望对你有一定的参考价值。

建立同SAS交互的开发式VB客户端  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   简介  程序员常问哪一种语言能访问SAS 那就是用SAS的IT机制 它容许开发式客户访问SAS 程序员能用不同的语言快速的建立同SAS交互的强壮的应用 此文主要介绍大家如何用VB同SAS交互     读前需知  该文假设读者对VB//SAS知识有一定的了解  SAS IT的组件  SAS IT是一个中间件 是为用户提供访问SAS和呈现数据的接口 它包含下面功能   LDAP(轻量级目录访问协议)目录集成  LDAP是一个分布式存储数据的工业标准 程序员可以使用微软的ADSI(动态目录服务接口)访问LDAP目录 你可以把LDAP认为一个可以通过TCP/IP访问的数据库 通常 一个组织会有一个单一的LDAP 服务器 并被该组织的所有机器共享   发布/订阅  这种积极的信息传送机制能使你制造SAS输出(发布者)到那些对这些输出感兴趣的人(订阅者)  这种机制是由IOM(整合对象模型)接口 SAS语言调用语法和LDAP对象组成并协同工作的   消息队列  SAS可以把输出信息输出到消息队列 这样客户端没有必要等待SAS执行完成  关于消息队列的详细用法情参考:     IOM(综合对象模型)  IOM是一组对象的集合 其中大多数通常被VB使用  SAS IT比以前版本提供的OLE接口的优势  IT是以前OLE的延伸 下面比较一下三种主要的不同   IT提供了多层次的接口 而OLE只提供了单一的接口   IT是跨平台(SAS所能支持的平台 如:WIN/UNIX/OS等)的 VB应用能通过远端调用IT对象 而OLE只能运行于WIN平台   IT对象容许SAS 程序异步运行 而OLE不能  注 IT对象的根对象为 SAS workspace 其对应了OLE的 SAS application 对象  VB程序员的IT工具  包含IOM SAS workspace manager IOM数据提供者 IOM bridge for scripto  IOM  客户端可以通过多种连接方式连接到IOM 服务器 如CORBA/JDBC//OMG等 而没有必要附加代码到客户端  IOM是一个对象模型 因为它暴露了一组对象供用户使用  这些对象可以用来实现 个目标 提交代码给SAS和获得SAS的输出  在所以IOM对象中 数组被广泛的使用 所以所有请求是被同时返回的  所需注意的是 如果没有SAS IT产品的授权 IOM接口只能被本地使用 如过有授权 则可以通过网络访问远端的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)  例子 提交代码  有 种方式可以提交代码到SAS SERVER  方式 使用LanguageService  obSAS LanguageService Submit _   data a; do x= to ; y=x*x*x; & _   output;end;run;   MsgBox obSAS LanguageService FlushLog( )  方式 使用 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=   MsgBox obSAS LanguageService FlushLog( )    looper sas文件内容如下   %let loopTimes= ;  *ProcessBody;  data a;  do x= to &loopTimes;  y=x*x*x;  output;  end;  run;  例子 执行代码  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( )  End Sub  例子 获得输出  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\\ True)  obSAS LanguageService Submit filename fref TEMP; & ods body=fref; & proc corr data=sashelp class; & run; & ods close;   Set obFileref = obSAS FileService UseFileref( fref )  Set obTextStream = obFileref OpenTextStream (StreamOpenModeForReading )  sOdsOutput = obTextStream Read( )  While (Len(sOdsOutput) > )   Do something with the read text here  obFile Write sOdsOutput  sOdsOutput = obTextStream Read( )  Wend  WebBrowser Navigate c:\\temp\\   其实在单机环境中就没有必要这样做了 )    使用ResultPackageService也可获得输出 它可以通过Workspace Utilities ResultPackageService引用  你可以使用ResultPackageService提供的接口建立ResultPackage 当然也可以通过SAS语言的CALL语法  一个ResultPackage可以是任意的SAS输出 如文件 数据集 ODS输出 图片等  下面这个例子显示如何建立一个 ResultPackage  %macro CheckRC(rc);  if rc ne 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/ 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( )  Set obTextStream = obFileEntry Open (StreamOpenModeForReading )  sOdsOutput = obTextStream Read( )  While (Len(sOdsOutput) > )   Do something with the read text here  obFile Write sOdsOutput  sOdsOutput = obTextStream Read( )  Wend  WebBrowser Navigate c:\\temp\\   关于SAS Workspace Manager  它是一个完成下面功能的ACTIVEX控件   它同SAS建立连接 并返回工作空间   它提供 cha138/Article/program/net/201311/13888

相关参考

知识大全 VB.NET多线程开发实例

同Java一样简单!VB.NET多线程开发实例  以下文字资料是由(历史新知网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  VBNET

知识大全 Delphi下利用DDE实现同Word的交互

Delphi下利用DDE实现同Word的交互  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一引

知识大全 如何建立一个VB.NET日期/时间值

如何建立一个VB.NET日期/时间值  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  组合一个日期

保险产品开发经理的职业素描

工作内容:建立、完善与第三方资产业务相关的投资产品研发体系;研究、开发满足内部与外部客户需求的投资产品;组织、协调有关产品的推广、培训活动、和客户支持服务;负责团队建设和专业人才的培养。职业要求:教育

知识大全 使用VB.NET开发定制控件

使用VB.NET开发定制控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 正常情况下在开发NET

知识大全 VB.NET中的组件开发

VB.NET中的组件开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!简介组件其实是一段可以重用的

知识大全 使用VB.NET开发自定义Windows控件

使用VB.NET开发自定义Windows控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一前

知识大全 VB.NET分层开发的几点心得

VB.NET分层开发的几点心得  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  从这一章开始我们将

知识大全 VB.NET 中的组件开发源代码剖析

VB.NET中的组件开发源代码剖析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!         

知识大全 轻松从VB转向基于Swing的开发平台

轻松从VB转向基于Swing的开发平台  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!当Abacus