Access交流中心

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

子窗体数据更新

over_fly111  发表于:2019-04-12 10:32:17  
复制

您好! 现状是,单击订单号能转到新窗体,数据也可以读取过来,

但是我想在订单修改录入中进行修改,点击保存,数据能在查询窗体的子窗体中显现怎么做?

现在改不了数据呢。。。

 

Top
ozh2k003 发表于:2019-04-13 08:40:46
保存记录的时候加上刷新查询窗体的代码

over_fly111 发表于:2019-04-15 08:47:40
您好! 感谢您的回复,请问能不能具体点,或者有没有例子,我想参考下 拜托了。

半夜罗 发表于:2019-04-15 08:54:30
http://www.accessoft.com/article-show.asp?id=8882,

刷新窗体数据的3种方法



over_fly111 发表于:2019-04-15 15:13:56

您好!连接看了不是很明白啊。。能不能给个例子啊。。。谢谢!

我在保存记录按钮里,只写数据刷新的代码就行?

不知为啥总说找不到子窗体呢?



over_fly111 发表于:2019-04-16 09:28:32
求解啊。。谢谢!

over_fly111 发表于:2019-04-16 11:40:23


over_fly111 发表于:2019-04-16 11:45:21

下面是保存按钮 代码 但是有错误。。

Private Sub Command116_Click()
'目前保存按钮只能新增
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
Rs.Edit
Set Db = CurrentDb()
Set Rs = Db.OpenRecordset("订单修改表", dbOpenDynaset)
Rs!订单号 = Me!订单号
Rs!购买申请单号 = Me!购买申请单号
Rs.Update
MsgBox "已保存"
End Sub




半夜罗 发表于:2019-04-16 13:36:16
半夜罗 发表于:2019-04-16 13:48:39
你的窗体加载代码太麻烦,为什么不用DAO或ADO完成,用Dlookup函数很麻烦,速度也慢。上面的保存按钮代码也不对。保存要分为新增记录时的保存和修改记录时的保存,而且保存后要关闭记录集对象,释放内存。

over_fly111 发表于:2019-04-16 14:04:08

感谢您的回复,本人初学者,很多还不是很明白,我是想写一个修改记录的保存按钮的,

但是现在根据上面的代码写完,修正的不是对应记录的数据,不知道是哪里出现的问题,

您如果有示例方便的话给我来一个吧,我看看是怎么写的。谢谢!



半夜罗 发表于:2019-04-16 15:54:48

新增记录的保存与修改记录的保存只用一个按钮,不需要两个按钮,只需加上一个判断是新增或是修改即可。

    Dim rst As DAO.Recordset        'DAO方法
    Dim strSql As String

    strSql = "SELECT * FROM [往来单据] WHERE [单据编号]='" & Me!单据编号 & "'"
    Set rst = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)

    If IsNull(Me.旧编号)  Then              '如果旧编号为空,说明新增
        rst.AddNew                                '新增单据编号字段
        rst![单据编号] = Me.单据编号
    Else                                              '否则为修改
        rst.Edit
    End If

'不管是新增或者是修改,除了主键外的字段都在下面

    rst![摘要] = Me.摘要
    rst![往来代码] = Me.往来代码
    rst![业务类型] = Me.业务类型

    Me![旧编号] = Me![单据编号]     '有了这句代码后,可以在保存后不关闭本窗体也能保存修改

    rst.Update                                '一定要更新记录集
    rst.Close                                   '关闭记录集
    Set rst = Nothing                      '释放内存

If CurrentProject.AllForms("明细账").IsLoaded = True Then Call Form_明细账.查询     '调用查询窗体的“查询过程”,刷新查询窗体

在编辑窗体上增加一个辅助文本框,命名为旧编号,双击打开后并给这个文本框斌值,用这个辅助文本框来判断是新增还是修改,如果用“Me.OpenArgs”参数也可以,但保存后在没有关闭这个窗体时,再修改保存就会出错。所以用辅助文本框(也可以不用辅助文本框,而是用一个变量代替)。



