在外币币表维护中我们以显示数据和修改数据为例来说明sc代码中经常要用到的函数:
1, 显示数据:
在窗体加载的时候我们要调用一个方法来加载数据:
- //页面加载时
- function init(){
- var sTxt=Pazu.fly("getFCurList()");
- var xD=Sheeta.readXML(sTxt);
- creatTable(xD);
- }
这是查询数据库的sc后台代码:
- '取外币表所有记录的方法
- function getFCurList()
- on error resume next
- dim cn,rs,s
- '获得数据联接和记录集
- set cn=GetCN_()
- set rs=GetRS_()
- cn.open CNStr_
- rs.open "select fcur,exrate from fcur where fcur<>'' ", cn
- s=R2X_( rs,"FCUR" )
- getFCurList=XML_( s & ErrXML_( err ) )
- close_ rs
- end function
在以上方法中GetCN_(),GetRS_()是已经定义好的,获得数据连接和记录集的函数,我们可以直接使用, R2X_()这个函数是将查询出的记录集解析成xml字符串,XML_()函数则是将xml字符串,封装成xml对象, 关于这几个方法的具体参数和用法请参看www.4fang.net/article/2009/6/5/95159_1.html
这个方法调用后,返回到前台的数据如下所示:
- <?xml version="1.0" encoding="utf-8" ?>
- <root>
- <FCUR>
- <r2x><fcur><![CDATA[美元]]></fcur><exrate><![CDATA[0.8]]></exrate></r2x>
- <r2x><fcur><![CDATA[欧元]]></fcur><exrate><![CDATA[0.5]]></exrate></r2x>
- <r2x><fcur><![CDATA[ 朝鲜人民币]]></fcur><exrate><![CDATA[50]]></exrate></r2x>
- </FCUR>
- <Error><N>0</N><D><![CDATA[]]></D></Error>
- </root>
<root></root> 节点是根节点
<Fcur></fcur>是数据节点,里面包含的表中的数据,就是R2X_( rs,"FCUR" )函数中"FCUR"参数,
<r2x></r2x>节点代表的是表中一行数据,其中的各个子节点就是表中的字段名,节点中的文本就是字段的值
<Error></Error>节点是显示错误的节点,<N></N>是错误号,<D></D>是错误的信息,如果没有错误就如上所示<N></N>节点中的文本是0,<D></D>节点中的文本是空
当这串字符串返回到前台页面之后,我们需要调用Sheeta.readXML(),方法,将字符串解析成xml对象,这样就可以解析xml对象来获得数据,sheeta.readXML()方法不仅能将xml字符串转成xml对象,同时还能返回操作的结果,我们将在下面的步骤里具体说到.
2,修改数据
- 'fcur为未修改的币名,newfcur为修改后的币名,exrate为修改后的汇率
- function updatesave(fcur,newfcur,exrate)
- on error resume next
- dim sql
- '修改的方法
- sql = "update fcur set Fcur = ' " & newfcur & "', ExRate = '" & exrate & "' where Fcur = '" & fcur & "';"
- updatesave = XML_(ExecSQL_(sql))
- end function
在这个方法中,前台将fcur原来的币名,newfcur修改后的币名,exrate修改后汇率传了过来,然后调用ExecSQL_()方法, 执行修改的操作,再调用XML_函数将操作结果封装成xml,这里要注意的是sc代码中往前台传的数据都要使用XML()函数封装起来;
这个方法正确执行返回的数据如下:
- <?xml version="1.0" encoding="utf-8" ?>
- <root>
- <Error><N>0</N><D><![CDATA[]]></D></Error>
- </root>
当有异常时数据如下:
- <?xml version="1.0" encoding="utf-8" ?>
- <root>
- <Error><N>-2147217900</N><D><![CDATA[UPDATE 语句的语法错误。]]></D></Error>
- </root>
和数据的查询一样,前台要也用Sheeta.readXML()来解析,不过与查询不同的是,这次我们不需要显示里面的数据,只需要知道操作是成功,还是失败,这样我们就可以用sheeta.readXML()直接返回true或false ,例如:
- function updatesave(btn){
- var result = Pazu.fly('updatesave("'+fcur+'","'+newfcur+'","'+newexrate+'")');
- $("tid").value = result;
- if(Sheeta.readXML(result,true)){ //如果操作成功
- row.cells[1].innerHTML = newfcur;
- row.cells[2].innerHTML = newexrate;
- row.cells[3].innerHTML = initexecute;
- }
- }
Sheeta.readXML()方法可以带两个参数第一个是xml字符串,我们在查询已经用到了,第二个参数是true或者false, 当第二个参数为true时,将数据直接转为bool类型,既没有错误返回true,有错误则返回false,当第二个参数为false时,则将数据转成xml对象,实际上第二个参数为false时,我们可省略不写. Sheeta.readXML()这个函数还有一个特点,就是当有错误时,会alert出这个错误来:
这样我们就省了自已写代码弹出警告框提示错误了.
这里的错误都是系统的,如果我们要抛出自定义的异常该如何做呢? 例如,外币的汇率只能是数字,这就要用到 MyErr_(ob) 这个函数 如:
- function updatesave(fcur,newfcur,exrate)
- updatesave = XML_(MyErr_("E123"))
- end function
返回到前台的数据是:
- <?xml version="1.0" encoding="utf-8" ?>
- <root>
- <Error><N>E123</N><D>Unknown Error</D></Error>
- </root>
其中 <D></D>节点中的文本Unknown Error代表的是自定义的异常,就是MyErr_函数封装好的,然后在前台我们需调用 Sheeta.addErr()这个函数来处理自定义的错误:
- function updatesave(btn){
- var result = Pazu.fly('updatesave("'+fcur+'","'+newfcur+'","'+newexrate+'")');
- Sheeta.addErr("E123","汇率格式不正确"); //处理自定义的错误
- if(Sheeta.readXML(result,true)){ //如果操作成功
- row.cells[1].innerHTML = newfcur;
- row.cells[2].innerHTML = newexrate;
- row.cells[3].innerHTML = initexecute;
- }
- }
当这样处理之后,就会alert下面的提示框: