| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1210 人关注过本帖
标题:运行时,出现数据不匹配问题
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你这个设计是不能实现目的的,对EditBox控件的动作,要全盘改变。我已经替你修改好储存部分,现在可以分行储存数据了,但是你最初从表中提取数据出来显示的部分没有分行,这说明你整个思路存在问题:没有考虑输入时就已经分段的回车换行处理。要么你的初衷是输入时一段过,不分段的,储存时强制80个字符为一行。不过这种设计思路,仍然有麻烦。

根本原因是你不该设计这种每行一个字段的表。要替你把整个动作弄好,不是说不行,只是这个设计耗费太多无用功,这样做得不偿失。你确定要维持这种设计吗?

[ 本帖最后由 TonyDeng 于 2011-8-5 13:10 编辑 ]

授人以渔,不授人以鱼。
2011-08-05 13:04
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
回复 11楼 TonyDeng
这 VfP是什么东东 他最厉害的什么? 像C最厉害的是指针

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-05 13:09
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
我学数据库 跟它有关系末

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-05 13:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用风生钧起在2011-8-5 13:09:40的发言:

这 VfP是什么东东 他最厉害的什么? 像C最厉害的是指针


VFP是数据库编程语言,专门用于信息管理系统设计的,其长处是对数据库的处理超快,是目前最快的数据库语言。这种语言能够处理10亿条记录以内的数据,而且效率一流,如果突破这个容量,才要让位给SQL之类大型数据库。数据库的利害,是对储存在磁盘之类外部储存器上的大量文件进行读写和生成,同样的功能,用C写上千上万行代码,VFP两三条语句就完成了。写这种实用的软件,没人用C做的,那叫吃力不讨好,除非你狂妄到个人写出的程序可以与微软团队挑战。

授人以渔,不授人以鱼。
2011-08-05 13:19
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
这他吗的 犀利了

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-05 13:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
所谓学习C语言,是学习基础,其最终目的是自己用C写出的函数,可以被其他人使用,而在其他人看来,那是现成的一条指令或函数调用而已,他们多数不会知道你用C实现它耗费了多少功夫,只知道你这个东西好不好用。就如你会用C的printf()函数,但你不会知道这个函数写了多少行代码(我告诉你,它生成的二进制机器码,就占了10多K,即过万字节,你可以猜想那要敲多少字进去),你只知道它好用,就以为学会了。真正的C高手,是写出自己版本的printf()函数替代它,实现自己希望而现成没有提供的功能。只有在没有现成可用、或可用的东西达不到要求的情况下,才会考虑转入低级编程实现它。所以你不要学那些人胡说,以为学C包打天下,没用的,这种人出来,人家写一行命令能够做到的事,你要写几百行,老板会请谁?除非人家知道全世界没现成的,才会考虑找这种“高手”,这个世界没很多这种机遇给你。

授人以渔,不授人以鱼。
2011-08-05 13:34
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
回复 16楼 TonyDeng
这printf是我 过几天 发帖必问内容 我一直都不以为我学会了hello word

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-05 13:40
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
嗯嗯  我明白 现在C基本学完了 就是 一些东西还没理解 好

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-05 13:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
替楼主修改了代码,现在可以满足要求,虽然有点畸形,但运行现象似乎正常。

程序代码:

SELECT  ls_ds_person&&&&&&&选择 ls_ds_person,把指针转到表格grdds_persor所选的记录上
GO grdds_persor_activerow


&&&&&&&&&&& 先判断此记录已存在,点击保存时,对界面上的值重新保存。
SELECT ds_say
SET ORDER TO anhao
SEEK ls_ds_person.anhao
IF found()
    GO RECNO()
    FOR i=1  TO FCOUNT()&&&&&&&清空已有记录中的数据,防止变更时记录的内容少于以前记录的内容,
    againcopy=FIELD(i)
    clearrecorder=''
     replace  &againcopy  WITH clearrecorder&&&&&&&&&&而出现以前的记录内容
    ENDFOR

ELSE
    APPEND blank    
   
ENDIF

 ds_sayrecorder=RECNO()&&&&&&&&&&为打印按钮提供指针


********把编辑框内输入的内容,存入ds_say中(因为表格中有15行,所以定义DIMENSION  b(15),
    *********80为ds_say中定义的字符数)
*    DIMENSION  b(15)
    ********把编辑框内输入的内容,存ds_say中(因为表格中有15行,所以定义DIMENSION  b(15),
    *********80为ds_say中定义的字符数)
*    MESSAGEBOX(LEN(thisform.edit1.Value),0+16)
*    IF LEN(thisform.edit1.Value)<76.and.LEN(thisform.edit1.Value)=76
*        b(1)=ALLTRIM(thisform.edit1.Value)
*    ELSE
*        b(1)=substr(thisform.edit1.Value,1,76)
*        FOR  j=2 TO INT(LEN(thisform.edit1.Value)-76/80)+2
        
*        b(j)=substr(thisform.edit1.Value,80*(j-1)-3,80)
*        ENDFOR

*    ENDIF



SELECT ds_say
    replace anhao WITH ALLTRIM(ls_ds_person.anhao)&&&&&&&&&把身份证号存入到相应的表中,便于检索(因表ds_person与ds_say以anhao为关联的)

*-- by TonyDeng --
LOCAL lcBuffer, lnIndex, lcField, lnMaxWidth
lcBuffer = This.Parent.Edit1.Value
lnIndex = 2
DO WHILE !EMPTY(lcBuffer) .AND. (lnIndex <= 16)
    lcField = FIELD(lnIndex)                                    && 字段名
    lnMaxWidth = INT(LEN(EVALUATE(lcField)) / 2)                && 根据字段宽度计算截取字符数
    REPLACE (lcField) WITH LEFTC(lcBuffer, lnMaxWidth)
    lcBuffer = SUBSTRC(lcBuffer, LEN(ALLTRIM(EVALUATE(lcField))) + 1)
    lnIndex = lnIndex + 1
ENDDO 
*-------------------
    
*    replace ds_say1  WITH b(1)
*    FOR  i=2  TO  INT(LEN(thisform.edit1.Value)-76/80)+2
*        c=FIELD(i+1)
*        replace  &c with b(i)
*    ENDFOR
    
    
=.t.&&&&把打印按钮置为可用
    this.Enabled=.f.


[ 本帖最后由 TonyDeng 于 2011-8-5 14:27 编辑 ]

授人以渔,不授人以鱼。
2011-08-05 14:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
无用的代码我已经注释掉,插入的代码有标识,就那几行,没改动其余地方。
现在既可以中途敲回车换行,也可以一段过,总之当时怎么输入现在怎么复现。如果有问题,检查你提取出来显示的代码有没有做什么。

授人以渔,不授人以鱼。
2011-08-05 14:34
快速回复:运行时,出现数据不匹配问题
数据加载中...
 
   



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

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