Member 13550326 Ответов: 2

Хранимая процедура не работает


Это процедура, которую я хочу назвать

Private Sub Display()
       TxtName.Text = Ds.Tables("LEDG").Rows(Rc)("Name").ToString
       CmbGrp.Text = Ds.Tables("LEDG").Rows(Rc)("Grp").ToString
       TxtAdd1.Text = Ds.Tables("LEDG").Rows(Rc)("Add1").ToString
       TxtAdd2.Text = Ds.Tables("LEDG").Rows(Rc)("Add2").ToString
       CmbCity.Text = Ds.Tables("LEDG").Rows(Rc)("City").ToString
       TxtDist.Text = Ds.Tables("LEDG").Rows(Rc)("Dist").ToString
       TxtPIN.Text = Ds.Tables("LEDG").Rows(Rc)("Pincode").ToString
       DBState.Text = Ds.Tables("LEDG").Rows(Rc)("State").ToString
       TxtEmail.Text = Ds.Tables("LEDG").Rows(Rc)("Email").ToString
       TxtPhone.Text = Ds.Tables("LEDG").Rows(Rc)("Landline").ToString
       TxtMob.Text = Ds.Tables("LEDG").Rows(Rc)("Mobile").ToString
       TxtVAT.Text = Ds.Tables("LEDG").Rows(Rc)("VATNO").ToString
       TxtCST.Text = Ds.Tables("LEDG").Rows(Rc)("CSTNO").ToString
       TxtGST.Text = Ds.Tables("LEDG").Rows(Rc)("GSTNO").ToString
       TxtPAN.Text = Ds.Tables("LEDG").Rows(Rc)("PAN").ToString
   End Sub


вот где я это называю

Private Sub BtnFirst_Click_1(sender As Object, e As EventArgs) Handles BtnFirst.Click
        Dim Da As New MySqlDataAdapter
        Dim Ds As New DataSet
        SqlQuery = "Select * from Ledgers"
        Sqlcommand = New MySqlCommand(SqlQuery, Conn)
        count = Sqlcommand.ExecuteScalar
        Da.SelectCommand = Sqlcommand
        Da.Fill(Ds, "LEDG")
        Rc = 0
        Display()
End Sub


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

Что я уже пробовал:

Когда я пытаюсь

Private Sub BtnFirst_Click_1(sender As Object, e As EventArgs) Handles BtnFirst.Click
        Dim Da As New MySqlDataAdapter
        Dim Ds As New DataSet
        SqlQuery = "Select * from Ledgers"
        Sqlcommand = New MySqlCommand(SqlQuery, Conn)
        count = Sqlcommand.ExecuteScalar
        Da.SelectCommand = Sqlcommand
        Da.Fill(Ds, "LEDG")
        Rc = 0
        TxtName.Text = Ds.Tables("LEDG").Rows(Rc)("Name").ToString
        CmbGrp.Text = Ds.Tables("LEDG").Rows(Rc)("Grp").ToString
        TxtAdd1.Text = Ds.Tables("LEDG").Rows(Rc)("Add1").ToString
        TxtAdd2.Text = Ds.Tables("LEDG").Rows(Rc)("Add2").ToString
        CmbCity.Text = Ds.Tables("LEDG").Rows(Rc)("City").ToString
        TxtDist.Text = Ds.Tables("LEDG").Rows(Rc)("Dist").ToString
        TxtPIN.Text = Ds.Tables("LEDG").Rows(Rc)("Pincode").ToString
        DBState.Text = Ds.Tables("LEDG").Rows(Rc)("State").ToString
        TxtEmail.Text = Ds.Tables("LEDG").Rows(Rc)("Email").ToString
        TxtPhone.Text = Ds.Tables("LEDG").Rows(Rc)("Landline").ToString
        TxtMob.Text = Ds.Tables("LEDG").Rows(Rc)("Mobile").ToString
        TxtVAT.Text = Ds.Tables("LEDG").Rows(Rc)("VATNO").ToString
        TxtCST.Text = Ds.Tables("LEDG").Rows(Rc)("CSTNO").ToString
        TxtGST.Text = Ds.Tables("LEDG").Rows(Rc)("GSTNO").ToString
        TxtPAN.Text = Ds.Tables("LEDG").Rows(Rc)("PAN").ToString