半夜罗 发表于:2019-04-16 16:07:39

  下面是加载事件  

 Dim rst As DAO.Recordset        'DAO方法

    Dim strSql As String
    Dim OrderID As String


    '如果参数为空,说明是新增
    If IsNull(Me.OpenArgs) Then
        Me.DataEntry = True
        Exit Sub

    End If


    OrderID = Me.OpenArgs
    strSql = " SELECT * FROM [往来单据] WHERE  [单据编号]='" & OrderID & "'"
    Set rst = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
    Me.摘要 = rst![摘要]
    Me.往来代码 = rst![往来代码]
    Me.业务类型 = rst![业务类型]
    Me![单据编号] = rst!单据编号
    Me![旧编号] = Me![单据编号]
    rst.Close
    Set rst = Nothing


over_fly111 发表于:2019-04-22 09:41:22

感谢您的回复。现在试了一个,好像是子窗体可以显示保存后的数据了。

我有几点不明白,

1)您写的这两段是实现同一功能两种方法?

2)Me![旧编号] = Me![单据编号]     '有了这句代码后,可以在保存后不关闭本窗体也能保存修改

If CurrentProject.AllForms("明细账").IsLoaded = True Then Call Form_明细账.查询     '调用查询窗体的“查询过程”,刷新查询窗体

这两段不是很明白,目前第二句我没写在代码里,我看子窗体数据也是保存后的呢

3)我这边查询根据例子写的,那个例子用了两个查询表,一个查询,一个是查询结果,我也不明白为什么用两个。。。



半夜罗 发表于:2019-04-22 10:59:38

1、加载事件是窗体打开时,新增记录时,没有任何数据,如果是修改数据则会显示要修改的记录(通过Me.OpenArgs参数判断)并且给辅助文本框(me.旧编号)斌值,这个文本框一旦有数据,窗体就会始终处于修改记录的状态,点无数次保存按钮都不会提示错误(记录也不会增加,只会修改)。

2、保存按钮被触发时,也给辅助文本框(me.旧编号)斌值,使窗体由新增记录状态转变成修改状态。避免新增记录时被保存后才发现数据是错的,再修改时由于窗体处于新增状态,而无法保存。这里没有用Me.OpenArgs参数的原因,Me.OpenArgs参数是只读的不能编辑,不好在这个地方给其斌值,还不如用辅助文本框方便和便于理解。所以下面的代码非常重要,有了这样的处理,就可以只用一个窗体实现新增或修改,而不需要一个新增窗体,一个修改窗体共两个窗体。

 If IsNull(Me.旧编号)  Then              '如果旧编号为空,说明新增

          rst.AddNew                                '新增状态
          rst![单据编号] = Me.单据编号
 Else                                              '否则为修改状态
          rst.Edit
 End If

       Me![旧编号] = Me![单据编号]             '这是在新增或修改之间转换的关键

    其他要写入到表中的字段..........

If CurrentProject.AllForms("明细账").IsLoaded = True Then Call Form_明细账.查询'这句的意思:如果《明细账》窗体是打开的,就调用这个窗体的查询过程,用来刷新窗体,查询过程不包含操作查询也可以写成:

If CurrentProject.AllForms("明细账").IsLoaded = True Then  Form_明细账.明细账子窗体.requery   '这样子窗体就可以刷新了

还可以用下面的方法刷新查询窗体的子窗体:

If CurrentProject.AllForms("明细账").IsLoaded = True Then  Form_明细账.明细账子窗体.SourceObject = "明细账子窗体"

数据编辑窗体(新增或修改)与查询窗体一般都不是同一个窗体,就看你想用哪种方法,条条大路通罗马,并不是绝对的哪种方法最好,各有各的优缺点。你没有附件,我也无法根据你的情况具体地说明或做一个示例。只能就一般情况而言了。不管用哪种方法刷新,前提被刷新的窗体必须是打开的



over_fly111 发表于:2019-04-22 15:58:54

最后帮我解决了这个程序的问题,非常感谢,我这个设计比较简单就用的修改,没有新增,今后有用到再参考您说的内容。

另外,我还写了个程序,同样的方法,让子窗体给新窗体赋值,但是点击后,子窗体的同样数据就变成了2行,不知道什么原因。。



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