PB 常用函数与封装函数列表(十二、通用功能函数封装)
十二、通用功能函数封装
12.1 根据SQL创建DataStore
定义函数
/* >==================================================================== > function:gf_createDataStore >-------------------------------------------------------------------- > 描述: 根据SQL创建DataStore >-------------------------------------------------------------------- > 参数: > String 类型 sql语句 >-------------------------------------------------------------------- > 返回: > DataStore类型 (函数执行成功返回DataStore) > Integer 类型 (函数执行成功数据的总行数) > String 类型 (函数执行失败时返回错误信息) >==================================================================== */ String ls_DwSyntax //创建数据存储的语法 String ls_Errors //错误信息 String ls_FunName //函数名称 ls_FunName = '~r~nCreateDataStore()-' //创建数据存储语法 ls_DwSyntax = SQLCA.SyntaxFromSQL(as_SqlSelect, 'Style(Type=Grid)',ls_Errors) If Len(ls_Errors) > 0 Then as_ErrInfo = ls_FunName + '不能返回数据窗语法,错误信息:' + ls_Errors Return -1 End If ads_DataStore.Create(ls_DwSyntax,ls_Errors) If Len(ls_Errors) > 0 Then as_ErrInfo = ls_FunName + '不能创建数据存储对象,错误信息:' + ls_Errors Return -1 End If //检索数据 ads_DataStore.SetTransObject(SQLCA) ai_RowCount = ads_DataStore.Retrieve() If ai_RowCount < 0 Then as_ErrInfo = ls_FunName + '数据存储检索错误!' Return -1 End If as_ErrInfo = '' Return 1
调用函数
int li_count string ls_sql string ls_err DataStore lds_Info ls_sql = "select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp where empno = '7369' " lds_Info = Create DataStore If gf_createDataStore(lds_RecipeInfo,ls_sql,li_count,ls_err) = -1 Then goto Err End If return Err: messagebox('提示信息',ls_err)
12.2 获取exe名称
引用动态库,定义外部函数
FUNCTION ulong GetModuleFileName(ulong hModule,ref string lpFileName,ulong nSize) LIBRARY "kernel32.dll" ALIAS FOR "GetModuleFileNameA"
定义函数
/* >==================================================================== > function:gf_file_getexe >-------------------------------------------------------------------- > 描述: 获取exe名称 >-------------------------------------------------------------------- > 参数: > showexesuffix:integer类型 (0、不显示exe后缀,1、显示exe后缀) >-------------------------------------------------------------------- > 返回: string类型 (函数执行成功返回exe的名称) >==================================================================== */ string str_temp,separator string str_list[] integer i = 1,ll_pos,ll_max string ls_fileName GetModuleFileName(handle(this),ls_fileName,100) separator = '' ll_pos = pos(ls_fileName,separator,1) do if ll_pos = 0 then str_list[i] = ls_fileName else str_list[i] = left(ls_fileName,ll_pos - 1) i ++ ls_fileName = mid(ls_fileName,ll_pos + len(separator)) ll_pos = pos(ls_fileName,separator,1) if ll_pos = 0 then str_list[i] = ls_fileName end if loop while ll_pos <> 0 ll_max = upperbound(str_list) if showexesuffix = 1 then return mid(str_list[ll_max],1,pos(str_list[ll_max],'.') - 1) else return str_list[ll_max] end if 调用函数 string ls_exe ls_exe = gf_get_exe(0) //不显示exe后缀 ls_exe = gf_get_exe(1) //显示exe后缀
12.3 文件写入
定义函数
/* >================================================================== > Function: gf_file_write >-------------------------------------------------------------------- > 描述: 文件写入 >-------------------------------------------------------------------- > 参数: > string fileway (打开文件的方式) > string filepath (要写入的文件路径和文件名称) > string filecontent (要写入的内容) >-------------------------------------------------------------------- > 返回: integer (0:成功,-1:失败。) ==================================================================== */ long ll_file,ll_FLength,ll_i,ll_count string ls_content choose case fileway case 'w' //流模式、写入、所有用户均可读写该文件、覆盖 ll_file = fileopen(filepath,streamMode!,Write!,Shared!,Replace!) case 'w+' //流模式、写入、所有用户均可读写该文件、追加 ll_file = fileopen(filepath,streamMode!,Write!,Shared!,append!) case 'wl' //行模式、写入、所有用户均可读写该文件、覆盖 ll_file = fileopen(filepath,LineMode!,Write!,Shared!,Replace!) case 'wl+' //行模式、写入、所有用户均可读写该文件、追加 ll_file = fileopen(filepath,LineMode!,Write!,Shared!,append!) case else messagebox('提示','gf_file_write:传入的参数错误!') return - 1 end choose IF ll_file > 0 THEN ll_FLength = len(filecontent) if ll_FLength > 32765 then if mod(ll_FLength,32765) = 0 then ll_count = ll_FLength / 32765 else ll_count = ll_FLength / 32765 + 1 end if else ll_count = 1 end if for ll_i = 1 to ll_count ls_content = left(filecontent,32765) FileWrite(ll_file,ls_content) filecontent = right(filecontent,len(filecontent) - 32765) next FileClose(ll_file) else messagebox('提示','gf_file_write:文件打开失败!') return - 1 end if return 0
调用函数
gf_file_write('w',getcurrentdirectory() + '1.txt','流模式覆盖') gf_file_write('w+',getcurrentdirectory() + '1.txt','流模式追加') gf_file_write('wl',getcurrentdirectory() + '1.txt','行模式覆盖') gf_file_write('wl+',getcurrentdirectory() + '1.txt','行模式追加')
12.4 文件读取
函数定义
/* >==================================================================== > Function: gf_file_read >-------------------------------------------------------------------- > 描述: 文件读取 >-------------------------------------------------------------------- > 参数: > string fileway (打开文件的方式) > string filepath (要读取的文件路径和文件名称) > ref string filecontent[] (要返回的内容) >-------------------------------------------------------------------- > 返回: integer (0:成功,-1:失败。) >==================================================================== */ long ll_file,ll_FLength,ll_i,ll_j,ll_count string ls_content choose case fileway case 'r' //流模式、读取、所有用户均可读写该文件 ll_file = fileopen(filepath,streamMode!,Read!,Shared!) IF ll_file > 0 THEN ll_FLength = len(filepath) if ll_FLength > 32765 then if mod(ll_FLength,32765) = 0 then ll_count = ll_FLength / 32765 else ll_count = ll_FLength / 32765 + 1 end if else ll_count = 1 end if for ll_i = 1 to ll_count FileRead(ll_file,ls_content) filecontent[1] += ls_content next else messagebox('提示','gf_file_read:文件打开失败!') return - 1 end if case 'rl' //行模式、读取、所有用户均可读写该文件 ll_file = fileopen(filepath,LineMode!,Read!,Shared!) IF ll_file > 0 THEN ll_j = 1 ll_i = FileRead(ll_file,filecontent[ll_j]) do until string(ll_i) = '-100' ll_j = ll_j + 1 ll_i = FileRead(ll_file,filecontent[ll_j]) loop FileClose(ll_file) else messagebox('提示','gf_file_read:文件打开失败!') return - 1 end if case else messagebox('提示','gf_file_read:传入的参数错误') return - 1 end choose return 0
调用函数
(1)、以流模式读取文件
string ls_data[] gf_file_read('r',getcurrentdirectory() + '1.txt',ls_data[] ) messagebox('流模式返回值',ls_data[1])
(2)、以行模式读取文件
string ls_data[] gf_file_read('rl',getcurrentdirectory() + '1.txt',ls_data[] ) messagebox('行模式返回值',ls_data[1]) messagebox('行模式返回值',ls_data[2]) messagebox('行模式返回值',ls_data[3])
12.5 字符串切割
定义函数
/* >==================================================================== > function: gf_string_cut. >-------------------------------------------------------------------- > 描述: 字符串切割 >-------------------------------------------------------------------- > 参数: > way:string (可选参数:array:将字符串分割并返回一个数组。string:将字符串分割并返回一个 字符串) > data:string (要进行分割的字符串数据) > conditions:string (字符串分割的条件) > value[] (字符串分割后的值) >-------------------------------------------------------------------- > 返回: integer (0:成功,-1:失败。) >==================================================================== */ long ll_empty_pos,i = 1 string ls_value_string,ls_value_array[] choose case way case 'array' ll_empty_pos = pos(data,conditions) if ll_empty_pos > 0 then do ls_value_array[i] = trim(mid(data,1,ll_empty_pos - 1)) data = trim(mid(data,ll_empty_pos + 1)) ll_empty_pos = pos(data,conditions) i++ if ll_empty_pos = 0 then ls_value_array[i] = trim(mid(data,0)) end if loop while ll_empty_pos > 0 value[] = ls_value_array[] else messagebox('提示','gf_string_cut传入的字符串未找到!') return - 1 end if case 'string' ll_empty_pos = pos(data,conditions) if ll_empty_pos > 0 then do ls_value_string += trim(mid(data,1,ll_empty_pos - 1)) data = trim(mid(data,ll_empty_pos + 1)) ll_empty_pos = pos(data,conditions) if ll_empty_pos = 0 then ls_value_string += trim(mid(data,0)) end if loop while ll_empty_pos > 0 value[1] = ls_value_string else messagebox('提示','gf_string_cut传入的字符串未找到!') return - 1 end if case else messagebox('提示','gf_string_cut传入的参数错误!') return - 1 end choose return 0
调用函数
string ls_data,ls_value[] ls_data = '123,456,789' //1、切割字符串,并返回切割后的字符串 gf_string_cut('string',ls_data,',',ls_value[]) messagebox('',ls_value[1]) //123456789 //2、切割字符串,并返回数组 gf_string_cut('array',ls_data,',',ls_value[]) messagebox('',ls_value[1]) //123 messagebox('',ls_value[2]) //456 messagebox('',ls_value[3]) //789
12.6 字符串替换
定义函数
/* >==================================================================== > function:gf_string_replace >-------------------------------------------------------------------- > 描述: 字符串替换 >-------------------------------------------------------------------- // 参数: // string data 字符串数据 // string as_old 将要替换的字符 // string as_new 要替换的新值 >-------------------------------------------------------------------- > 返回: string 替换后的字符 >==================================================================== */ long ll_oldlen, ll_newlen, ll_pos ll_pos = Pos(data,as_old) IF ll_pos > 0 Then ll_oldlen = Len(as_old) ll_newlen = Len(as_new) DO WHILE ll_pos > 0 data = Replace(data,ll_pos,ll_oldlen,as_new) ll_pos = Pos(data,as_old,ll_pos + ll_newlen) LOOP END IF RETURN data
调用函数
string ls_data ls_data = gf_string_replace('1234561','1','6') messagebox('返回值',ls_data) //6234566
12.7 大文件写入(二进制数据流)
函数定义
/* >==================================================================== > function: gf_adodb_blob_write. >-------------------------------------------------------------------- > 描述:大文件写入(二进制数据流) >-------------------------------------------------------------------- > 参数: > string filepath (要写入的文件路径和文件名称) > blob filecontent (要写入的二进制数据文件内容) >-------------------------------------------------------------------- > 返回:integer (0:成功,-1:失败。) >==================================================================== */ long li_rtn,ll_file string ls_data OLEObject ADODB ADODB = CREATE OLEObject li_rtn = ADODB.ConnectToNewObject("ADODB.Stream") if li_rtn = 0 then ADODB.Type = 1 //设置ADODB类型(1、二进制数据,2、文本数据) ADODB.Mode = 3 //设置读写模式(1、读,2、写,3、读写) ADODB.open() //打开ADODB ADODB.Position = 0 //Position=0才能设置Charset ADODB.Write(filecontent) //Write 和 WriteText 方法向 Stream 中输入字节或文本。 ADODB.savetofile(filepath,2) //savetofile(1、只写入1次。2、可覆盖写入多次) ADODB.flush() //清空缓冲区数据 ADODB.Close() //关闭流 destroy ADODB else messagebox('提示', '无法连接【ADODB.Stream】!~r~n读取文件失败!') return - 1 end if return 0
调用函数
gf_adodb_blob_write(getcurrentdirectory()+'a.txt',blob('123'))
12.8 大文件读取(二进制数据流)
函数定义
/* >==================================================================== > function: gf_adodb_blob_read. >-------------------------------------------------------------------- > 描述: 大文件读取(二进制数据流) >-------------------------------------------------------------------- > 参数: > string filepath (要读取的文件路径和文件名称) >-------------------------------------------------------------------- > 返回: blob (从文件中读取到的blob数据) >==================================================================== */ long li_rtn blob lb_data OLEObject ADODB ADODB = CREATE OLEObject li_rtn = ADODB.ConnectToNewObject("ADODB.Stream") if li_rtn = 0 then ADODB.Type = 1 //设置ADODB类型(1、二进制数据,2、文本数据) ADODB.Mode = 3 //设置读写模式(1、读,2、写,3、读写) ADODB.Open() //打开ADODB ADODB.LoadFromFile(filepath) //加载文件 ADODB.Position = 0 //Position=0才能设置Charset lb_data = ADODB.Read() //Read 和 ReadText 方法向 Stream 中读取字节或文本。 ADODB.flush() //清空缓冲区数据 ADODB.Close() //关闭流 destroy ADODB else messagebox('提示', '无法连接【ADODB.Stream】!~r~n读取文件失败!') end if return lb_data
函数调用
blob lb_data lb_data = gf_adodb_blob_read(getcurrentdirectory()+'a.txt') messagebox('blob',string(lb_data))
12.9 大文件写入(文本流)
函数定义
/* >==================================================================== > function: gf_adodb_string_write. >-------------------------------------------------------------------- > 描述:大文件写入(文本流) >-------------------------------------------------------------------- > 参数: > string filepath (要写入的文件路径和文件名称) > string filecontent (要写入的文本流内容) >-------------------------------------------------------------------- > 返回:integer (0:成功,-1:失败。) >==================================================================== */ long li_rtn,ll_file string ls_data OLEObject ADODB ADODB = CREATE OLEObject li_rtn = ADODB.ConnectToNewObject("ADODB.Stream") if li_rtn = 0 then ADODB.Type = 2 //设置ADODB类型(1、二进制数据,2、文本数据) ADODB.Mode = 3 //设置读写模式(1、读,2、写,3、读写) ADODB.open() //打开ADODB ADODB.Position = 0 //Position=0才能设置Charset ADODB.WriteText(filecontent) //Write 和 WriteText 方法向 Stream 中输入字节或文本。 ADODB.savetofile(filepath,2) //savetofile(1、只写入1次。2、可覆盖写入多次) ADODB.flush() //清空缓冲区数据 ADODB.Close() //关闭流 destroy ADODB else messagebox('提示', '无法连接【ADODB.Stream】!~r~n读取文件失败!') return - 1 end if return 0
函数调用
gf_adodb_string_write(getcurrentdirectory()+'a.txt','123')
12.10 大文件读取(文本流)
函数定义
/* >==================================================================== > function: gf_adodb_string_read. >-------------------------------------------------------------------- > 描述: 大文件读取(文本流) >-------------------------------------------------------------------- > 参数: > string filepath (要读取的文件路径和文件名称) >-------------------------------------------------------------------- > 返回: string (从文件中读取到的blob数据) >==================================================================== */ long li_rtn string ls_data OLEObject ADODB ADODB = CREATE OLEObject li_rtn = ADODB.ConnectToNewObject("ADODB.Stream") if li_rtn = 0 then ADODB.Type = 2 //设置ADODB类型(1、二进制数据,2、文本数据) ADODB.Mode = 3 //设置读写模式(1、读,2、写,3、读写) ADODB.Open() //打开ADODB ADODB.LoadFromFile(filepath) //加载文件 ADODB.Position = 0 //Position= 0才能设置Charset ls_data = ADODB.ReadText() //Read 和 ReadText 方法向 Stream 中读取字节或文本。 ADODB.flush() //清空缓冲区数据 ADODB.Close() //关闭流 destroy ADODB else messagebox('提示', '无法连接【ADODB.Stream】!~r~n读取文件失败!') end if return ls_data
函数调用
string ls_data ls_data = gf_adodb_string_read(getcurrentdirectory()+'a.txt') messagebox('string',ls_data)
12.11 移除字符串中的字母
函数定义
/* >==================================================================== > Function: gf_remove_letter >-------------------------------------------------------------------- > 描述: 移除字符串中的字母 >-------------------------------------------------------------------- > 参数: > string ls_data 要去除字母的字符串 >-------------------------------------------------------------------- > 返回: string >==================================================================== */ string str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' string ls_data_new long i if ls_data = '' or isnull(ls_data) then ls_data_new = '' else for i = 1 to len(ls_data) if pos(str,mid(ls_data,i,1)) = 0 then ls_data_new += mid(ls_data,i,1) end if next end if return ls_data_new
函数调用
gf_remove_letter('12abc3sdfsg4')
12.12 获取上个月初到月底的时间
函数定义
/* >==================================================================== > Function: gf_last_month >-------------------------------------------------------------------- > 描述: 获取上个月初到月底的时间 >-------------------------------------------------------------------- > 参数: > ref string lrt_start > ref string lrt_end >-------------------------------------------------------------------- > 返回值: (none) >==================================================================== */ string ls_by2 string ls_by,ls_sy ls_by2 = mid(string(date(today())),1,7) + '-01' ls_by = string(RelativeDate(date(ls_by2), - 1)) ls_sy = string(Year(date(ls_by2))) + '-' + string(Month(date(ls_by2)) - 1) + '-01' lrt_start = ls_sy + ' 00:00:00' lrt_end = ls_by + ' 23:59:59'
函数调用
string ls_start,ls_end of_last_month(ls_start,ls_end) messagebox('月初的(日期+时间)',ls_start) messagebox('月底的(日期+时间)',ls_end)
12.13 时间转字符串
函数定义
/* >==================================================================== > Function: gf_datetime_string >-------------------------------------------------------------------- > 描述: 时间转字符串 >-------------------------------------------------------------------- > 参数: > string as_datetime > string as_select >-------------------------------------------------------------------- > 返回值: string >==================================================================== */ string ls_y,ls_m,ls_d,ls_h,ls_i,ls_s long ll_y,ll_m,ll_d,ll_h,ll_i,ll_s string ls_format,ls_return as_datetime = trim(as_datetime) if pos(as_datetime,'-') > 0 then ls_format = '-' ll_y = pos(as_datetime,'-') ll_m = pos(as_datetime,'-',ll_y + 1) ll_d = pos(as_datetime,' ',ll_m + 1) ll_h = pos(as_datetime,':') ll_i = pos(as_datetime,':',ll_h + 1) elseif pos(as_datetime,'/') > 0 then ls_format = '/' ll_y = pos(as_datetime,'/') ll_m = pos(as_datetime,'/',ll_y + 1) ll_d = pos(as_datetime,' ',ll_m + 1) ll_h = pos(as_datetime,':') ll_i = pos(as_datetime,':',ll_h + 1) elseif pos(as_datetime,'.') > 0 then ls_format = '.' ll_y = pos(as_datetime,'.') ll_m = pos(as_datetime,'.',ll_y + 1) ll_d = pos(as_datetime,' ',ll_m + 1) ll_h = pos(as_datetime,':') ll_i = pos(as_datetime,':',ll_h + 1) end if ls_y = mid(as_datetime,1,ll_y - 1) ls_m = mid(as_datetime,ll_y + 1,ll_m - 1 - ll_y) ls_d = mid(as_datetime,ll_m + 1,ll_d - 1 - ll_m) ls_h = mid(as_datetime,ll_d + 1,ll_h - 1 - ll_d) ls_i = mid(as_datetime,ll_h + 1,ll_i - 1 - ll_h) ls_s = mid(as_datetime,ll_i + 1) choose case lower(as_select) case 'y' //年 ls_return = ls_y case 'm' //月 ls_return = ls_m case 'd' //日 ls_return = ls_d case 'h' //时 ls_return = ls_h case 'i' //分 ls_return = ls_i case 's' //秒 ls_return = ls_s case 'y-m' //年-月 ls_return = ls_y + ls_format + ls_m case 'y-m-d' //年-月-日 ls_return = ls_y + ls_format + ls_m + ls_format + ls_d case 'y-m-d h' //年-月-日 时 ls_return = ls_y + ls_format + ls_m + ls_format + ls_d + ' ' + ls_h case 'y-m-d h:i' //年-月-日 时:分 ls_return = ls_y + ls_format + ls_m + ls_format + ls_d + ' ' + ls_h +':' + ls_i case 'y-m-d h:i:s' //年-月-日 时:分:秒 ls_return = ls_y + ls_format + ls_m + ls_format + ls_d + ' ' + ls_h +':' + ls_i + ':' + ls_s case 'lastday' //获取当月最后一天 Integer li_year,li_month li_year = Integer(ls_y) li_month = Integer(ls_m) if li_month = 12 then li_month = 1 li_year ++ else li_month = li_month + 1 end if ls_return = string(RelativeDate(Date(String(li_year) + '-' + String(li_month) + '-01'), - 1)) end choose return ls_return
函数调用
string ls_datetime ls_datetime = '2021-01-01 11:12:13' gf_datetime_string(ls_datetime,'Y') //获取年 gf_datetime_string(ls_datetime,'M') //获取月 gf_datetime_string(ls_datetime,'D') //获取日 gf_datetime_string(ls_datetime,'H') //获取时 gf_datetime_string(ls_datetime,'I') //获取分 gf_datetime_string(ls_datetime,'S') //获取秒 gf_datetime_string(ls_datetime,'Y-M') //获取年+月 gf_datetime_string(ls_datetime,'Y-M-D') //获取年+月+日 gf_datetime_string(ls_datetime,'H-I') //获取时+分 gf_datetime_string(ls_datetime,'H-I-S') //获取时+分+秒 gf_datetime_string(ls_datetime,'Y-M-D H') //获取年+月+日 时 gf_datetime_string(ls_datetime,'Y-M-D H:I') //获取年+月+日 时+分 gf_datetime_string(ls_datetime,'Y-M-D H:I:S') //获取年+月+日 时+分+秒
12.14 xml解析
函数定义
/* >==================================================================== > Function: gf_xml_get >-------------------------------------------------------------------- > 描述: xml解析 >-------------------------------------------------------------------- > 参数: > string data > string label >-------------------------------------------------------------------- > 返回值: string >==================================================================== */ long ll_start string ls_data,ls_data2,ls_data3 ls_data = trim(data) ll_start = pos(ls_data,'<' + label + '>') if ll_start = 0 then return '' else ls_data2 = mid(ls_data,ll_start + len('<' + label + '>')) ls_data3 = mid(ls_data2,1,pos(ls_data2,'<') - len('<')) return ls_data3 end if
函数调用
string ls_xml ls_xml = '<?xml version="1.0" encoding="UTF-8"?>' + & '<code>' + & '<a>1</a>' + & '<b>2</b>' + & '<c>3</c>' + & '<d>4</d>' + & '</code>' gf_xml_get(ls_xml,'a')
12.15 获取指定路径下的所有文件和文件夹
函数定义
/* >==================================================================== >Function: gf_dir >-------------------------------------------------------------------- > > 描述: 获取指定路径下的所有文件和文件夹 >-------------------------------------------------------------------- > >参数: > string as_dir > listbox lb_filelist > >ref st_dir astr_itemlist[] >-------------------------------------------------------------------- > > 返回值: integer >==================================================================== >*/ Long ll_i Long ll_Count Long ll_DirCount If Not DirectoryExists ( as_Dir ) Then Return -2 // 目录不存在 End If If Right(as_Dir, 1) <> '' Then as_Dir += '' End If // 处理目录 ll_DirCount = 0 lb_FileList.DirList( as_Dir + '*.*', 32784) ll_Count = lb_FileList.TotalItems() For ll_i = 1 To ll_Count If lb_FileList.Text(ll_i) = '[..]' Then Continue End If ll_DirCount ++ astr_ItemList[ll_DirCount].Item_Name = lb_FileList.Text(ll_i) astr_ItemList[ll_DirCount].Item_Name = as_Dir + Mid(astr_ItemList[ll_DirCount].Item_Name, 2, Len(astr_ItemList[ll_DirCount].Item_Name) - 2) // 去除外部的[] astr_ItemList[ll_DirCount].Item_Type = 2 Next // 处理文件 lb_FileList.DirList( as_Dir + '*.*', 0) ll_Count = lb_FileList.TotalItems() For ll_i = 1 To ll_Count ll_DirCount ++ astr_ItemList[ll_DirCount].Item_Name = as_Dir + lb_FileList.Text(ll_i) astr_ItemList[ll_DirCount].Item_Type = 1 Next Return ll_DirCount
函数调用
st_dir astr_itemlist[] gf_dir('D:',lb_1,astr_itemlist)
12.16 将数值转换为大写金额
函数定义
/* >==================================================================== > Declare: gf_capital_amount >-------------------------------------------------------------------- > 描述: 将数值转换为大写金额 >-------------------------------------------------------------------- > 参数: > ac_money 要转换的金额 >-------------------------------------------------------------------- > 返回: 大写金额 >==================================================================== */ string ls_numstr[10] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"} string ls_monstr[20] = {"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟","亿", "拾","佰","仟"} integer i integer li_len string ls_temp string ls_char string ls_intstr string ls_decstr string ls_rtnintstr string ls_rtndecstr ls_temp = string(abs(ac_money),"0.00") ls_intstr = left (ls_temp,len(ls_temp) - 3) ls_decstr = right(ls_temp,2) li_len = len(ls_intstr) for i = 1 to li_len ls_char = mid(ls_intstr,li_len - i + 1,1) if ls_char = "0" then choose case i case 1,9,17 ls_rtnintstr = ls_monstr[i] + ls_rtnintstr case 5,13 if li_len > i + 3 then if mid(ls_intstr,li_len - i - 2,3) <> "000" then ls_rtnintstr = ls_monstr[i] + ls_rtnintstr end if else ls_rtnintstr = ls_monstr[i] + ls_rtnintstr end if case else if mid(ls_intstr,li_len - i + 2,1) <> "0" then ls_rtnintstr = "零" + ls_rtnintstr end if end choose else ls_rtnintstr = ls_numstr[integer(ls_char) + 1] + ls_monstr[i] + ls_rtnintstr end if next if long(ls_intstr) = 0 then if long(ls_decstr) > 0 then ls_rtnintstr = "" else ls_rtnintstr = "零元" end if end if if ls_decstr = "00" then ls_rtndecstr = "整" elseif mid(ls_decstr,1,1) = "0" then ls_rtndecstr = ls_numstr[integer(mid(ls_decstr,2,1)) + 1] + "分" if long(ls_intstr) > 0 then ls_rtndecstr = "零" + ls_rtndecstr elseif mid(ls_decstr,2,1) = "0" then ls_rtndecstr = ls_numstr[integer(mid(ls_decstr,1,1)) + 1] + "角" else ls_rtndecstr = ls_numstr[integer(mid(ls_decstr,1,1)) + 1] + "角" + & ls_numstr[integer(mid(ls_decstr,2,1)) + 1] + "分" end if if ac_money >= 0 then return ls_rtnintstr + ls_rtndecstr else return "负" + ls_rtnintstr + ls_rtndecstr end if
函数调用
gf_capital_amount(11.22)
12.17 将按钮循环添加到按钮数组里
函数定义
/* >==================================================================== > Function: gf_button_array >-------------------------------------------------------------------- > 描述: 将按钮循环添加到按钮数组里 >-------------------------------------------------------------------- > 参数: > commandbutton controls[] > ref commandbutton lbt_btn[] >==================================================================== */ long i for i = 1 to UpperBound(controls[]) if left(classname(controls[i]),3) = "cb_" then lbt_btn[upperbound(lbt_btn) + 1] = controls[i] end if next
函数调用
commandbutton a[] a[1] = cb_1 a[2] = cb_2 gf_button_array(a)
12.18 动态添加数据窗口字段下的ddlb下拉框
函数定义
/* >==================================================================== > Function: gf_dw_ddlb >-------------------------------------------------------------------- > 描述:动态添加数据窗口字段下的ddlb下拉框 >-------------------------------------------------------------------- > 参数: > datawindow as_dw 要添加下拉框的数据窗口 > string as_dw_column 要添加下拉框的列 > transaction as_affairs 要查询的SQL事务 > string as_table 要查询的表 > string as_table 要查询的where条件 > string as_table_display 要在下拉框显示的列 > string as_table_data 要在下拉框中指定的数据 >-------------------------------------------------------------------- > 返回值: integer >==================================================================== */ string dw_sql,dw_style string dw_syntax,dw_syntax_error,dw_create_error boolean lb_flag = false string ls_data,ls_display string ls_value datastore dw_new dw_new = create datastore as_dw.Modify(as_dw_column + ".ddlb.case='any'") as_dw.modify(as_dw_column + ".ddlb.vscrollbar='yes'") if as_table_condition = '' or isnull(as_table_condition) then dw_sql = "select distinct " + as_table_display + ',' + as_table_data + " from " + as_table else dw_sql = "select distinct " + as_table_display + ',' + as_table_data + " from " + as_table + ' where ' + as_table_condition end if dw_style = "style(type=grid)" dw_syntax = sqlca.syntaxfromsql(dw_sql, dw_style, dw_syntax_error) if len(dw_syntax_error) > 0 then messagebox("提示", "构造sql数据源错误: " + dw_syntax_error) return - 1 end if dw_new.create(dw_syntax,dw_create_error) if len(dw_create_error) > 0 then messagebox("提示", "创建数据窗口错误: " + dw_create_error) return - 1 end if dw_new.settransobject(sqlca) dw_new.retrieve() long i,ll_rowcount ll_rowcount = dw_new.rowcount() if ll_rowcount > 0 then for i = 1 to ll_rowcount ls_display = string(dw_new.GetItemString(i,as_table_display)) ls_data = string(dw_new.GetItemString(i,as_table_data)) if not lb_flag then ls_value = as_dw_column + ".values='" lb_flag = true else ls_value += "/" end if ls_value += Trim(ls_display) + "~t" + Trim(ls_data) next ls_value += "'" if as_dw.Modify(ls_value) <> "" then return - 1 end if else return - 1 end if return 0
函数调用
gf_dw_ddlb(dw_1,'name',sqlca,'user','name','id')