2016-06-13 2 views
2

Я пытаюсь сохранить значение списка (Actual_Polygon_Area), созданного с помощью запроса на исходный код строки. Каждый раз, когда я запускаю сценарий, мое окно сообщения сообщает мне, что значение listbox равно null, и я подозреваю, что это вызвано источником строки. Подозреваемый список называется Actual_Polygon_Area, а поле, в котором я пытаюсь его сохранить, - Polygon_Area в таблице FS_Actual_Polygon.Хранение значения столбца, генерируемого строковым исходным запросом

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

Попробуйте использовать '.Column (0)' вместо '.Value'. Не уверен, что это исправит. Является ли ваш список одним или несколькими? – MoondogsMaDawg

ответ

1

Вы можете использовать методы .ItemsSelected и .ItemData, чтобы найти и передать значение выбранной строки из списка в таблицу.

Это довольно типичное использование элемента управления списком, и это немного проще, чем иметь дело с элементом управления с несколькими выборами, но все еще немного громоздко. Вам нужно будет создать цикл For Each...Next, чтобы собрать номер строки выбранной строки в вашем списке и сохранить в переменной. Затем используйте эту переменную в качестве аргумента метода .ItemData, чтобы вернуть значение связанного столбца для выбранной строки.

В этой статье MSDN должно быть все, что вам нужно.

EDIT: Хотя приведенное выше решение работает для нескольких и отдельных избранных ListBoxes, есть более целесообразный способ для отдельных избранных ListBoxes:

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

Смежные вопросы