SC 内置函数和对象
(创建时间:2009年06月05日 19:40:00)
Jangogo : 

我们已经在 SC 里面内置了一些常用函数,您可以自己调用
注意:这些常量名称都以“下划线”结尾的

1. GetOneVL_(s,n) 

     功能:在当前数据库里面取一个值.   
     参数 s 是 sql语句 n 是bool类型的,意思是是否把结果转换成数字,   
     如果n=true, sql 执行的结果如果是字符串就转换为数字,如果是空串或者转换失败就返回0

    例子:s=GetOneVL_("select top 1 id from mytable",true)

2. GetCN_()
     功能:获得一个ADODB数据库连接对象
     函数原型等价于VB的:    

 
  1. function GetCN_()   
  2.     set GetCN_=createobject("adodb.connection")   
  3. end function  

3.GetRS_()
    功能:获得一个ADODB的recordset对象
    函数原型等价于VB的:

 
  1. function GetRS_()   
  2.    set GetRS_=createobject("adodb.recordset")   
  3. end Function  
4.Close_(o)
    功能:关闭并销毁对象o
    函数原型等价于VB的:
 
  1. function Close_(o)   
  2.     on error resume next   
  3.     o.close()   
  4.     set o=nothing   
  5. end Function  
5.ExecSQL_(s)
    功能:在当前数据库执行sql语句s
    返回执行是否有错误的错误信息的XML格式的字符串
    函数原型等价于VB的:
   
 
  1. function ExecSQL_(s)   
  2.    dim cn   
  3.    on error resume next   
  4.    set cn=GetCN_()   
  5.    cn.open CNStr_   
  6.    cn.Execute s   '核心功能   
  7.    ExecSQL_=ErrXML_(Err)   
  8.    Close_ cn   
  9. end Function  
6.ErrXML_(o)
   功能:以XML格式字符串方式返回错误对象o的信息
  参数o为Err对象
  函数原型等价于VB的:
		Function ErrXML_(o)ErrXML_ = "<Error><N>" & o.Number & "</N><D><![CDATA[" & o.Description & "]]></D></Error>"End Function
 
7.XML_(x)
   功能:把字符串x添加父节点和XML文档定义头,输出为完整的XML格式化文档字符串。
   参数x为字符串,要求符合XML格式
   函数原型等价于VB的:
			Function XML_(x)XML_ = "<?xml version=""1.0"" encoding=""" & E_ & """ ?><root>" & x & "</root>"End Function

8.GetSettingS_(s)
    功能:取得mysetting表里面VName字段等于s的对应记录的shortSetting字段的值
    参数s为字符串
    函数原型等价于VB的:

 
  1. Function GetSettingS_(s)   
  2.     GetSettingS_=GetOneVL_("select ShortSetting from mysetting where VName='" & s & "'",0)   
  3. End Function  

9.GetSettingL_(s)
    功能:取得mysetting表里面VName字段等于s的对应记录的LongSetting字段的值
    参数s为字符串
    函数原型等价于VB的:
 
  1. Function GetSettingS_(s)   
  2.     GetSettingS_=GetOneVL_("select LongSetting from mysetting where VName='" & s & "'",0)   
  3. End Function  

10.GetAC_(s)
      功能:根据科目代码s获得一个科目的全部属性信息
      参数s为字符串,科目代码
      函数返回的格式如下: 
 
          
 
  1. <root>  
  2.   <title>科目完整名称如 银行存款?建设银行</title>  
  3.   <acstru>42222222(科目级别长度的结构)</acstru>  
  4.   <ac>  
  5.       <acid>科目代码</acid>  
  6.       <actitle>科目名称</actitle>  
  7.       <其他的字段名(小写)>其他的属性值</其他的字段名>  
  8.   </ac>  
  9.   <Error><N>errorno</N><D>err_description</D></Error>  
  10. </root>  

11.GetRX_(x)
      功能:按指定的条件返回XML格式的记录
      通过一个例子来说明这个函数:

 
  1. GetRX_("AC.acid='1001'='1002'='1009',Comment.id=1=2=3")     


    这个例子会返回AC表中acid=’1001’ 或者 acid=’1002’ 或者 acid=’1009’

记录 和 Comment表中id=1 或者id=2 或者 id=3 的记录
返回的数据XML数据格式如下
 
  1. <root>  
  2.   <tablename1>  
  3.       <fileld1>fieldvalue</fileld1>  
  4.       <fileld2>fieldvalue</fileld2>  
  5. <fileld3>fieldvalue</fileld3>  
  6. ….   
  7.   </tablename1>  
  8.   <tablename2>  
  9.       <fileld1>fieldvalue</fileld1>  
  10.       <fileld2>fieldvalue</fileld2>  
  11. <fileld3>fieldvalue</fileld3>  
  12. ….   
  13.   </tablename2>  
  14.   <Error><N>errorno</N><D>err_description</D></Error>  
  15. </root>  
 
 

12.R2X_(rs,t)
      功能:把ADO的记录集rs转换为XML结构的字符串输出,t是记录集或者表的名称tablename
      参数rs为 adodb的recordset对象

       返回的数据的XML格式
   
 
  1. <tablename>  
  2.    <r2x>  
  3.         <fileld1>fieldvalue</fileld1>  
  4.         <fileld2>fieldvalue</fileld2>  
  5. <fileld3>fieldvalue</fileld3>  
  6. ….   
  7.    </r2x>  
  8. </tablename>  
 
        其中一个r2x节点表示rs中的一行记录

13.MyErr_(s)
     功能:返回一个自定义代码s的错误的XML格式字符串
     等价于VB代码的:     
		Function MyErr_(s)MyErr_ = "<Error><N>" & s & "</N><D>Unknown Error</D></Error>"End Function

14.D4SQL_(date)
    把date转换成SQL可以接受的方式,Access类型会自动加入#包含符号,SQLServer会自动添加单引号
    例如: 假设date为2009-01-01 
    如果当前数据库为ACCESS 则 D4SQL_ 结果为 #2009-01-01#
    如果当前数据库为SQLSERVER 则 D4SQL_ 结果为 '2009-01-01'
 
 
 
15.Round45( Number , Digits)
    真正的四舍五入
    特别提醒您注意 这个函数名是没有下划线结尾的
 
16. GetCNStrY_(Y)
取其他年份的数据库连接串
 
17.Log_(o, M , i)
        用于记录操作日志和Debug
        注意参数 o是 String 250个字符以内
         M是Memo长字符串,如果需要记录的内容比较多请用这个字段,否则请在这个参数填入空字符串
         I 是数字 一般用0或者1表示成功与否
        
        例子: Log_   “用户登录”, ”” ,1
        
        注意:这些信息会写入mylog表


18.DFF_(mydate)
     获得格式化后的日期字符串,在 SC编程环境中,因为数据类似会隐式转换,例如,我们在数据库中取出某个字段是日期型的:
     select mydate from mytable
     当你在SC使用这个日期类型(数据库或者日期函数)的时候,很多时候会被隐式转换为字符串类型,例如返回结果或者是用来构建SQL语句
     当用户的系统时间格式设置不对时,很容易出现问题。因此,该函数务必要使用于当你在SC取出的数据库字段为日期型时。
     测试方法:
     你可以把系统时间 设置为  yyyy-mm-dd 某些文字 hh:mm:ss
     msgbox "select * from testtable where mydatefieldvalue>'"  & now() & "'"
     这样你看到的SQL语句结果明细不对
     应该做成这样:
     msgbox "select * from testtable where mydatefieldvalue>'"  & DFF_(now()) & "'"


 

19. SB_    用到这个类的时候请务必告知Jangogo以升级主程序中要求的PAZU的版本

      注意:这个是个类,StringBuilder ,专门用于字符串的相加处理,源码:

 有两个方法:a(s) 即Append StringValue , s() 即 toString()   

		Class SB_ Dim z,r,i Private Sub Class_Initialize()  r = 50  i = 0  ReDim z(r) End Sub Public Sub a(ByVal ss)  If i > UBound(z) Then   ReDim Preserve z(UBound(z) + r)  End If  if isnull(ss) then   ss=""  end if  z(i) = ss  i = i + 1 End Sub Public Function s()   s = Join(z, "") End FunctionEnd Class

使用例程:

		Dim StartTime, EndTime,s,N,iN=3s="" ''用StringBuilder 来快速处理字符串StartTime = Timer dim o set o=new SB_For I = 1 To N   o.a "I love 4Fang"Next s= o.s()EndTime = Timer msgbox (EndTime - StartTime )*1000 ''使用&来连接字符串StartTime = Timer For I = 1 To N   s= s & "I love 4Fang"Next EndTime = Timer msgbox (EndTime - StartTime )*1000''速度提升10倍以上!!!

 

20. ST_(s) 这个函数用于不同数据库的Select Top 语句的兼容.

     如果你的 sql 语句里面包含了 select top n ..., 你必须把你的 语句用ST_函数处理一下, 如:

     sql="select Top 10 * from ac"

     sql=ST_(sql)  ' 这时如果数据库类型为MySQL 则 sql 变成 "select * from ac LIMIT 10"
     注意, 如果你的SQL语句里面有多个TOP关键字,你必须把SQL语句拆分成单独的只包含一个top 关键字的语句后再合并.

 


补充说明:
ErrXML_(Err)必须在其他函数(如果该函数包含on error resume next)调用之前
例如

 
  1. Function test()   
  2.      DoSomthingButHaveError   
  3.      call myfun   
  4.     Test=XML_(ErrXML_(err))   
  5. End function    
  6. Function myfun   
  7.   On error resume next   
  8.    Dosomthing   
  9. End function   
  10. '上述的代码你将得不到错误信息返回.你必须改成这样的顺序:   
  11. Function test()   
  12.   DoSomthingButHaveError   
  13.   Test=XML_(ErrXML_(err))   
  14.    call myfun   
  15. End function    
  16. '原因是on error resum next过程会把前面的错误信息清零.   
  17. '你也可以在你的函数里面添加这样的代码   
  18. Function myfun   
  19.   if err.number<>0 then   
  20.      err.Raise err.number ,err.Source,err.Description   
  21.   end if   
  22.   On error resume next   
  23.   Dosomthing   
  24. End function   


编程人员应该着重掌握 ADO的Connection对象和Recordset对象的用法(常用属性和方法),还应该了解XML的基本结构和语法规范

文档中心
可上传附件
选择
同时转发此条
回复
1楼
Jangogo: 
v2013.12.8 增加新函数:
GetAllVL_(sql)
功能:根据传入的sql语句生成  列vbtab 和  行chr10) 分隔格式的数据块
2楼
Jangogo: 
Z_("字符串") 返回字符串的拼音首字母

例如:
rs("s2")=left(Z_("银行存款"),100)