回 帖 发 新 帖 刷新版面

主题:主索引不起作用

各位高手请指教!
我在一个表单中给一个表中输产品信息时,设置了产品编号为主索引,在进行产品录入时出了两个问题:
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个回复)

沙发

說的不是很清楚,但可以給你一個方向:
  不知你這一段代碼是什麼事件,貌似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

板凳

1、我想楼主对主索引还是不明白。在表设计器里建立的主索引是复合结构索引,本身就不允许有重复值存在。如果你想追加一条有重复值的记录,会报错。所以你的查找语句纯属多余。只要做一个出错处理就可以了。再者既然有索引,查找语句seek要比locate for效率高得多。
2、repl this.value with stu.xu
这句好像也有问题吧。
3、要想避免追加空记录,可以
if !empty(this.value)
append blank
else
.......
endif

3 楼


可以能是字段中空格的影响,试试:
loca for alltrim(stu.xu)==alltrim(this.value)

4 楼

难道可以有两个空白纪录吗?

5 楼


感谢大家出手!
可以看出,各位对VF的理解远远超出我的水平,希望能继续得到高手们的指点!

6 楼

问题已经OK!
谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册