Member 14621280 Ответов: 1

Из записи текстового поля сохранение временно сохранено не постоянно в базе данных access


Я сделал запись из Richtextbox1, и когда я нажал кнопку Сохранить, Она была успешно сохранена, но когда я закрыл отладку и снова запустил ее, ее не было в Datagridview1, а также в базе данных Ms Access, пожалуйста, помогите мне в этом...

Примечание : когда я нажимаю кнопку AddNew без ввода значения, она говорит: "ExecuteReader requires an open and available Connection. The connection's current state is closed."

или любезно предложите добавить, отредактировать, обновить, удалить запись нового исходного кода

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

Imports System.Data.OleDb

Public Class SongEntry
    Dim Provider As String
    Dim dataFile As String
    Dim connString As String
    Dim myConnection As OleDbConnection = New OleDbConnection



    Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
        TextBox1.Clear()
        TextBox2.Clear()
        TextBox3.Clear()
        TextBox4.Clear()
        TextBox5.Clear()
        TextBox6.Clear()
    End Sub

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

    End Sub

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click

        Provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
        dataFile = "C:\Users\User\Desktop\Worship\Worship\bin\Debug\Song.accdb"
        connString = Provider & dataFile
        myConnection.ConnectionString = connString
        myConnection.Open()


        Dim str As String
        str = "Insert into MAS_SONGS([SM_CODE],[SM_EDESC],[SM_TDESC],[SM_SONGL1],[SM_SONGL2]) values (?,?,?,?,?)"
        Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)


        cmd.Parameters.Add(New OleDbParameter("SM_CODE", CType(TextBox3.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("SM_EDESC", CType(TextBox1.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("SM_TDESC", CType(TextBox2.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("SM_SONGL1", CType(TextBox4.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("SM_SONGL2", CType(TextBox5.Text, String)))



        Try

            cmd.ExecuteNonQuery()
            cmd.Dispose()
            myConnection.Close()

            TextBox1.Clear()
            TextBox2.Clear()
            TextBox3.Clear()
            TextBox4.Clear()
            TextBox5.Clear()

        Catch ex As Exception
            MsgBox("saved")

        End Try


    End Sub

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

    End Sub

    Private Sub SongEntry_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown

        If e.KeyCode = Keys.Escape Then
            Me.Close()

        End If
    End Sub

    Private Sub TextBox4_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox4.KeyPress
        If e.KeyChar = Convert.ToChar(1) Then
            DirectCast(sender, TextBox).SelectAll()
            e.Handled = True

        End If
    End Sub

    Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
        If e.KeyChar = Convert.ToChar(1) Then
            DirectCast(sender, TextBox).SelectAll()
            e.Handled = True

        End If
    End Sub

    Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress
        If e.KeyChar = Convert.ToChar(1) Then
            DirectCast(sender, TextBox).SelectAll()
            e.Handled = True

        End If
    End Sub

    Private Sub TextBox3_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox3.KeyPress
        If e.KeyChar = Convert.ToChar(1) Then
            DirectCast(sender, TextBox).SelectAll()
            e.Handled = True

        End If
    End Sub

    Private Sub TextBox5_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox5.KeyPress
        If e.KeyChar = Convert.ToChar(1) Then
            DirectCast(sender, TextBox).SelectAll()
            e.Handled = True

        End If
    End Sub


    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        MASSONGSBindingSource.RemoveCurrent()

    End Sub

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


        'for add
        TextBox1.Enabled = True
        TextBox2.Enabled = True
        TextBox3.Enabled = True
        TextBox4.Enabled = True
        TextBox5.Enabled = True
        TextBox6.Enabled = True
        ConnDB()

        Try
            mySQL = "Select SM_CODE from MAS_SONGS ORDER BY SM_CODE DESC"

            myCommand = New OleDbCommand(mySQL, myConnection)

            myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)

            If myReader.Read = True Then
                TextBox3.Text = Val(myReader(0)) + 1
            Else
                TextBox3.Text = 300001

            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            myCommand.Dispose()
            myConnection.Close()


        End Try
    End Sub

    Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles TextBox3.TextChanged



    End Sub

    Private Sub TextBox6_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox6.KeyPress
        If e.KeyChar = Convert.ToChar(1) Then
            DirectCast(sender, TextBox).SelectAll()
            e.Handled = True

        End If
    End Sub
End Class

Richard Deeming

Существует ли пустая версия базы данных Access как часть вашего проекта, настроенная на постоянное копирование в выходной каталог?

Member 14621280

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

RickZeeland

Нехорошо, используйте только копию, если новые или ваши данные базы данных будут перезаписаны !
Было бы безопаснее поместить вашу базу данных в безопасное место, например C:\MyDatabase

Member 14621280

Должен ли я дать копию поновее... и моя база данных в папке \bin\отладки\данных mydatabase.# то #

RickZeeland

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

Member 14621280

так что же мне делать

RickZeeland

Используйте 'Copy if newer' таким образом, когда вы строите свою базу данных в каталоге Bin, она не будет перезаписана.

Member 14621280

дай мне попробовать...

Richard MacCutchan

Я заметил в вашем коде, что если код сохранения выдает исключение, вы публикуете окно сообщений, отображающее слово "сохранено". Очевидно, что это не совсем правильно .

Member 14621280

Ты имеешь в виду ... я должен удалить это право?

Поймать ex как исключение
MsgBox("сохранено")

Member 14621280

Я сделал MsgBox (“A” & “B” работает нормально и успешно подключен, но когда приходит “c” в myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection) говорит, что ошибка чтения исключений” ie "ExecuteReader требует открытого и доступного соединения. Текущее состояние соединения-закрыто."


Попробуй
в MySQL = "выбрать SM_CODE от того, MAS_SONGS по SM_CODE алфавиту"
MsgBox(“A”)
myCommand = New OleDbCommand(mySQL, myConnection)
MsgBox(“B”)
myReader = myCommand.ExecuteReader(CommandBehavior.Значение closeconnection)
MsgBox(“C”)
Если мой читатель.Чтение = Истина Тогда
TextBox3.Text = Val(myReader(0)) + 1
Еще
TextBox3.Text = 300001

Конец, Если

RickZeeland

Вы, наверное, забыли о моей связи.Открыть()

Member 14621280

я открылся здесь

rivate Sub Button6_Click(sender As Object, e As EventArgs) обрабатывает Button6.Click

Поставщик = "Поставщика=Майкрософт.Туз.Oledb для.12.0;Источник Данных="
файл данных = "C:\Users\User\Desktop\Worship\Worship\bin\Debug\Song.accdb"
connString = поставщик & файл данных
myConnection.ConnectionString = connString
myConnection.Открыть()


Тусклый str как струна
str = "вставить в значения MAS_SONGS([SM_CODE],[SM_EDESC],[SM_TDESC],[SM_SONGL1],[SM_SONGL2]) (?,?,?,?,?)"
Дим объект oledbcommand cmd в качестве стр = новый объект oledbcommand (, myConnection)

Member 14621280

вы можете увидеть полный исходный код выше пожалуйста

Richard MacCutchan

Нет, вы должны отобразить детали исключения. Когда исключение поймано, оно говорит вам, что что-то в блоке try не удалось, поэтому вы не должны отображать сообщение об успехе.

Richard MacCutchan

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

Member 14621280

Можете ли вы предложить новый способ подключения БД или новый простой исходный код или любезно предложить добавить, отредактировать, обновить, удалить запись нового исходного кода

Richard MacCutchan

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

Member 14621280

я могу принять, но у меня есть ошибка, но у меня нет средств решения... что же мне делать?..

Richard MacCutchan

Я объяснил, что вам нужно сделать: используйте отладчик, чтобы узнать, что происходит в вашем коде.

Member 14621280

даже после завершения моей записи и datagridview1 не показывает эти записи

Member 14621280

я допустил какую-то ошибку, например ... я создал module.vb в том, что я не изменил местоположение базы данных, где я хранил исходную базу данных, так что она была автоматически вычтена из моей предыдущей базы данных.. так что это была проблема...теперь она работает

Member 14621280

еще один запрос... у меня есть существующая база данных ms access, и я должен включить ее в Vb.net проект... но я хочу добавить новый столбец, переименовать какой-то текст, удалить что-то в ms access, но когда я это сделал vb.net form1 или datagridview1 не показывают, что я сделал... пожалуйста помогите мне

Richard MacCutchan

Вы должны открыть новый вопрос и показать код, который не работает. И, пожалуйста, предоставьте полную информацию о проблеме. Поговорка, "это не работает", не помогает.