Вставка нескольких строк из DataGridView в одну строку в Microsoft Access

#vb.net #ms-access #datagridviewcolumn

#vb.net #ms-access #datagridviewcolumn

Вопрос:

Я пытаюсь вставить несколько строк из DataGridView в одну строку в таблице Microsoft Access. Приложение представляет собой систему торговых точек.

Я смог добавить несколько строк из datagrid в таблицу базы данных, но это сохраняет их отдельно в таблице. Я хочу, чтобы это было сохранено в одной строке таблицы базы данных.

 Private Sub btn_Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Save.Click
    Try
        Using cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" amp; Application.StartupPath amp; "inventory1.accdb")
            cn.Open()
            For Each row As DataGridViewRow In dgv_order_cart.Rows
                Using cmd2 As New OleDbCommand("INSERT INTO tblTransaction (Product_Name,Price,Qty,Amount) VALUES (@Product_Name,@Price,@Qty,@Amount)", cn)
                    cmd2.Parameters.AddWithValue("@Product_Name", OleDbType.VarChar)
                    cmd2.Parameters.AddWithValue("@Price", OleDbType.Currency)
                    cmd2.Parameters.AddWithValue("@Qty", OleDbType.Decimal)
                    cmd2.Parameters.AddWithValue("@Amount", OleDbType.Currency)

                    With cmd2
                        .Parameters("@Product_Name").Value = row.Cells(0).Value
                        .Parameters("@Price").Value = row.Cells(1).Value
                        .Parameters("@Qty").Value = row.Cells(2).Value
                        .Parameters("@Amount").Value = row.Cells(3).Value
                    End With

                    cmd2.ExecuteNonQuery()
                End Using
            Next
            'End Using 'You probably want to catch more specific exceptions
            'and handle them separately
        End Using
    Catch ex As Exception 'You probably want to catch more specific exceptions
        'and handle them separately
        'MessageBox.Show(ex.Message)
    End Try
    MessageBox.Show("TRANSACTION INSERTED SUCCESFULLY")
End Sub
  

Я хочу, чтобы несколько записей из datagridview были сохранены в одной строке в таблице базы данных.

Комментарии:

1. Зачем вам сохранять несколько значений в одной записи? Это ненормализованная структура. Какие именно данные вы хотите объединить в одно поле? В цикле объедините значения в строковую переменную CSV. Затем вне цикла запустите действие INSERT с этой переменной.

2. Почему каждая строка DataGridView НЕ должна быть отдельной записью? Похоже, что в записях отсутствует идентификатор, который связывал бы элементы с одной и той же транзакцией. Должна ли также быть дата транзакции?

3. Это похоже на таблицу сведений о заказе. Не объединяйте строки в таблице в одну запись. Что вам нужно, так это поле идентификатора заказа, которое будет использоваться для каждой записи в деталях заказа. Это будет исходить из первичного ключа таблицы Orders, которая будет содержать дату заказа, клиента и т.д.

4. @June7, спасибо за понимание. Программа является программным обеспечением для торговых точек. Вы знаете, что клиент может купить более одного товара в магазине, я хочу, чтобы все приобретенные товары были в одной строке базы данных. Я по-прежнему буду генерировать автоматический идентификатор для каждой транзакции, но я хочу, чтобы все товары, приобретенные клиентом, имели один идентификатор транзакции. А также, когда я вызываю идентификатор транзакции в отчете, он должен отображать все товары, приобретенные конкретным клиентом

5. Тем не менее, как также сказала @Mary, каждый элемент должен быть отдельной записью с внешним ключом, относящимся к родительской записи заказа. Запись заказа будет содержать идентификатор заказа, имя клиента, дату. Идентификатор заказа также будет сохранен как внешний ключ для каждой записи продукта в OrderDetails. Объединение в одну запись действительно не имеет смысла. Пришлось бы объединить в одну длинную строку. Или удалите эти сведения и сохраните только общую сумму продажи в записи заказа.