| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 822 人关注过本帖
标题:请教一个默认输入问题
只看楼主 加入收藏
yusfreedo
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-8-9
收藏
 问题点数:0 回复次数:4 
请教一个默认输入问题
  我做了一个表单,其中有一个编号栏。编号是日期加上3个数字组成。我想把编号输入工作弄简单点,也就是说日期部分直接调用上个记录的日期,后3个数字的前2个,也调用上个记录的,光标移到到编号栏的时候,刚好落在这一串数据的末尾,之间敲入一个数字,编号就输入完成。请教各位朋友,怎么实现?
搜索更多相关主题的帖子: 输入 
2008-09-10 09:20
ibmlang_002
Rank: 5Rank: 5
来 自:浙江-嘉兴
等 级:贵宾
威 望:18
帖 子:437
专家分:176
注 册:2008-8-30
收藏
得分:0 
既然是编号,那么就不要重复,以使用自动编号为好。请看如下代码:
该段程序可放在确认增加记录的click事件中
SELECT 表名
SELECT count(*) as co FROM 表名 WHERE left(ALLTRIM(编号),1,8)=allt(dtoc(date())) iNTO TABLE temp

DO CASE
   CASE LEN(ALLTRIM(STR(1+temp.co)))=1
         AA="00"+ALLTRIM(STR(1+temp2.co))
   CASE LEN(ALLTRIM(STR(1+temp.co)))=2
         AA="0"+ALLTRIM(STR(1+temp.co))
   OTHERWISE
         AA=ALLTRIM(STR(1+temp.co))
ENDCASE

thisform.text1.value=allt(dtoc(date()))+ALLTRIM(AA)
thisform.text1.Refresh

SELECT temp
USE

[[it] 本帖最后由 ibmlang_002 于 2008-9-10 12:12 编辑 [/it]]
2008-09-10 10:03
szy345
Rank: 4
来 自:江苏——南京
等 级:贵宾
威 望:14
帖 子:336
专家分:14
注 册:2008-8-6
收藏
得分:0 
如果你的编号长度一定,比如为5
就可以设置text的 inputmark 为 99999
    在你的按钮里相应的位置加如下代码:
thisform.text1.setfocus
thisform.text1.selstart=5-1
2008-09-10 10:07
午丁
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2008-3-19
收藏
得分:0 
[bo][un]yusfreedo[/un] 在 2008-9-10 09:20 的发言:[/bo]

  我做了一个表单,其中有一个编号栏。编号是日期加上3个数字组成。我想把编号输入工作弄简单点,也就是说日期部分直接调用上个记录的日期,后3个数字的前2个,也调用上个记录的,光标移到到编号栏的时候,刚好落 ...


可以做个函数自动产生并赋值给编号控件的绑定变量(直接指派编号控件)
2008-09-11 10:20
午丁
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2008-3-19
收藏
得分:0 
[bo][un]yusfreedo[/un] 在 2008-9-10 09:20 的发言:[/bo]

  我做了一个表单,其中有一个编号栏。编号是日期加上3个数字组成。我想把编号输入工作弄简单点,也就是说日期部分直接调用上个记录的日期,后3个数字的前2个,也调用上个记录的,光标移到到编号栏的时候,刚好落 ...

恕我直言,你的这种设想不甚合理,表现在“调用上个记录的日期”,如果在编号冠上一个日期值,应该是“单据”的日期,不应该是上个记录的日期!
如果都以上个记录的日期和尾号(+1),可能造成日期值偏多而使3位尾号不足(问题在于+1可能进位),容易造成重号或者断号!
我认为应该以单据的日期为准,同一个日期中有近千各数供给编号是足足有余!再假设你不删除记录,也就不会产生断号和重号!从财务制度看,编号应该是唯一的,也就是说不允许重号!

给你一段代码做参考吧(假设编号字段是字符型)

PARAMETERS driq   && 录制单据输入的日期值
cjinu=select()    && 记住当前工作区
select 表一       && 指定有编号字段的表为当前工作区
set index to 索引 && 以编号为关键字的索引
set SET FILTER TO left(编号,n)=substr(dtoc(driq),n1,n)    && 筛选字段中前若干位与日期中间若干位相同的记录
* 假设n=4,那么:全日期字符型是8位,根据你设定日期的格式取出相应的4位。
count to nJinu   && 有没有记录?
if nJinu>0   && 有记录
GO BOTTOM   && 最后一条记录
 cBianh=left(编号,n)+right("000000"+alltrim(str(val(right(编号,3))+1)),3)
else  && 没记录——这个日期的单据是第一次输入
  cBianh=substr(dtoc(driq),n1,n)+"001"
endif
set index to
set SET FILTER TO
select &cjinu
return cBianh

如果你确认在调用此函数之前,和调用本函数之后都在同一个工作区,则:可以省略以下代码:
cjinu=select()    && 记住当前工作区
select 表一       && 指定有编号字段的表为当前工作区
select &cjinu

如果你还考虑断号和重号,必须另外做函数

[[it] 本帖最后由 午丁 于 2008-9-12 23:50 编辑 [/it]]
2008-09-12 23:48
快速回复:请教一个默认输入问题
数据加载中...
 
   



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

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