123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- $PBExportHeader$f_rpt_gdw.srf
- $PBExportComments$由SQL语句产生dw并取出字段信息--函数
- global type f_rpt_gdw from function_object
- end type
- forward prototypes
- global function string f_rpt_gdw (string fsql, ref datawindow fdw, transaction ft, string fs, string ftable)
- end prototypes
- global function string f_rpt_gdw (string fsql, ref datawindow fdw, transaction ft, string fs, string ftable);string ls[]
- datastore lds
- int li,lj,lk
- boolean lb
- lb=ft.AutoCommit//取出原来属性
- lds=create datastore
- ft.AutoCommit=True
- ls[1]=ft.SyntaxFromSQL(fsql,"style(type=Grid )",ls[9])//用"select * from table"生成动态dw语法
- ft.AutoCommit=lb
- if ls[9]>'' then goto myerr
- lds.Create(ls[1],ls[9])
- if ls[9]>'' then goto myerr
- li=long(lds.describe('DataWindow.Column.Count'))//字段总数
- for lj=1 to li
- ls[1]=lds.describe("#"+string(lj)+'.name')//字段英文名
- ls[2]=lds.describe(ls[1]+'_t.text')//字段中文名
- if left(ls[2],1)='"' and right(ls[2],1)='"' then
- ls[2]=mid(ls[2],2,len(ls[2]) -2)//在access数据库下且字段名为英文注释时发现多加双引号"的情况
- end if
- ls[3]=lds.describe(ls[1]+'.coltype')//字段类型
- if lower(ls[3]) = 'char' then ls[3] = 'char(1000)'
- ls[4]=lds.describe(ls[1]+'.dbname')//表英文名.字段名
- ls[2]=fs+ls[2]//fs为w_rpt_sql的A中文表名.中文字段名
- ls[5]=lds.describe(ls[1]+'.initial')
- ls[6]=lds.describe(ls[1]+'.key')
- ls[7]=lds.describe(ls[1]+'.update')
- // if ii_tables>=2 then ls[1]=left(ls[6]+'_'+ls[1],40)//表英文名_字段名,PB的columnname时只能处理40位
- lk=fdw.insertrow(0)
- fdw.setitem(lk,'cname',ls[1])
- fdw.setitem(lk,'ctag',ls[2])
- fdw.setitem(lk,'ctype',ls[3])
- fdw.setitem(lk,'cdbname',ls[4])
- fdw.setitem(lk,'cinitial',ls[5])
- fdw.setitem(lk,'ckey',ls[6])
- fdw.setitem(lk,'cupdate',ls[7])
- fdw.setitem(lk,'clen1',long(ls[2]))
- fdw.setitem(lk,'clen2',f_clen(ls[3]))
- next
- destroy lds
- return ''
- myerr:
- //为了兼容表中含有PB不能处理的字段(如blob类型),而又不想建立视图时读取字段名的办法,但如果在MSSQL建表后没有在PB中加过字段信息,则此方法也取不到字段名
- if ftable>'' then
- long l[]
- fsql="select pbc_cnam,pbc_labl from pbcatcol where pbc_tnam='"+ftable+"'"
- ft.AutoCommit=True
- ls[1]=ft.SyntaxFromSQL(fsql,"style(type=grid)",ls[9])//用"select * from table"生成动态dw语法
- ft.AutoCommit=lb
- if ls[9]>'' then goto myerr
- lds.Create(ls[1],ls[9])
- if ls[9]>'' then goto myerr
- lds.settransobject(ft)
- lds.retrieve()
- l[1]=lds.rowcount()
- for lj=1 to l[1]
- ls[1]=trim(lds.getitemstring(lj,1))//字段英文名
- ls[2]=trim(lds.getitemstring(lj,1))//字段中文名
- ls[4]=ftable+'.'+ls[1]//表英文名.字段名
- // if ii_tables>=2 then s[1]=left(s[6]+'_'+s[1],40)//表英文名_字段名,PB的columnname时只能处理40位
- ls[2]=fs+ls[2]//fs为w_rpt_sql的A中文表名.中文字段名
- lk=fdw.insertrow(0)
- fdw.setitem(lk,'cname',ls[1])
- fdw.setitem(lk,'ctag',ls[2])
- fdw.setitem(lk,'cdbname',ls[4])
- next
- end if
- destroy lds
- return ls[9]
- end function
|