ncostasilva Ответов: 1

Проблема загрузки базы данных access в datagridview VB


Здравствуйте Специалисты,

Я только начинаю с программирования VB для самообучения, я пытаюсь загрузить базу данных access в представление таблицы данных, я не хочу использовать SQL для этого небольшого проекта, я хотел бы просто читать и записывать данные в этот конкретный файл access.
У меня возникла проблема, что я хочу загрузить таблицу доступа в сетку данных, чтобы иметь возможность обновить ее, но по какой-то причине она никогда не загружается, и я получил ошибку. ""ссылка на объект не установлена на экземпляр объекта"

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

код.

Imports System.Data.OleDb

Public Class Edit

    Dim cmd As OleDbCommand
    Dim sql As String
    Dim dr As OleDbDataReader

    Public Sub Load()

    End Sub

    Private Sub Edit_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Load()

    End Sub

    Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
        Try
            conB()
            sql = "select * from record where ID = ?"
            cmd = New OleDbCommand(sql, conn)
            cmd.Parameters.AddWithValue("ID", DataGridView1.CurrentRow.Cells(0).Value.ToString())
            dr = cmd.ExecuteReader()

            If (dr.Read) Then

                txtID.Text = dr(0).ToString()
                txtPartNumber.Text = dr(1).ToString()
                txtPartDescription.Text = dr(2).ToString()
                txtPartLocation.Text = dr(3).ToString()
                txtPartOnHand.Text = dr(4).ToString()

            End If


        Catch ex As Exception
            MsgBox(ex.Message)

        End Try
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Try
            Dim ID, PartNumber, PartDescription, PartLocation, PartsOnHand As String

            ID = txtID.Text
            PartNumber = txtPartNumber.Text
            PartDescription = txtPartDescription.Text
            PartLocation = txtPartLocation.Text
            PartsOnHand = txtPartOnHand.Text


            sql = "update record set PartNumber=?, PartDescription=?, Partocation=?, PartsOnHand=? where ID=?"
            conB()
            cmd = New OleDbCommand(sql, conn)
            cmd.Parameters.AddWithValue("ID", ID)
            cmd.Parameters.AddWithValue("PartNumber", PartNumber)
            cmd.Parameters.AddWithValue("PartDescription", PartDescription)
            cmd.Parameters.AddWithValue("PartLocation", PartLocation)
            cmd.Parameters.AddWithValue("PartsOnHand", PartsOnHand)


            cmd.ExecuteNonQuery()
            MessageBox.Show("updated added")
            load()

            txtPartNumber.Clear()
            txtPartDescription.Clear()
            txtPartLocation.Clear()
            txtPartOnHand.Clear()
            txtPartNumber.Focus()


            conn.Close()


        Catch ex As Exception
            MessageBox.Show("Fail")

        End Try

    End Sub


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click, Button3.Click
        Try
            Dim ID As String

            ID = txtID.Text


            sql = "delete from records where ID=?"
            conB()
            cmd = New OleDbCommand(sql, conn)
            cmd.Parameters.AddWithValue("ID", ID)


            cmd.ExecuteNonQuery()
            MessageBox.Show("Record deleted")
            load()

            txtPartNumber.Clear()
            txtPartDescription.Clear()
            txtPartLocation.Clear()
            txtPartOnHand.Clear()
            txtPartNumber.Focus()


            conn.Close()


        Catch ex As Exception
            MessageBox.Show("Fail")

        End Try
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Me.Hide()

    End Sub
End Class

Richard Deeming

Не храните соединения, команды или средства чтения данных в полях уровня класса. Создайте их как локальные переменные в ваших методах, когда они потребуются, и оберните их в Using блок.

Ваш cmd, sql, и dr вместо этого все поля должны быть локальными переменными.

1 Ответов

Рейтинг:
5

OriginalGriff

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

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

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

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

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