2012-06-22 4 views
-1

У меня есть многомерный массив, который будет содержать 3 бита значения и значения, которые будут добавлены через цикл путем чтения из db. Когда он пришел эту строку кода:добавление значения к многомерному массиву

*MenuAccess(.Fields("GROUPNO").Value, .Fields("ITEMNO").Value, .Fields("SUBITEMNO").Value) = OKNO*

Это ударяя ошибка, "Ссылка на объект не указывает на экземпляр объекта.

Public MenuAccess(100, 30, 50) As Boolean 

Private Sub RtGetMenu_Access() 
    Try 
     Dim OKNO As Boolean 

     Erase MenuAccess 

     DBMgr = New cAdodb 

     With DBMgr 
      .openCnn(cnnSPR) 
      .sql(rst1) = "Select * from BSMENU_ACCESS where LEVELCD = '" & Trim(UserTaskLevel) & "' Order by GROUPNO " 
      .openRstRead(rst1) 

      With .rst(rst1) 
       Do While Not .EOF 
        If .Fields("GROUPNO").Value.ToString.Trim <> "" And .Fields("ITEMNO").Value.ToString.Trim <> "" And .Fields("SUBITEMNO").Value.ToString.Trim <> "" Then 
         If .Fields("LEVEL1").Value.ToString.Trim = "Y" Then OKNO = True Else OKNO = False 

         '=> ERROR: 'Object reference not set to an instance of an object.' 
         MenuAccess(.Fields("GROUPNO").Value, .Fields("ITEMNO").Value, .Fields("SUBITEMNO").Value) = OKNO 

        End If 
        .MoveNext() 
       Loop 
      End With 

      .closeRst(rst1) 
      .closeCnn(rst1) 
     End With 

     DBMgr = Nothing 
    Catch ex As Exception 
     If DBMgr.cnn(cnnSPR).State <> 0 Then 
      DBMgr.closeCnn(cnnSPR) 
      DBMgr = Nothing 
     End If 
    End Try 

End Sub 
+0

Option Строгое включение или выключение? – Steve

+0

Очевидно, что одного из этих полей не существует. Не можете ли вы просто использовать отладчик IDE, чтобы определить, какой из них возвращает null? –

+0

Поместите '.Fields (« GROUPNO »). Value',' .Fields («ITEMNO»). Value' и '.Fields (« SUBITEMNO »). Сначала сначала в локальные переменные, чтобы a) вы можете проверить' Nothing 'и b) вам не нужно дважды обращаться к ним в операциях 'IF' и' MenuAccess'. – ja72

ответ

0

Вы пропускаете инициализацию массива

Public MenuAccess(100, 30, 50) As Boolean 'Object not initialized in VB.NET 

Попробуйте

Public MenuAccess() As New Boolean(100,30,50) 

Также преобразовать поля в целые числа с Integer.TryPrase()

Dim i as Integer=-1, j as Integer=-1, k as Integer=-1 
Integer.TryParse(.Fields("GROUPNO").Value.ToString(), i) 
Integer.TryParse(.Fields("ITEMNO").Value.ToString(), j) 
Integer.TryParse(.Fields("SUBITEMNO").Value.ToString(), k) 

If i>=0 AndAlso j>=0 AndAlso k>=0 Then 
    MenuAccess(i,j,k) = OkNo 
End If 
Смежные вопросы