フォームロード時にリストボックスのrowsourceを設定しようとしましたが、動作させることができません。私はボタンを介して別のフォームを読み込むことができる3つの異なるフォームがあります。この単一のフォームは、3つの主要なフォームに由来する「ID_Projekttyp」に基づいていくつかのレコードを表示します。 "ID_Projekttyp"はopenargsによって提供されます。フォームロード時にrowsourceを設定する(Access、SQL)
Private Sub Form_Load()
varSplitString = Split(Me.OpenArgs, "|")
TempVar = CInt(varSplitString(1))
MsgBox TempVar
strSQL = " SELECT tbl_Projektphasen.Bezeichnung, tbl_Projekttypen.ID_Projekttypen " & _
" FROM tbl_Projektphasen INNER JOIN tbl_Projekttypen ON tbl_Projektphasen.ID_Projektphasen = tbl_Projekttypen.moeglicheProjektphasen.Value " & _
" WHERE (((tbl_Projekttypen.ID_Projekttypen)=" & TempVar
Me.Phasenbezeichnung.RowSource = strSQL
Me.Phasenbezeichnung.Requery
End Sub
メッセージボックスには、一例として、そのエラーは、SQL文の中でなければならない取り組んでいるが、私はそれを見つけることができない(3を返します。
誰でも助けることができる?
(あなたは後に1が正しくない場合や前の3を持っている)明確なWHERE句から括弧を外し作るところ。moeglicheProjektphasenは複数値フィールドです? – June7
実際に 'TempVar'という名前の変数の代わりに' TempVar'を使うのであれば、 'TempVars!MyTempVar'を使ってクエリのTempVarsを参照するだけで、ロード時に' RowSource'を動的に変更する必要がなくなります。あなたのフォームを開くコードで 'TempVar'を設定した場合は、' OpenArgs'に渡してからあなたが開いているフォームに設定するのではなく、 'Form_Load'アクション全体が不要になります。 –
@ErikvonAsmuthあなたのアドバイスは多くのシナリオでうまく機能するかもしれませんが、Accessでフォームを再利用することは可能です - 同じフォームクラスで複数のフォームを同時に作成して開くことができます。クエリがすべての状況で機能しない場合があります。 OpenArgsは、(Variantの配列のように)柔軟性がありませんが、少なくとも新たに作成/オープンされたフォームに引数を直接渡すことは、他の場所で設定されたグローバルにアクセス可能な変数を使用するのではなく、悪い。 –