实战-外币币表的维护2
(创建时间:2010年04月27日 00:34:00)
陈行远 : 

    在外币币表维护中我们以显示数据和修改数据为例来说明sc代码中经常要用到的函数:
         1, 显示数据:     
           在窗体加载的时候我们要调用一个方法来加载数据:            

 
  1. //页面加载时    
  2.  function init(){   
  3.           var sTxt=Pazu.fly("getFCurList()");                           
  4.           var xD=Sheeta.readXML(sTxt);        
  5.           creatTable(xD);
  6.            }    
       

  这是查询数据库的sc后台代码:
           
 
  1.   '取外币表所有记录的方法   
  2. function getFCurList()        
  3.    on error resume next   
  4.    dim cn,rs,s    
  5.    '获得数据联接和记录集   
  6.    set cn=GetCN_()     
  7.    set rs=GetRS_()    
  8.    cn.open CNStr_    
  9.    rs.open "select fcur,exrate from fcur  where fcur<>'' ", cn     
  10.    s=R2X_( rs,"FCUR" )            
  11.    getFCurList=XML_( s &  ErrXML_( err ) )    
  12.    close_ rs     
  13. end function  

      在以上方法中GetCN_(),GetRS_()是已经定义好的,获得数据连接和记录集的函数,我们可以直接使用,  R2X_()这个函数是将查询出的记录集解析成xml字符串,XML_()函数则是将xml字符串,封装成xml对象, 关于这几个方法的具体参数和用法请参看www.4fang.net/article/2009/6/5/95159_1.html
  
   这个方法调用后,返回到前台的数据如下所示:
     

 
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2.   <root>  
  3.   <FCUR>  
  4.   <r2x><fcur><![CDATA[美元]]></fcur><exrate><![CDATA[0.8]]></exrate></r2x>  
  5.   <r2x><fcur><![CDATA[欧元]]></fcur><exrate><![CDATA[0.5]]></exrate></r2x>  
  6.   <r2x><fcur><![CDATA[ 朝鲜人民币]]></fcur><exrate><![CDATA[50]]></exrate></r2x>  
  7.   </FCUR>  
  8.   <Error><N>0</N><D><![CDATA[]]></D></Error>  
  9.   </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,修改数据
     

 
  1. 'fcur为未修改的币名,newfcur为修改后的币名,exrate为修改后的汇率   
  2.  function updatesave(fcur,newfcur,exrate)   
  3.    on error resume next   
  4.    dim sql   
  5.    '修改的方法   
  6.    sql = "update fcur set Fcur = ' " & newfcur & "', ExRate = '" & exrate & "' where Fcur = '" & fcur & "';"  
  7.    updatesave = XML_(ExecSQL_(sql))   
  8.  end function  

    
   在这个方法中,前台将fcur原来的币名,newfcur修改后的币名,exrate修改后汇率传了过来,然后调用ExecSQL_()方法,  执行修改的操作,再调用XML_函数将操作结果封装成xml,这里要注意的是sc代码中往前台传的数据都要使用XML()函数封装起来;
   这个方法正确执行返回的数据如下:

 
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2.     <root>  
  3.     <Error><N>0</N><D><![CDATA[]]></D></Error>  
  4.    </root>  

  当有异常时数据如下:
   

 
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2.     <root>  
  3.     <Error><N>-2147217900</N><D><![CDATA[UPDATE 语句的语法错误。]]></D></Error>  
  4.    </root>  

  和数据的查询一样,前台要也用Sheeta.readXML()来解析,不过与查询不同的是,这次我们不需要显示里面的数据,只需要知道操作是成功,还是失败,这样我们就可以用sheeta.readXML()直接返回true或false ,例如:
  

 
  1. function updatesave(btn){   
  2.              var result =  Pazu.fly('updatesave("'+fcur+'","'+newfcur+'","'+newexrate+'")');   
  3.              $("tid").value = result;   
  4.              if(Sheeta.readXML(result,true)){                   //如果操作成功   
  5.                     row.cells[1].innerHTML = newfcur;   
  6.                   row.cells[2].innerHTML = newexrate;   
  7.                   row.cells[3].innerHTML = initexecute;   
  8.                 }      
  9.         }  


     Sheeta.readXML()方法可以带两个参数第一个是xml字符串,我们在查询已经用到了,第二个参数是true或者false,  当第二个参数为true时,将数据直接转为bool类型,既没有错误返回true,有错误则返回false,当第二个参数为false时,则将数据转成xml对象,实际上第二个参数为false时,我们可省略不写. Sheeta.readXML()这个函数还有一个特点,就是当有错误时,会alert出这个错误来:
   
 这样我们就省了自已写代码弹出警告框提示错误了.

  这里的错误都是系统的,如果我们要抛出自定义的异常该如何做呢?  例如,外币的汇率只能是数字,这就要用到 MyErr_(ob) 这个函数 如:
  

 
  1. function updatesave(fcur,newfcur,exrate)    
  2.            updatesave = XML_(MyErr_("E123"))   
  3.      end function  

 返回到前台的数据是:

 
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2.        <root>  
  3.        <Error><N>E123</N><D>Unknown Error</D></Error>  
  4.        </root>  
  5.         

      其中 <D></D>节点中的文本Unknown Error代表的是自定义的异常,就是MyErr_函数封装好的,然后在前台我们需调用 Sheeta.addErr()这个函数来处理自定义的错误:

 
  1. function updatesave(btn){          
  2.              var result =  Pazu.fly('updatesave("'+fcur+'","'+newfcur+'","'+newexrate+'")');                   
  3.              Sheeta.addErr("E123","汇率格式不正确");              //处理自定义的错误   
  4.              if(Sheeta.readXML(result,true)){                   //如果操作成功          
  5.                   row.cells[1].innerHTML = newfcur;          
  6.                   row.cells[2].innerHTML = newexrate;          
  7.                   row.cells[3].innerHTML = initexecute;          
  8.                 }             
  9.         }   

  当这样处理之后,就会alert下面的提示框:
    
   

 


   
  
  

文档中心