我们已经在 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的:
- function GetCN_()
- set GetCN_=createobject("adodb.connection")
- end function
3.GetRS_()
功能:获得一个ADODB的recordset对象
函数原型等价于VB的:
- function GetRS_()
- set GetRS_=createobject("adodb.recordset")
- end Function
功能:关闭并销毁对象o
函数原型等价于VB的:
- function Close_(o)
- on error resume next
- o.close()
- set o=nothing
- end Function
功能:在当前数据库执行sql语句s
返回执行是否有错误的错误信息的XML格式的字符串
函数原型等价于VB的:
- function ExecSQL_(s)
- dim cn
- on error resume next
- set cn=GetCN_()
- cn.open CNStr_
- cn.Execute s '核心功能
- ExecSQL_=ErrXML_(Err)
- Close_ cn
- end Function
功能:以XML格式字符串方式返回错误对象o的信息
参数o为Err对象
函数原型等价于VB的:
Function ErrXML_(o)ErrXML_ = "<Error><N>" & o.Number & "</N><D><![CDATA[" & o.Description & "]]></D></Error>"End Function
参数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的:
- Function GetSettingS_(s)
- GetSettingS_=GetOneVL_("select ShortSetting from mysetting where VName='" & s & "'",0)
- End Function
9.GetSettingL_(s)
功能:取得mysetting表里面VName字段等于s的对应记录的LongSetting字段的值
参数s为字符串
函数原型等价于VB的:
- Function GetSettingS_(s)
- GetSettingS_=GetOneVL_("select LongSetting from mysetting where VName='" & s & "'",0)
- End Function
10.GetAC_(s)
功能:根据科目代码s获得一个科目的全部属性信息
参数s为字符串,科目代码
函数返回的格式如下:
- <root>
- <title>科目完整名称如 银行存款?建设银行</title>
- <acstru>42222222(科目级别长度的结构)</acstru>
- <ac>
- <acid>科目代码</acid>
- <actitle>科目名称</actitle>
- <其他的字段名(小写)>其他的属性值</其他的字段名>
- </ac>
- <Error><N>errorno</N><D>err_description</D></Error>
- </root>
11.GetRX_(x)
功能:按指定的条件返回XML格式的记录
通过一个例子来说明这个函数:
- GetRX_("AC.acid='1001'='1002'='1009',Comment.id=1=2=3")
这个例子会返回AC表中acid=’1001’ 或者 acid=’1002’ 或者 acid=’1009’
- <root>
- <tablename1>
- <fileld1>fieldvalue</fileld1>
- <fileld2>fieldvalue</fileld2>
- <fileld3>fieldvalue</fileld3>
- ….
- </tablename1>
- <tablename2>
- <fileld1>fieldvalue</fileld1>
- <fileld2>fieldvalue</fileld2>
- <fileld3>fieldvalue</fileld3>
- ….
- </tablename2>
- <Error><N>errorno</N><D>err_description</D></Error>
- </root>
12.R2X_(rs,t)
功能:把ADO的记录集rs转换为XML结构的字符串输出,t是记录集或者表的名称tablename
参数rs为 adodb的recordset对象
返回的数据的XML格式
- <tablename>
- <r2x>
- <fileld1>fieldvalue</fileld1>
- <fileld2>fieldvalue</fileld2>
- <fileld3>fieldvalue</fileld3>
- ….
- </r2x>
- </tablename>
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为2009-01-01
如果当前数据库为ACCESS 则 D4SQL_ 结果为 #2009-01-01#
如果当前数据库为SQLSERVER 则 D4SQL_ 结果为 '2009-01-01'
例子: 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)调用之前
例如
- Function test()
- DoSomthingButHaveError
- call myfun
- Test=XML_(ErrXML_(err))
- End function
- Function myfun
- On error resume next
- Dosomthing
- End function
- '上述的代码你将得不到错误信息返回.你必须改成这样的顺序:
- Function test()
- DoSomthingButHaveError
- Test=XML_(ErrXML_(err))
- call myfun
- End function
- '原因是on error resum next过程会把前面的错误信息清零.
- '你也可以在你的函数里面添加这样的代码
- Function myfun
- if err.number<>0 then
- err.Raise err.number ,err.Source,err.Description
- end if
- On error resume next
- Dosomthing
- End function
编程人员应该着重掌握 ADO的Connection对象和Recordset对象的用法(常用属性和方法),还应该了解XML的基本结构和语法规范