End Sub


все работает нормально
пожалуйста помочь

itsmypassion

Вы можете сделать это публичной процедурой, а не частной.

2 Ответов

Рейтинг:
1

Noumaan Ahmad

Привет Объявляю

Dim Ds As New DataSet
в начале урока
Когда вы объявляете набор данных на уровне функции то вы не можете использовать этот набор данных вне функции или вы можете использовать как это основное правило программирования область действия переменной

Private Sub Display(byVal Ds as DataSet)
       TxtName.Text = Ds.Tables("LEDG").Rows(Rc)("Name").ToString
       CmbGrp.Text = Ds.Tables("LEDG").Rows(Rc)("Grp").ToString
       TxtAdd1.Text = Ds.Tables("LEDG").Rows(Rc)("Add1").ToString
       TxtAdd2.Text = Ds.Tables("LEDG").Rows(Rc)("Add2").ToString
       CmbCity.Text = Ds.Tables("LEDG").Rows(Rc)("City").ToString
       TxtDist.Text = Ds.Tables("LEDG").Rows(Rc)("Dist").ToString
       TxtPIN.Text = Ds.Tables("LEDG").Rows(Rc)("Pincode").ToString
       DBState.Text = Ds.Tables("LEDG").Rows(Rc)("State").ToString
       TxtEmail.Text = Ds.Tables("LEDG").Rows(Rc)("Email").ToString
       TxtPhone.Text = Ds.Tables("LEDG").Rows(Rc)("Landline").ToString
       TxtMob.Text = Ds.Tables("LEDG").Rows(Rc)("Mobile").ToString
       TxtVAT.Text = Ds.Tables("LEDG").Rows(Rc)("VATNO").ToString
       TxtCST.Text = Ds.Tables("LEDG").Rows(Rc)("CSTNO").ToString
       TxtGST.Text = Ds.Tables("LEDG").Rows(Rc)("GSTNO").ToString
       TxtPAN.Text = Ds.Tables("LEDG").Rows(Rc)("PAN").ToString
   End Sub


Private Sub BtnFirst_Click_1(sender As Object, e As EventArgs) Handles BtnFirst.Click
        Dim Da As New MySqlDataAdapter
        Dim Ds As New DataSet
        SqlQuery = "Select * from Ledgers"
        Sqlcommand = New MySqlCommand(SqlQuery, Conn)
        count = Sqlcommand.ExecuteScalar
        Da.SelectCommand = Sqlcommand
        Da.Fill(Ds, "LEDG")
        Rc = 0
        Display(Ds)
End Sub


Рейтинг:
0

Maciej Los

Вы должны начать с чтения этих статей:
Область действия переменных и методов в Microsoft .NET[^]
Область действия в Visual Basic | Microsoft Docs[^]

Короче говоря: в вашем случае object reference not set to an instance of an object сообщение об ошибке говорит, что DS переменная внутри Display процедура недоступна, потому что была создана и инициирована внутри tnFirst_Click_1 процедура.

Вы можете решить эту проблему, передав dataset в качестве параметра в Display процедура (рекомендуется) или путем определения DS переменная снаружи tnFirst_Click_1 процедура (не рекомендуется).

Private Sub BtnFirst_Click_1(sender As Object, e As EventArgs) Handles BtnFirst.Click
    Dim Da As New MySqlDataAdapter
    Dim Ds As New DataSet
    'the part of code where Ds variable is initiated    
    '...
    'finally:
    Display(Ds)
End Sub

Private Sub Display(ByRef ds As DataSet)
    'your code here
End Sub


Для получения более подробной информации, пожалуйста, смотрите:
Как управлять областью действия переменной (Visual Basic) | Microsoft Docs[^]
Понимание области действия переменных[^]
Процедуры в Visual Basic | Microsoft Docs[^]
Передача аргументов по значению и по ссылке (Visual Basic) | Microsoft Docs[^]


Member 13550326

Спасибо за ваш ответ.
Уже пробовал, но получаю ошибку "Arugument not specified for parameters 'Ds' of private sub Display.

Maciej Los

Ну, наверное, вы не очень внимательно прочитали мой ответ...