Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]请问如何在连续窗体里面不使用查询生成序号

蟹仔  发表于:2009-10-03 10:11:42  
复制

要在连续窗体里面生成序号字段,从1算起,中间无断号,但不能使用查询。点击下载此附件

 

Top
金矢 发表于:2009-10-03 20:55:55

试试,是否这个意思?

 

点击下载此附件

点燃一支烟 发表于:2009-10-04 09:01:03

使用AbsolutePosition这个属性去排序不妥,你可以这样测试,当记录数足够多时,比方说超过255条,就会失效的



蟹仔 发表于:2009-10-04 11:04:16

上面的那种方法不行,不能在数据源加上条件。而且数据一多的确会失效,当我添加到348条记录的时候,14之后是154 155 接着才到 15 但后面还会出现 154 155。

我的行来源是根据代码进行变化的。要不是这样。早就可以用查询实现序号。

dim strSQL as string

strSQL = A

If Nz(A) Then strSql = strSql & A

If Nz(B) Then strSql = strSql & B

If Nz(C) Then strSql = strSql & C

.........

Me.子窗体.Form.RecordSource = strSql & Z



点燃一支烟 发表于:2009-10-04 11:50:35

呵呵,那种方法是不行的,早有人试过的,参阅http://www.accessoft.com/bbs/showtopic.asp?ID=6125  ,就导致这样的问题,不过解决这个问题应该还是可以的,既然不能用查询,当然只能用代码,实际上你的这个问题相当于取行号,下面介绍一下方法和步骤:



点燃一支烟 发表于:2009-10-04 11:51:47

一、建立模块,定义函数GetLineNumber():


 Function GetLineNumber(F As Form, KeyName As String, KeyValue)
         Dim RS As Recordset
         Dim CountLines

         On Error GoTo Err_GetLineNumber

         Set RS = F.RecordsetClone


         Select Case RS.Fields(KeyName).Type
   
            Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _
            DB_DOUBLE, DB_BYTE
               RS.FindFirst "[" & KeyName & "] = " & KeyValue
      
            Case DB_DATE
               RS.FindFirst "[" & KeyName & "] = #" & KeyValue & "#"
      
            Case DB_TEXT
               RS.FindFirst "[" & KeyName & "] = '" & KeyValue & "'"
            Case Else
               MsgBox "ERROR: Invalid key field data type!"
               Exit Function
         End Select

     
         Do Until RS.BOF
            CountLines = CountLines + 1
            RS.MovePrevious
         Loop

Bye_GetLineNumber:
      
         GetLineNumber = CountLines

         Exit Function

Err_GetLineNumber:
         CountLines = 0
         Resume Bye_GetLineNumber

      End Function



点燃一支烟 发表于:2009-10-04 11:53:52
二、将窗体“表1”内的文本框控件“序号”的控件来源设为:=GetLineNumber([Form],"编号",[编号])

点燃一支烟 发表于:2009-10-04 11:56:21
三、将“序号”控件的“tab键索引”移到顶端,即设为0。就是让其成为第一个次序索引

点燃一支烟 发表于:2009-10-04 12:00:39
点击下载此附件  干脆给你示例,该示例对以后网友解决自动编号的问题也是提供一种思路,呵呵

蟹仔 发表于:2009-10-04 15:37:26
非常感谢dengshaobin  有了这个模块,就可以抛开查询建立很复杂的排序了。

总记录:9篇  页次:1/1 9 1 :