设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: sagemeyou
打印 上一主题 下一主题

[窗体] 如何实现ACCESS窗体刷新后定位显示的记录!

[复制链接]
跳转到指定楼层
1#
发表于 2009-10-8 10:18:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sagemeyou 于 2009-10-11 08:16 编辑

Private Sub acct_1st_DblClick(cancel As Integer)
    Dim seq_q As Long, no As Long, recno As Long
    DoCmd.SetWarnings False
    seq_q = DLookup("seq", "gld_460_1st_sum", "acct_1st='" & acct_1st & "'")
    recno = DCount("*", "gld_460_1st_sum1", "seq_no<=" & seq_no & "")
    If seq_q = 1 Then
       no = DCount("*", "gld_460_1st_sum1", "acct_no='" & acct_1st & "'")
       If no = 1 Then
          DoCmd.RunSQL " insert into gld_460_1st_sum1 select * from gld_460_1st_sum  where acct_no='" & Me.acct_1st & "' and seq=2 "
       Else
          DoCmd.RunSQL "delete from gld_460_1st_sum1 where seq>1 and acct_no='" & Me.acct_1st & " '"
       End If
    ElseIf seq_q = 2 Then
       no = DCount("*", "gld_460_1st_sum1", "acct_no='" & Mid(acct_1st, 3, Len(acct_1st) - 2) & "'")
       If no = 0 Then
          DoCmd.RunSQL " insert into gld_460_1st_sum1 select * from gld_460_1st_sum  where acct_no='" & Mid(Me.acct_1st, 3, Len(Me.acct_1st) - 2) & "' and seq=3 "
       Else
          DoCmd.RunSQL "delete from gld_460_1st_sum1 where acct_no='" & Mid(Me.acct_1st, 3, Len(Me.acct_1st) - 2) & "'"
       End If
    End If
    Me.Form.Requery
      
    'Me.Form.RecordSource = "select * from gld_460_1st_sum1 order by seq_no"
    'If recno > 0 And recno <= reccnt Then
        'recno = recno + no1
        DoCmd.GoToRecord , , acGoTo, recno
    'End If
  
End Sub

说明:在窗体gld460s 中控件acct_1st 双击事件自动展开明细数据,Me.Form.Requery 后 指定到记录 DoCmd.GoToRecord , , acGoTo, recno 指针显示在窗体最下端 而不是原来的位置。

如何实现选定的记录在展开前记录的位置并且还是原来的记录?就是位置不变


源文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-10-9 16:11:21 | 只看该作者
原理就是使用Bookmark
3#
 楼主| 发表于 2009-10-10 16:05:37 | 只看该作者
谢谢 gony ,我以为我的帖子没人关注呢。 其实这是一个比较难的问题。我已经请教了好几个VBA的高手都没做出来。
4#
 楼主| 发表于 2009-10-10 16:06:05 | 只看该作者
Book mark 实现不了我要的功能
5#
发表于 2009-10-10 17:50:49 | 只看该作者
其实并不难,把例库传上来吧。
6#
 楼主| 发表于 2009-10-11 07:41:08 | 只看该作者
模块太大了。
7#
发表于 2009-10-11 10:56:31 | 只看该作者

Option Compare Database 下加一句:
Public js As Integer       '用于记忆双击时的CurrentRecord

然后将Me.Form.Requery后面的
Me.Recordset.Move 3
改为         
   Me.Recordset.Move js - 1
8#
 楼主| 发表于 2009-10-14 09:04:05 | 只看该作者
本帖最后由 sagemeyou 于 2009-10-14 09:07 编辑

谢谢koutx,我的解决的方法如下:
Private Sub acct_1st_DblClick(cancel As Integer)
    Dim seq_q As Long, no As Long, recno As Long
    Dim rec_no As String
    Dim f_count As Integer, f_st As Integer
    Dim c_count As Integer, c_st As Integer
    Dim t_count As Integer
    Dim s_count As Integer, m_count As Integer
   '获取当前记录的记录数和子窗体的高度
    f_count = Me.Recordset.AbsolutePosition + 1
    f_st = Me.CurrentSectionTop
    c_count = f_count
    c_st = f_st
   
    '循环计算得到顶端记录数t_count
    While c_st > 240
       Me.Recordset.MovePrevious
       c_count = Me.Recordset.AbsolutePosition + 1
       c_st = Me.CurrentSectionTop
      
    Wend
       t_count = c_count
       m_count = f_count - t_count
       Me.Recordset.Move m_count
    '生成明细记录
    DoCmd.SetWarnings False
    seq_q = DLookup("seq", "gld_460_1st_sum", "acct_1st='" & acct_1st & "'")
    recno = Me.Recordset.AbsolutePosition + 1
   
    rec_no = Me.SelHeight
    If seq_q = 1 Then
       no = DCount("*", "gld_460_1st_sum1", "acct_no='" & acct_1st & "'")
       If no = 1 Then
          DoCmd.RunSQL " insert into gld_460_1st_sum1 select * from gld_460_1st_sum  where acct_no='" & Me.acct_1st & "' and seq=2  "
       Else
          DoCmd.RunSQL "delete from gld_460_1st_sum1 where seq>1 and left(trim(seq_no),len(trim('" & Me.seq_no & "')))=trim('" & Me.seq_no & "')"
       End If
    ElseIf seq_q = 2 Then
       no = DCount("*", "gld_460_1st_sum1", "acct_no='" & Mid(acct_1st, 3, Len(acct_1st) - 2) & "'")
       'no = DCount("*", "gld_460_1st_sum1", "acct_no='" & acct_1st & "'")
       If no = 0 Then
          DoCmd.RunSQL " insert into gld_460_1st_sum1 select * from gld_460_1st_sum  where acct_no='" & Mid(Me.acct_1st, 3, Len(Me.acct_1st) - 2) & "' and seq=3 "
          'DoCmd.RunSQL " insert into gld_460_1st_sum1 select * from gld_460_1st_sum  where acct_no='" & Me.acct_1st & "' and seq=3 "
       Else
          DoCmd.RunSQL "delete from gld_460_1st_sum1 where acct_no='" & Mid(Me.acct_1st, 3, Len(Me.acct_1st) - 2) & "'"
          'DoCmd.RunSQL "delete from gld_460_1st_sum1 where acct_no='" & Me.acct_1st & "'"
       End If
    End If
   
    '刷新窗体 并 定位原来记录
    Me.Form.Requery
    Me.Recordset.MoveLast
    'SendKeys "{PGDN}"
    s_count = Me.Recordset.AbsolutePosition + 1
    m_count = t_count - s_count
    Me.Recordset.Move m_count
    m_count = f_count - t_count
    Me.Recordset.Move m_count

End Sub

缺点是当选择倒数最后的几条记录双击前和双击后位置变动。其它的双击都正常
9#
发表于 2009-10-14 20:43:27 | 只看该作者
以问题的解决为目的;以简单高效为追求。

点击这里给我发消息

10#
发表于 2014-7-6 05:32:55 来自手机 | 只看该作者
看看了!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-5-13 16:26 , Processed in 0.121245 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表