主题:主索引不起作用
wdzhx
[专家分:0] 发布于 2009-12-28 00:01:00
各位高手请指教!
我在一个表单中给一个表中输产品信息时,设置了产品编号为主索引,在进行产品录入时出了两个问题:
1、在给表中添加新记录时这样
go top
loca for stu.xu==alltrim(this.value)
if !found()
appl blank
repl this.value with stu.xu
else
wait windows("")
endif
本来是用来检测有无重复记录的,但发现有相周的记录,没有起到作用。
2、产品编号本是主索引,不能为空的,但如果不输入编号,也能保存,实在搞不懂,难道设置主索引无效吗?
回复列表 (共6个回复)
沙发
GEORGECHIN [专家分:440] 发布于 2009-12-28 08:36:00
說的不是很清楚,但可以給你一個方向:
不知你這一段代碼是什麼事件,貌似TEXT的鍵盤事件.以下按鍵盤事件給你分析.
1.運算符中你用了"==",也就說你要精確查找.但按你的代碼,如果要找的STD.XU和你的TEXT.VALUE有大小寫之分或你的TEXT.VALUE多一空格,你是查不到數據的.
2.主索引PRIMARY或CANDIDATE,只是保證索引關鍵字不重復,不保證關鍵字為不為空.如果你的表中僅有一條空記錄,這是允許存在的.
3.建議查找語句:
LOCA FOR UPPER(ALLT(STD.XU))==UPPER(ALLT(THIS.VALUE))
IF FOUND()=.T. .AND. EMPT(THIS.VALUE)=.F.
|
|
ENDI
板凳
wzxc [专家分:9440] 发布于 2009-12-28 13:27:00
1、我想楼主对主索引还是不明白。在表设计器里建立的主索引是复合结构索引,本身就不允许有重复值存在。如果你想追加一条有重复值的记录,会报错。所以你的查找语句纯属多余。只要做一个出错处理就可以了。再者既然有索引,查找语句seek要比locate for效率高得多。
2、repl this.value with stu.xu
这句好像也有问题吧。
3、要想避免追加空记录,可以
if !empty(this.value)
append blank
else
.......
endif
3 楼
qjbzjp [专家分:8830] 发布于 2009-12-28 15:22:00
可以能是字段中空格的影响,试试:
loca for alltrim(stu.xu)==alltrim(this.value)
4 楼
LuckyLine [专家分:1940] 发布于 2009-12-28 16:11:00
难道可以有两个空白纪录吗?
5 楼
wdzhx [专家分:0] 发布于 2009-12-28 19:37:00
感谢大家出手!
可以看出,各位对VF的理解远远超出我的水平,希望能继续得到高手们的指点!
6 楼
wdzhx [专家分:0] 发布于 2009-12-28 19:47:00
问题已经OK!
谢谢!
我来回复