📄 only_chk.prg
字号:
* 程序:Only_chk.prg
* 功能:字段值唯一性检查通用程序
* 说明:将一些数据库的某些字段需要保持其唯一性的进行检查,看是否保持唯一性,如不唯一,则可能引起程序的运行错误。
* 原理:将表按这一字段从小到大排序,根据唯一性和排序特征,当前数据值必须大于前一数据值,由此来检查是否美一个记录都满足这样的要求。
* 调用方法:
* do Only_chk with 表,表的字段,字段的最小值
* 如:do only_chk with "sample","field",0 (or " ")
para chk_dbf,chk_field && 变量分别:被检查的数据名,被检查的字段名
if !used('&chk_dbf')
use &chk_dbf in 0 share
endif
sele &chk_dbf
Value_type=type('&chk_field')
do case
case Value_type="N" or Value_type="Y"
chk_min=0
case Value_type="C"
chk_min=" "
case Value_type="D"
chk_min={}
case Value_type="T"
chk_min={}
other
messagebox("数据库“&chk_dbf.”中的字段“&chk_field.”的数据类型是“&Value_type.”,不能进行唯一性检查!",48,"错误")
retu
endcase
sele &chk_field from &chk_dbf where .T. into cursor Temp_Only_chk_dbf order by &chk_field
sele Temp_Only_chk_dbf
nError=0
go top
Field_Value_Old=chk_min
do while .not.eof()
Field_Value_New=&chk_field
*!* wait window "检查“&chk_dbf.”中“&chk_field.”的进度: "+allt(str(recn()*100/recc()))+"% 完成!" nowait
if Field_Value_New>Field_Value_Old
* 数据正确
else
* 数据不正确
nError=nError+1
do case
case Value_type="N" or Value_type="Y"
Found_vaLue=allt(str(Field_Value_New))
case Value_type="C"
Found_value=allt(Field_Value_New)
case Value_type="D"
Found_value=dtoc(Field_Value_New)
case Value_type="T"
Found_value=ttoc(Field_Value_New)
endcase
if messagebox("在检查数据库“&chk_dbf.”的字段“&chk_field.”的唯一性时,发现值为“"+Found_value+"”的记录不唯一,请检查!" ,1+48,"发现 "+allt(str(nError))+" 处不唯一性")=2
exit
endif
endif
Field_Value_Old=&chk_field
skip
enddo
sele &chk_dbf
use
sele Temp_Only_chk_dbf
use
set message to "数据库“&chk_dbf.”中字段“&chk_field.”的唯一性检查完毕!"
*!* wait window "检查完成,"+iif(nError=0,"“&chk_dbf.”中“&chk_field.”的唯一性正确!","发现 "+allt(str(nError))+" 处不唯一!") nowait
if nError>0
messagebox("因为这是唯一性检查,在正确运行程序前,需确保唯一性的正确性!",48,"警告:数据库“&CHK_DBF.”中字段“&CHK_FIELD.”有 "+allt(str(nError))+" 处不唯一")
endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -