📄 procs.prg
字号:
** 返回中文形式的日期时间字符串
FUNC cdatetime
PARA pdt
DIME dt(6)
cdt=''
IF PARAMETERS( )=0
pdt=DATETIME()
ENDIF
dt(1)=STR(YEAR(pdt),4)
dt(2)=STR(MONTH(pdt),2)
dt(3)=STR(DAY(pdt),2)
dt(4)=STR(HOUR(pdt),2)
dt(5)=STR(MINUTE(pdt),2)
dt(6)=STR(SEC(pdt),2)
IF TYPE('pdt')='D'
cdt=dt(1)+'年'+dt(2)+'月'+dt(3)+'日'
ELSE
IF YEAR(pdt)>1900
cdt=dt(1)+'年'+dt(2)+'月'+dt(3)+'日'
ENDIF
cdt=cdt+dt(4)+'时'+dt(5)+'分'+dt(6)+'秒'
ENDIF
RETURN cdt
**新增表记录时,编号字段自动生成(+1)
FUNC newId
PARA tcAlias,tcField
IF EMPTY(tcAlias)
tcAlias=ALIAS()
ENDIF
IF EMPTY(tcField)
tcField=FIELD(1)
ENDIF
cDelSet=set("DELETED")
SET DELETED OFF
DIME maxValue[1]
SELE MAX(&tcField) FROM (tcAlias) INTO ARRAY maxValue
nSize=FSIZE(tcField,tcAlias)
nNewValue=VAL(maxValue[1])+1
cNewValue=PADL(ALLT(STR(nNewValue)),nSize,'0')
SET DELETED &cDelSet
RETURN cNewValue
** 取中文字符串的子串
func csubstr
para pch,pstart,plen
local nChinese,curch
store 0 to nChinese
for i=pstart to pstart+plen-1
curch=subs(pch,i,1)
nChinese=nChinese+iif(asc(curch)>127,1,0)
endfor
if mod(nChinese,2)=1
csub=subs(pch,pstart,plen-1)
pstart=pstart+plen-1
else
csub=subs(pch,pstart,plen)
pstart=pstart+plen
endif
plen=plen
return csub
**取得查询结果中各字段内容的最大长度
proc getFieldMaxLen
para cAlias
N=FCOUNT(cAlias)
public maxlen[N]
dime lentmp[1]
for i=1 to N
fieldname=field(i)
sele max(len(allt(&fieldname))) from &cAlias into array lentmp
maxlen[i]=lentmp[1]
endfor
**构成查询结果中的一行
FUNC getfield
PARA cAlias
N=FCOUNT(cAlias)
ch=''
FOR i=1 TO N
fieldname=FIELD(i)
DO CASE
CASE TYPE(fieldname)$"YNFBI"
cFieldValue=STR(&fieldname)
CASE TYPE(fieldname)$"DT"
cFieldValue=DTOC(&fieldname)
CASE TYPE(fieldname)$"L"
cFieldValue=IIF(&fieldname,"是","否")
CASE TYPE(fieldname)$"CM"
cFieldValue=&fieldname
ENDCASE
cFieldValue=left(cFieldValue,maxlen[i])
ch=ch+cFieldValue+' '
ENDFOR
RETURN allt(ch)
**构成查询结果的标题行
FUNC gettitle
PARA cAlias
N=FCOUNT(cAlias)
ctitle=''
FOR i=1 TO N
F=FIELD(i)
ctitle=ctitle+PADR(F,maxlen[i]+2,' ')
ENDFOR
RETURN ctitle
*** 获得Windows系统信息
function GetSysInfo
para ctype
LOCAL lcSysDir, lcWinDir, lnStringLen ,lcReturn
do case
case lower(ctype)="windir"
DECLARE LONG GetWindowsDirectory IN WIN32API ;
STRING @ lcWinDir, LONG
lcWinDir = SPACE(200) + CHR(0)
lnStringLen = GetWindowsDirectory(@lcWinDir, 200)
lcReturn = LEFT(lcWinDir,lnStringLen)
case lower(ctype)="sysdir"
DECLARE LONG GetSystemDirectory IN WIN32API ;
STRING @ lcSysDir, LONG
lcSysDir = SPACE(200) + CHR(0)
lnStringLen = GetSystemDirectory(@lcSysDir, 200)
lcReturn = LEFT(lcSysDir,lnStringLen)
endcase
return lcReturn
**取得查询结果中各字段内容的最大长度
proc getFieldMaxLen
para cAlias
N=FCOUNT(cAlias)
public maxlen[N]
dime lentmp[1]
for i=1 to N
fieldname=field(i)
sele max(len(allt(&fieldname))) from &cAlias into array lentmp
maxlen[i]=lentmp[1]
endfor
**构成查询结果中的一行
FUNC getfield
PARA cAlias
N=FCOUNT(cAlias)
ch=''
FOR i=1 TO N
fieldname=FIELD(i)
DO CASE
CASE TYPE(fieldname)$"YNFBI"
cFieldValue=STR(&fieldname)
CASE TYPE(fieldname)$"DT"
cFieldValue=DTOC(&fieldname)
CASE TYPE(fieldname)$"L"
cFieldValue=IIF(&fieldname,"是","否")
CASE TYPE(fieldname)$"CM"
cFieldValue=&fieldname
ENDCASE
cFieldValue=left(cFieldValue,maxlen[i])
ch=ch+cFieldValue+' '
ENDFOR
RETURN allt(ch)
**构成查询结果的标题行
FUNC gettitle
PARA cAlias
N=FCOUNT(cAlias)
ctitle=''
FOR i=1 TO N
F=FIELD(i)
ctitle=ctitle+PADR(F,maxlen[i]+2,' ')
ENDFOR
RETURN ctitle
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -