Member 13550326 Ответов: 4

Ссылка на объект не задана и экземпляр объекта


это мой код для отображения данных на экране во время загрузки формы.
SqlQuery = "Select * from Ledgers"
Sqlcommand = New MySqlCommand(SqlQuery, Conn)
count = Sqlcommand.ExecuteScalar
Da.SelectCommand = Sqlcommand
Da.Fill(Ds, "LEDG")
CmbFind.DataSource = Ds.Tables("LEDG")
CmbFind.ValueMember = "Name"
CmbFind.DisplayMember = "Name"
Rc = Ds.Tables("LEDG").Rows.Count
Rc = Rc - 1
TxtName.Text = Ds.Tables("LEDG").Rows(Rc)("Name")
CmbGrp.Text = Ds.Tables("LEDG").Rows(Rc)("Grp")
TxtAdd1.Text = Ds.Tables("LEDG").Rows(Rc)("Add1")
TxtAdd2.Text = Ds.Tables("LEDG").Rows(Rc)("Add2")
CmbCity.Text = Ds.Tables("LEDG").Rows(Rc)("City")
TxtDist.Text = Ds.Tables("LEDG").Rows(Rc)("Dist")
TxtPIN.Text = Ds.Tables("LEDG").Rows(Rc)("pincode")
DBState.Text = Ds.Tables("LEDG").Rows(Rc)("state")
TxtEmail.Text = Ds.Tables("LEDG").Rows(Rc)("email")
TxtPhone.Text = Ds.Tables("LEDG").Rows(Rc)("Landline")
TxtMob.Text = Ds.Tables("LEDG").Rows(Rc)("Mobile")
TxtVAT.Text = Ds.Tables("LEDG").Rows(Rc)("VATNO")
TxtCST.Text = Ds.Tables("LEDG").Rows(Rc)("CSTNO")
TxtGST.Text = Ds.Tables("LEDG").Rows(Rc)("GSTNO")
TxtPAN.Text = Ds.Tables("LEDG").Rows(Rc)("PAN")
If Not IsDBNull(Ds.Tables("LEDG").Rows(Rc)("OpBal")) Then
    TxtOpBal.Text = Ds.Tables("LEDG").Rows(Rc)("OpBal")
End If
If Not IsDBNull(Ds.Tables("LEDG").Rows(Rc)("BalType")) Then
    DbcDrCr.Text = Ds.Tables("LEDG").Rows(Rc)("BalType")
End If
Da.Dispose()

он работает нормально, если я запускаю его непосредственно во время загрузки формы, но если я создаю функцию как

Public Sub fieldDisp()
        Try

            SqlQuery = "Select * from Ledgers"
            Sqlcommand = New MySqlCommand(SqlQuery, Conn)
            count = Sqlcommand.ExecuteScalar
            Da.SelectCommand = Sqlcommand
            Da.Fill(Ds, "LEDG")
            FrmAccMast.CmbFind.DataSource = Ds.Tables("LEDG")
            FrmAccMast.CmbFind.ValueMember = "Name"
            FrmAccMast.CmbFind.DisplayMember = "Name"
            Rc = Ds.Tables("LEDG").Rows.Count
            Rc = Rc - 2
            FrmAccMast.TxtName.Text = Ds.Tables("LEDG").Rows(Rc)("Name")
            FrmAccMast.CmbGrp.Text = Ds.Tables("LEDG").Rows(Rc)("Grp")
            FrmAccMast.TxtAdd1.Text = Ds.Tables("LEDG").Rows(Rc)("Add1")
            FrmAccMast.TxtAdd2.Text = Ds.Tables("LEDG").Rows(Rc)("Add2")
            FrmAccMast.CmbCity.Text = Ds.Tables("LEDG").Rows(Rc)("City")
            FrmAccMast.TxtDist.Text = Ds.Tables("LEDG").Rows(Rc)("Dist")
            FrmAccMast.TxtPIN.Text = Ds.Tables("LEDG").Rows(Rc)("pincode")
            FrmAccMast.DBState.Text = Ds.Tables("LEDG").Rows(Rc)("state")
            FrmAccMast.TxtEmail.Text = Ds.Tables("LEDG").Rows(Rc)("email")
            FrmAccMast.TxtPhone.Text = Ds.Tables("LEDG").Rows(Rc)("Landline")
            FrmAccMast.TxtMob.Text = Ds.Tables("LEDG").Rows(Rc)("Mobile")
            FrmAccMast.TxtVAT.Text = Ds.Tables("LEDG").Rows(Rc)("VATNO")
            FrmAccMast.TxtCST.Text = Ds.Tables("LEDG").Rows(Rc)("CSTNO")
            FrmAccMast.TxtGST.Text = Ds.Tables("LEDG").Rows(Rc)("GSTNO")
            FrmAccMast.TxtPAN.Text = Ds.Tables("LEDG").Rows(Rc)("PAN")
            FrmAccMast.TxtOpBal.Text = Ds.Tables("LEDG").Rows(Rc)("OpBal")
            FrmAccMast.DbcDrCr.Text = Ds.Tables("LEDG").Rows(Rc)("BalType")
            Da.Dispose()

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub


и вызовите эту функцию во время загрузки формы по
FieldDisp()

он возвращает сообщение об ошибке
ССЫЛКА НА ОБЪЕКТ НЕ ЗАДАНА И ЭКЗЕМПЛЯР ОБЪЕКТА.

пожалуйста помочь.

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

Новичок в программировании ,поэтому ничего особенного не пробовал.

Richard Deeming

Вы пытаетесь вызвать функцию из формы Load событие? Или вы пытаетесь вызвать его из конструктора?

Если вы пытаетесь вызвать его из конструктора, то вам нужно убедиться, что вы вызываете его InitializeComponent() первый. Это метод, который создает все элементы управления в вашей форме.

4 Ответов

Рейтинг:
2

Richard MacCutchan

Используйте отладчик, чтобы увидеть, какая строка вызывает сообщение об ошибке. Затем вы можете исследовать, почему эта ссылка на объект является нулевой.


Рейтинг:
2

Afzaal Ahmad Zeeshan

Единственное лучшее решение здесь-выполнить приложение в режиме отладки и запустить код построчно, чтобы найти, какая из строк проходит через это исключение. Как только вы это выясните, просто создайте экземпляр для этого типа—подсказка: используйте new ключевое слово.

Прочтите этот мой пост, чтобы узнать больше на эту тему, Что такое нулевая ошибка при выполнении кода[^].


Рейтинг:
2

Patrice T

Цитата:
он возвращает сообщение об ошибке
ССЫЛКА НА ОБЪЕКТ НЕ ЗАДАНА И ЭКЗЕМПЛЯР ОБЪЕКТА.

Чет сообщение об ошибке говорит вам также позицию ошибку, это, как правило, многие поможет, то сузить поиск.
Сообщение об ошибке говорит вам, что что-то не удалось и где, отладчик покажу вам, что было сделано, а значит, что не так, как ожидалось.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

Visual Basic / Visual Studio Video Tutorial - Базовая Отладка - YouTube[^]
Visual Basic .NET programming for Beginners - точки останова и средства отладки[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
1

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете, чтобы держать ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда вы извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, в которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы узнать, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы можете узнать!