Venu Gopal Mulavana Kayamkulam Ответов: 1

Оператор множественного выбора для набора данных работает неправильно


Указанный код работает не идеально. Однако,
stock As PAYMENT
в
DataFilterQuery2
не показывается в результате, если
PAYMENT
меньше 1

Как это будет исправлено?

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

Dim MyDataSet As New DataSet

Dim StockBalance As Double = StockOpeningBalance

DataFilterCondition = " Where edate>=@Me.dtpAccountFrom.Value.Date And edate<=@Me.dtpAccountTo.Value.Date"

DataFilterQuery1 = "Select edate As EDATE, pledgerno As REFNO, stock As RECEIPT, 0 As PAYMENT, balance As BALANCE From pledger " & DataFilterCondition & " Order By edate, pledgerno"

DataFilterQuery2 = "Select edate As EDATE, pledgerno As REFNO, 0 As RECEIPT, stock As PAYMENT, balance As BALANCE FROM redemption " & DataFilterCondition & " Order By edate, pledgerno"

Using MyConnection As OleDb.OleDbConnection = MdlCommonCodes.GetConnection, MyDataAdapter As New OleDb.OleDbDataAdapter(DataFilterQuery1, MyConnection)

     MyDataAdapter.SelectCommand.Parameters.Add("@Me.dtpAccountFrom.Value.Date", OleDb.OleDbType.Date).Value = Me.dtpAccountFrom.Value.Date

     MyDataAdapter.SelectCommand.Parameters.Add("@Me.dtpAccountTo.Value.Date", OleDb.OleDbType.Date).Value = Me.dtpAccountTo.Value.Date

     MyDataAdapter.Fill(MyDataSet, 0)
     MyDataAdapter.SelectCommand.CommandText = DataFilterQuery2
     MyDataAdapter.Fill(MyDataSet, 0)
     Dim DataView As DataView = MyDataSet.Tables(0).DefaultView
     DataView.Sort = "edate"
     MyDataSet.AcceptChanges()
     Me.grdStockRegisterPreview.DataSource = MyDataSet.Tables(0)
End Using

Richard MacCutchan

Что ты имеешь в виду "не работает должным образом"?

1 Ответов

Рейтинг:
6

phil.o

То Fill() метод просто заполняет всю таблицу данными, он не добавляет их в таблицу. Таким образом, каждый последующий вызов заменяет ранее добавленные данные.
Возможно, вам придется объединить оба запроса в один. То UNION заявление было бы идеально для этого.
Операция объединения (Microsoft Access SQL) | Microsoft Docs[^]
Используйте запрос объединения для объединения нескольких запросов в один результат - доступ[^]


Richard Deeming

Вы в этом уверены? :)

объект DataAdapter.Метод Заполнения (System.Data.Всего) | Майкрософт Документы[^]
- Вы можете воспользоваться ... Fill метод несколько раз на одном и том же DataTable Если первичный ключ существует, входящие строки объединяются с соответствующими строками, которые уже существуют. Если первичный ключ не существует, входящие строки добавляются к входящему ключу. DataTable."

Если только ... DataAdapter при создании первичного ключа второй вызов должен просто добавить новые строки в таблицу.

phil.o

Это было очень давно, я помню, что мне пришлось объединить свои запросы в один при использовании DataAdapter, потому что метод Fill не добавлял данные, как я думал. Но, похоже, проблема была в другом месте. Моя вина.

Venu Gopal Mulavana Kayamkulam

Намасте Ричард ... согласно вашему ответу, я сделал это союзом.
Огромное спасибо. :)