2016-04-13 15 views
0

値をコンボボックスから文字列に変換して、その文字列を変数に追加して最終的にデータベースに追加する関数に追加する必要があります。値をAccessコンボボックスから文字列に変換する

Private Sub cbRowStudentGrade_Change() 


    Course_ID.SetFocus 
    rowCourseID = Course_ID.Text 

    StuRed_ID.SetFocus 
    rowStudentRedID = StuRed_ID.Text 

    cbRowStudentGrade.SetFocus 
    cbRowStudentGrade = cbRowStudentGrade.Column(0) 

    CurrentDb.Execute "qryInputGrades" 


    MsgBox (rowCourseID) 
    MsgBox (rowStudentRedID) 
    MsgBox (cbRowStudentGrade) 


    Requery 
    Repaint 
End Sub 

そして、ここで私は私のAccessクエリビルダでの基準として使用しています関数です: はここに私のフォームから、コンボボックスからテキストをつかむ私のサブです。

Public Function funcRowCourseID() As String 

    funcRowCourseID = rowCourseID 

End Function 


Public Function funcRowStudentRedID() As String 

    funcRowStudentRedID = rowStudentRedID 

End Function 


Public Function funcCbRowStudentGrade() As String 

    funcCbRowStudentGrade = cbRowStudentGrade 

End Function 

マイクエリ:

INSERT INTO tblRegistrationGrade (Red_ID, Course_ID, Grade) 
VALUES (funcRowStudentRedID(), funcRowCourseID(), funcCbRowStudentGrade()); 

私は、データベースとどのようなコンボボックスの値が実際にある間のデータ型の不一致があると思います。しかし、データ型の不一致があった場合、そのようなエラーはないでしょうか?私のデータベースにはshort textが必要です。

+0

私は特にあなたに答えるわけではありませんが、私はいくつかの考えを持っています:1)あなたはcombobox_afterupdateをcombobox_changeよりも使う方が良いでしょう。 2)ステートメントcbRowStudentGrade = cbRowStudentGrade.Column(0)は意味をなさない。バインドされた列が0の場合、このステートメントはすべて現在の値を自身に割り当てます。 3)公開関数には引数がないため、関数がフォームに定義されていることを意味しますが、フォームの公開関数は、フォームが開いていなければクエリで認識されません。 –

+0

投稿にもクエリを追加することもできます。 –

+0

サブ関数が変数に値を設定する前に関数が実行されているようです。 –

答えて

0

あなたはこのように複雑すぎます。

あなたは直接フォームコントロールに、あなたのINSERTクエリから参照できます。

INSERT INTO tblRegistrationGrade (Red_ID, Course_ID, Grade) 
VALUES (Forms!myForm!StuRed_ID, Forms!myForm!Course_ID, Forms!myForm!cbRowStudentGrade); 

とクエリを呼び出すことを除いて、ほぼすべてのコードを取り除きます。

ジョンが書いたように、それはcbRowStudentGrade_AfterUpdate()に入れるのがよいでしょう。


または、代わりにINSERTクエリの参照、AddNewDAO.Recordsetを使用します。そこ
How to: Add a Record to a DAO Recordset

あなたも直接データ型を気にすることなくお使いのコントロールからの値を使用することができます。

関連する問題