2016-09-15 3 views
1

Мой проект - приложение заказов, в котором пользователи могут вводить заказы от разных клиентов, используя UltraGrid для ввода и редактирования данных. Когда клавиша Delete нажата на клавиатуре, она запрашивает MsgBox, чтобы пользователь мог подтвердить, что они хотят удалить выбранную строку, и если да, то она запускает запрос DELETE для удаления этой строки из базы данных.Вызов подпрограммы как части транзакции SQL

У меня также есть кнопка «Сохранить», чтобы пользователь мог сохранить заказ/изменения, внесенные в заказ. В идеале я хочу, чтобы строка в сетке временно удалялась, поскольку, если пользователь не сохраняет заказ, строка заказа не должна удаляться постоянно из базы данных.

Если я поместил запрос DELETE в отдельную подпрограмму, могу ли я затем вызвать эту подпрограмму из моего класса, которая сохраняет ее как часть транзакции?

Похоже, что это не сработает, так как мне нужно будет не только вызвать запрос, но и каким-то образом временно сохранить удаленную строку, чтобы он знал, какие данные удалять в транзакции, а также как переменная Boolean, чтобы сказать, есть ли какие-либо данные для удаления ...

Есть ли более простые способы сделать это? Будет ли вышеуказанный способ работать?

+0

Является ли это для ** MS-Access ** (как отмечено) или для ** SQL Server ** (что подразумевает тэг 'tsql') –

+1

@marc_s извините, это для MS-Access, я, должно быть, неправильно использовал тег, не понимая, что это было для SQL Server – David

ответ

2

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

Try 
    Dim Dc As New OleDbCommand 
    Dim rowcode As String = "" 

     rowcode = dr.Item("Product_Code").Value 

Изменен:

Try 
    Dim Dc As New OleDbCommand 
    Dim rowcode As String = "" 

     rowcode = dr.Item("Product_Code", DataRowVersion.Original) 
1

Простой способ сделать это, сохраняет все ваши изменения в памяти (дополнения, изменения и удаления), а затем синхронизирует их с базой данных при нажатии кнопки «Сохранить».

Возможно, вам понадобится действие AJAX для добавления операции на серверной стороне и клиентский скрипт для обновления строки в сетке.

1

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

Если вы хотите обновить локальный источник данных только нажатием кнопки «Сохранить», вы можете установить UpdateMode сетки в OnUpdate. Затем вам нужно будет вызвать метод сетки UpdateData. Опять же, это обновит ваш локальный источник данных. Как и когда локальный источник данных будет обновлять базовую базу данных, нет ничего общего с сеткой. Поэтому в зависимости от типа локального источника данных вам необходимо будет обрабатывать проверку удаленных строк, прежде чем отправлять обновленные данные обратно в базу данных.

+0

См. Приведенное выше изменение; Я теперь добавил в код удаления в запросе Сохранить ... Как я могу передать удаленные данные с помощью того же 'DataSet'? – David

+0

Если вы установили UpdateMode в OnUpdate, вам нужно вызвать метод UpdateData через UltraGrid, когда нажата кнопка «Сохранить». Это обновит набор данных DataSet. – wnvko