如何实现100%的动态数据管道(三)[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 daixf_csdn 的 blog

下面看看,如何根据中间层的数据,构建管道语法:

1.首先建立一个数据窗口对象:d_vdtcolumns

sql语法是:

 select vdt_columns.utid,  
         vdt_columns.uid,  
         vdt_columns.upkey,  
         vdt_columns.udmid,  
         vdt_columns.udmname,  
         vdt_columns.unulls,  
         vdt_columns.uwidth,  
         vdt_columns.uscale,  
         vdt_columns.uname,  
         vdt_columns.udefault,  
         vdt_columns.ucheck,  
         vdt_columns.utname,  
         vdt_columns.uidentity 
    from vdt_columns 
   where utname = :as_tname   

2.准备工作就绪,下面就是主战场了,开始构建数据管道.

考虑到一个管道对象可以传输多个任务,建立一个对象nvo_pipetransattrib保存传输需要的语法:
它包含了一下的instance变量:

string  is_objectname              //表名
string is_syntax               //管道语法

string is_sconnect='zw',is_dconnect='daixf'      //源数据库连接和目的数据库连接
string is_ptype,is_pcommit,is_errors         //管道的几个属性
string is_sname,is_dname             //源表名,目的表名
string is_sqlsyntax              //管道的sql语法

建立一个对象,从数据管道对象继承.

开始构造语法:写一个函数.
nvo_pipetransattrib inv_attrib[]

string ls_syntax,ls_sourcesyntax,ls_destsyntax

int li,lj,li_ind,li_find,li_rows,li_identity
string ls_tablename,ls_default,ls_defaultvalue,ls_pbdttype
boolean lb_find
dec ld_uwidth,ld_prec,ld_uscale
string ls_types,ls_dbtype,ls_prikey,ls_name,ls_nulls,ls_msg,ls_title='of_constrpipesyntax()'
nvo_string lnv_string
nvo_datastore lds_vdtcolumns
boolean lb_key

lds_vdtcolumns=create nvo_datastore
lds_vdtcolumns.dataobject='d_vdtcolumns'
lds_vdtcolumns.settransobject(srcsqlca)
li=1

of_input(inv_attrib[li])
li_find=pos(inv_attrib[li].is_sqlsyntax,'*',1)
if li_find>0 then
 lds_vdtcolumns.retrieve(as_tablename)
 of_filterimg(lds_vdtcolumns)
 li_rows=lds_vdtcolumns.rowcount()
 for lj=1 to li_rows
  ls_name=lds_vdtcolumns.getitemstring(lj,'uname')
  ls_types=lds_vdtcolumns.getitemstring(lj,'udmname')
  li_identity = lds_vdtcolumns.getitemnumber(lj,'uidentity')
  ls_types=of_getpipedbtype(is_s_dbtype,ls_types)
  ls_pbdttype=of_getpbdttype(is_s_dbtype,ls_types)
  choose case ls_types
   case 'char','varchar','nchar','nvarchar','long varchar'
    if ls_types='long varchar' then ls_types='varchar'
    ld_uwidth=lds_vdtcolumns.getitemnumber(lj,'uwidth')
    ls_dbtype=ls_types+'('+string(int(ld_uwidth))+')'
   case 'decimal','numeric'
    ld_uwidth=lds_vdtcolumns.getitemnumber(lj,'uwidth')
    ld_uscale=lds_vdtcolumns.getitemnumber(lj,'uscale')
    if li_identity=1 then
     ls_dbtype='identity'+'('+string(int(ld_uwidth))+','+string(int(ld_uscale))+')'
    else
     ls_dbtype=ls_types+'('+string(int(ld_uwidth))+','+string(int(ld_uscale))+')'
    end if
   case else
    ls_dbtype=ls_types
  end choose
  ls_prikey=lds_vdtcolumns.getitemstring(lj,'upkey')
  if ls_prikey='y' then
   lb_key=true
   ls_prikey='key=yes,' 
  else
   ls_prikey=''
  end if
  
  ls_nulls=lds_vdtcolumns.getitemstring(lj,'unulls')
  if ls_nulls='y' then
   ls_nulls='yes' 
  else
   ls_nulls='no'
  end if
  
  ls_default=isnull(lds_vdtcolumns.getitemstring(lj,'udefault'),'')
  

本文关键:如何实现100%的动态数据管道(三)
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top