访问VBA - 在子窗体中添加新行

时间:2011-03-02 14:31:45

标签: ms-access access-vba

我希望有人能帮助我! :)实际上我最近和我的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

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我认为您想要的是DoCmd.FindNext

之后的rst.MoveNext

执行此类操作而不必涉及在表单上记录记录的另一种方法是打开第二个记录集并使用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