字段值唯一性检查通用程序
出处:网络
* 程序:Only_chk.prg
* 功能:字段值唯一性检查通用程序
* 说明:将一些数据库的某些字段需要保持其唯一性的进行检查,看是否保持唯一性,如不唯一,则可能引起程序的运行错误。
* 原理:将表按这一字段从小到大排序,根据唯一性和排序特征,当前数据值必须大于前一数据值,由此来检查是否美一个记录都满足这样的要求。
* 调用方法:
* do Only_chk with 表,表的字段
* 如:do only_chk with "sample","field"
para chk_dbf,chk_field && 变量分别:被检查的数据名,被检查的字段名
set message to "正在检查数据库“&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,"警告:"+allt(str(nError))+"
处不唯一")
endif
??chr(7)
下载此程序 Only_chk.prg
2000年05月13日
另附此程序的类:请你下载一次性检查类
使用说明:
1、新建一个表单 Form1。
2、在表单上将类 Only_chk 放入,并放入一个 CommandButton 按纽 Command1。
3、在Command1的Click事件中写入thisform.only_chk1.check("TableName","FieldName")即可。
4、运行表单点击按纽即可进行唯一性检查。
[返回] |