【问题标题】:Access VBA - Add new row in a subform onAccess VBA - 在子窗体中添加新行
【发布时间】:2011-03-03 06:49:55
【问题描述】:

我希望这里有人可以帮助我! :) 实际上我最近用我的 VBA 碰壁了。我尝试制作一个搜索表单以在 Access 数据库中查找某些特定字段。我成功地从 SQL 查询中接收到我需要的信息(姓名、地点等),但是当我尝试将所有这些信息放入子表单时,我失败了。我在互联网上找到了下面的代码,除了程序不会崩溃之外,它绝对没有任何作用。我真正的问题(我认为)是我不知道在“addNewRecord”之后添加价值的正确合成器。

Set dbs = CurrentDb

WriteToATextFile (sqlquery)
Set rst = dbs.OpenRecordset(sqlquery)


rst.MoveFirst
Do While Not rst.EOF

   If Me!sfrm_recherche_cours.Form.Dirty Then
        Me!sfrm_recherche_cours.Form.Dirty = False
    End If

    Me!sfrm_recherche_cours.SetFocus
    MsgBox rst!titre_cours
    DoCmd.GoToRecord , , acNewRec
    txt_sigle_cours = rst!sigle_cours
    txt_titre_cours = rst!titre_cours
    txt_nrc_cours = rst!titre_cours
    txt_faculte_cours = rst!faculte_cours


   rst.MoveNext
Loop

我试图在这个网站上找到一些看起来像我的问题的东西,但我什么都没有......所以,如果你能让我走上正确的道路,我会很高兴:)

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    您似乎是从主窗体运行,但您没有向控件添加对子窗体的引用,它应该是:

    Set dbs = CurrentDb
    
    WriteToATextFile (sqlquery)
    Set rst = dbs.OpenRecordset(sqlquery)
    
    
    rst.MoveFirst
    Do While Not rst.EOF
    
       If Me!sfrm_recherche_cours.Form.Dirty Then
            Me!sfrm_recherche_cours.Form.Dirty = False
        End If
    
        Me!sfrm_recherche_cours.SetFocus
        MsgBox rst!titre_cours
        DoCmd.GoToRecord , , acNewRec
        Me!sfrm_recherche_cours.Form.txt_sigle_cours = rst!sigle_cours
        Me!sfrm_recherche_cours.Form.txt_titre_cours = rst!titre_cours
        Me!sfrm_recherche_cours.Form.txt_nrc_cours = rst!titre_cours
        Me!sfrm_recherche_cours.Form.txt_faculte_cours = rst!faculte_cours
    
    
       rst.MoveNext
    Loop
    

    但是,简单地运行附加查询并重新查询子表单通常更容易。

     sSQL="INSERT INTO MySubformTable " _
       & "(sigle_cours, titre_cours, nrc_cours, faculte_cours) " _
       & "SELECT sigle_cours, titre_cours, nrc_cours, faculte_cours " _
       & "FROM SomeOtherOrEvenTheSameTable " _
       & "WHERE SomeField=SomeNumber"
    
     dbs.Execute sSQL, dbFailOnError
     Me!sfrm_recherche_cours.Form.Requery
    

    【讨论】:

    • 谢谢!!!昨天晚些时候我只是想了一个这样的解决方案,但我不知道该怎么做......你拯救了一天! :)
    【解决方案2】:

    使用记录集对象很容易 我!sfrm_recherche_cours.Form.Recordset.AddNew

    【讨论】:

    • 我只收到一条错误消息,提示“对象变量或未定义块”。 VBA 似乎无法识别 Recordset。你知道为什么吗?
    • 您是否为子表单设置了 Recordsource
    【解决方案3】:

    我认为你想要的是紧跟在rst.MoveNext 之后的DoCmd.FindNext

    在不必涉及在表单上导航记录的情况下执行这种操作的另一种方法是打开第二个记录集并使用 rst2.AddNew 创建新记录并使用 rst2.update 完成记录

    块看起来像这样

    dim rstemployees as RecordSet
    
    ''Outside the loop
    Set rstEmployees = _
       dbsNorthwind.OpenRecordset("Employees", dbOpenDynaset)
    
    '' other stuff happens
    Do While Not rst.EOF
        rstEmployees.AddNew
        rstEmployees!EmpName = "Fred"
        rstEmployees.Update
    Loop
    '' more stuff
    
    rstEmployees.Close
    set rstEmployees = Nothing
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      相关资源
      最近更新 更多