标题:大家看看这段代码有什么问题
只看楼主
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
结帖率:91.67%
已结贴  问题点数:10 回复次数:8 
大家看看这段代码有什么问题
父表EI在程序运行中已打开
子表EI1是空的
我的目标是将父表中指定字段的数据导入子表
  SELECT 2
  USE Ei1  &&在工作区2打开子表
  nFldCount =AFIELDS(aFldList,"B")
  K=RECCOUNT()
  INDEX TO ExportID ON 姓名+身份证号
  SELECT Ei
  SET RELATION TO 姓名+身份证号 INTO B
  SCAN
    SELECT B
    IF .NOT. EOF("B")
      REPLACE &SalaryYear1 WITH Ei.年薪  && SalaryYear1是表示子表中需要导入年薪数据年度字段变量,在程序
                                            运行中进行赋值。
    ELSE
      K=K+1
      APPEND BLANK
      REPLACE 序号 WITH K,姓名 WITH Ei.姓名,身份证号 WITH Ei.身份证号,...
    ENDIF
    SELECT Ei
  ENDSCAN

主表中共有4575条记录,可导入时,总有6条记录导入不了,不知什么原因,请高手指正!!!
搜索更多相关主题的帖子: 身份证号 工作区 姓名 
2013-12-21 19:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:4 
有邏輯錯誤,不是有語法錯誤。

授人以渔,不授人以鱼。
2013-12-21 20:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
你這是基於Ei創建Ei1,不知道誰教你用set relation to的。

授人以渔,不授人以鱼。
2013-12-21 21:05
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:4 
用select不行吗?
2013-12-21 21:13
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
得分:0 
费了半天劲才查出问题,代码没问题,是数据库出问题了,下属报数据报重了,那6条不能导出的记录是重复的,一个人有两条记录。删除了就没事了。

2楼说是逻辑错误,不知依据是什么。
2013-12-21 21:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
找到了原因還沒意識到這是邏輯漏洞,無語。

授人以渔,不授人以鱼。
2013-12-23 20:19
b土木丁口
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:264
专家分:189
注 册:2013-9-12
得分:4 
有邏輯錯誤,不是有語法錯誤。
2013-12-24 11:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
第一,這種追加記錄創建數據表的方法——指利用子表記錄指針處於表末尾的技巧——依賴於主表記錄在索引字段上是無重複的,若非如此,則此方法必定無效,將會覆蓋重複的數據。但這仍然不算是很嚴重的問題,因為當你確定主表記錄是無重複的時候,這方法確實可用,但問題卻在於,實際上,當主表記錄是無重複的時候,根本就不需要使用關聯(set relation),直接append就可以了,使用關聯,只是增加虛動作,降低效率,何況,還附加了前述的隱患,此其二。直接append,適用於主表記錄重複和無重複的狀況,是通用的。

要檢查主表記錄是否有重複,只在主表上索引檢查即可,無需對子表關聯。檢查重複記錄,先建立索引,然後遍曆一次所有記錄,每次都用一個內存變量記下上一條記錄的值,與當前記錄的值比較,看是否相符,若相符,就是重複記錄,若不相符,則用當前記錄的值替代那個中間變量,如此一次遍曆就能找到重複的記錄,是循環次數最少的算法,比任何篩選記錄集的方法都高效得多——篩選至少要一次遍曆甚至多次還要創建臨時表佔用資源、釋放垃圾等多餘動作。

[ 本帖最后由 TonyDeng 于 2013-12-24 12:14 编辑 ]

授人以渔,不授人以鱼。
2013-12-24 12:07
baizhg
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-12-30
得分:0 
TonyDeng,还是你的思路清晰。
2013-12-30 18:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-425506-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.231195 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved