2011-03-02 11 views
1

ここに誰かが私を助けてくれることを願っています! :)実際に私はVBAで最近壁に入ってきました。私は、Accessデータベースの特定のフィールドを見つけるための検索フォームを作ろうとしています。 SQLクエリーから必要な情報(名前、場所など)を正常に受け取ることができますが、このすべてをサブフォームに入れると失敗します。私はインターネット上で以下のコードを見つけ、プログラムがクラッシュしないという事実を除いて、絶対に何もしません。私の本当の問題(私は思う)は、 "addNewRecord"の後に値を追加するための正しいシンタックスを知らないということです。VBAにアクセス - サブフォームに新しい行を追加

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

ようになりますブロックメインフォームから実行していることが、あなたはあなたのコントロールにサブフォームにrefernceを追加していない、それは次のようになります。

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 
+0

ありがとう!!!私はちょうどその昨日のような解決策について考えましたが、私はそれをやる方法を知らなかった....あなたはその日を救う! :) –

0

レコードセットオブジェクト ミー!sfrm_recherche_cours.Form.Recordset.AddNewとその簡単

+0

「オブジェクト変数またはブロックが未定義です」というエラーが表示されました。 RecordsetはVBAによって認識されないようです。なぜアイデアはありますか? –

+0

サブフォーム用に設定されたレコードソースを持っていますか –

0

私が何をしたいことをせずにこの操作の同じ種類を行うにはDoCmd.FindNextすぐrst.MoveNext

後に別の方法だと思います記録

を仕上げるために、第2のレコードセットを開き、新しいレコードを作成するrst2.AddNewを用いることであろうフォーム上のレコードをnavingating伴い、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 
関連する問題