2016-06-13 7 views
2

行ソースクエリによって生成されたリストボックス(Actual_Polygon_Area)の値を格納しようとしています。スクリプトを実行するたびに、メッセージボックスに、リストボックスの値がnullであり、行ソースによって発生していると思われることがわかります。疑わしいリストボックスにはActual_Polygon_Areaという名前が付けられています。そのフィールドを格納しようとしているフィールドは、FS_Actual_Polygonテーブル内のPolygon_Areaです。行ソースクエリによって生成されたリストボックス値を格納する

Private Sub Actual_Polygon_Save_Click() 

If IsNull(Actual_Polygon_Year) Then 
    MsgBox "Please enter a year in which this polygon received treatment" 
    Actual_Polygon_Year.SetFocus 
ElseIf IsNull(Actual_Polygon_Season) Then 
    MsgBox "Please enter the season in which this polygon received treatment" 
    Actual_Polygon_Season.SetFocus 
ElseIf IsNull(Actual_Polygon_Treatment) Then 
    MsgBox "Please select the treatment type that was completed in this polygon." 
    Actual_Polygon_Treatment.SetFocus 
ElseIf IsNull(Actual_Polygon_Notes) Then 
    MsgBox "Please write a short summary regarding treatment goals and objectives." 
    Actual_Polygon_Notes.SetFocus 
ElseIf IsNull(Actual_Polygon_Area) Then 
    MsgBox "Polygon Area is null, please enter a value" 
    Actual_Polygon_Area.SetFocus 

Else 

    Dim MyConnection As ADODB.Connection 
    Set MyConnection = CurrentProject.Connection 

    Dim rsFS_Actual_Polygon As ADODB.Recordset 
    Set rsFS_Actual_Polygon = New ADODB.Recordset 


    If IsNull(PolygonNo) Then 
     'add 
     rsFS_Actual_Polygon.Open "select * from FS_Actual_Polygon where PolygonNo= " & Actual_Polygon_ID & " and Treatment_Season= '" & Actual_Polygon_Season & "' and Treatment_Type= '" & Actual_Polygon_Treatment & "' and Project_Name = '" & Actual_Polygon_Project_Name & "' and Polygon_Area = " & Actual_Polygon_Area.Value & " and Treatment_Year = " & Actual_Polygon_Year, _ 
      MyConnection, adOpenDynamic, adLockOptimistic 

    If Not rsFS_Actual_Polygon.EOF Then 
     MsgBox "The combination of Polygon ID, treatment-year, treatment-season, and treatment type already exist. Please check the combination." 
     Actual_Polygon_Year.SetFocus 
    Else 
     With rsFS_Actual_Polygon 
     .AddNew 
      ![PolygonID] = Actual_Polygon_ID 
      ![Project_Name] = Actual_Polygon_Project_Name 
      ![Polygon_Area] = Actual_Polygon_Area.Value 
      ![Treatment_Year] = Actual_Polygon_Year 
      ![Treatment_Season] = Actual_Polygon_Season 
      ![Treatment_Type] = Actual_Polygon_Treatment 
      ![Polygon_Notes] = Actual_Polygon_Notes 
     .Update 
     End With 

     Actual_Polygon_Record.Requery 
     Actual_Polygon_New_Click 
    End If 

必要に応じて残りのコードを投稿できます。巨大なチャンクを投稿したくないだけです。

+0

んActual_Polygon_Area複数のカラムがありますか?もしそうなら、あなたはどの列を返そうとしていますか? – MoondogsMaDawg

+0

@itには3つの列がありますが、最初の列だけがテーブルに格納したい領域です。 – AlphaKevy

+0

'.Value'の代わりに' .Column(0) 'を使ってみてください。それがそれを修正するかどうかは分かりません。あなたのリストボックスは単一か複数選択ですか? – MoondogsMaDawg

答えて

1

.ItemsSelectedおよび.ItemDataメソッドを使用して、選択した行の値を見つけてリストボックスからテーブルに渡すことができます。

これは、リストボックスコントロールのかなり一般的な使い方であり、マルチセレクトコントロールを扱うよりも簡単ですが、少し面倒です。 For Each...Nextループを作成して、リストボックスで選択した行の行番号を収集し、変数に保存する必要があります。その変数を.ItemDataメソッドの引数として使用して、選択した行のバインドされた列の値を返します。

このMSDNの記事には、必要なものすべてが含まれているはずです。

EDIT:上記のソリューションは、マルチと単一選択リストボックスのために動作しますが、単一選択リストボックスのためのより好都合な方法があります:

Dim i as Integer 
i = Me!Actual_Polygon_Area.ListIndex 
If i = -1 Then 
    MsgBox "No item has been selected" 
    Exit Sub 
End If 
'Do above prior to `WITH` loop 
...'Then in your `WITH` loop: 
![Polygon_Area] = Actual_Polygon_Area.ItemData(i) 
+0

驚くばかり!その方向で私を指摘してくれてありがとう、私はそれが働くようになった!私はあなたの助けに感謝します! – AlphaKevy

関連する問題