我希望有人能帮助我! :)实际上我最近和我的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
我试图在这个网站上找到一些看起来像我的问题的东西,但我什么都没有......所以,如果你能把我放在正确的路上,我将非常高兴:)
答案 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