Как сравнить и вернуть несколько значений в SQL

У меня есть база данных SQL с полями [ServiceDate], [CLID], [Reading], [DueAmt], [PaidAmt], [Balance] и [Status]. Идея состоит в том, чтобы выбрать учетные записи, которые не были оплачены последние 4 месяца, и вывести результат в элемент управления Listivew с помощью VB.Net (VS18 IDE). Мне нужна помощь с примером или справкой о том, как написать этот запрос из среды Visual Studio IDE с помощью VB.Net.

Большинство других платформ, которые я посетил, не предоставляют достаточных пояснительных примечаний и кодов, чтобы получить то, что я должен делать, и извлечь из этого уроки. Кроме того, я хочу, чтобы столбец для ServiceDate в элементе управления Listview был отформатирован как краткая дата, DueAmt, PaidAmt и Balance to Currency.

Буду признателен за любую помощь Спасибо.

VS не очень хорошо разработан для написания SQL-запросов. У каждого механизма SQL есть собственная IDE, которая (обычно) намного лучше (например, SSMS для SQL Server). На какой части ты здесь застрял? Пишете SQL-запрос? Или установить результаты в список? Если вы предоставите свой существующий код, вам будет легче помочь. Кроме того, какую реляционную систему баз данных (SQL Server, Oracle, MySQL и т. д.) Вы используете?

Jacob H 30.05.2018 15:21

Вам следует разбить вашу проблему на более мелкие. У вас происходит много разных вещей. Начните с простого запроса и верните данные. Затем попробуйте поместить эти данные куда-нибудь. Затем попробуйте отформатировать данные. ect ...

the_lotus 30.05.2018 15:31

@JacobH Я могу сказать и то, и другое. Я застрял при написании запроса, чтобы получить желаемый результат, и снова да при выводе или отображении в элементе управления listview, так что [ServiceDate] форматируется по короткой дате, [Reading] по числу, [DueAmt], [PaidAmt] и [Баланс] к деньгам. В этом плане мне будет полезен пример. У меня есть элемент управления Listview с именем lsvClients для отображения такого результата. Кроме того, у меня есть поле со списком cboFilters, где я вручную ввел эти фильтры для запроса различных параметров. Обычный фильтр гласит: «Просмотреть все неоплаченные счета за последние 3 месяца», если я смогу научиться составлять очередь

Dss 31.05.2018 20:06
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я принял SQL Server, [ServiceDate] как DataTime в базе данных и [Balance] как какое-то число в базе данных.

Private Function GetOldAccounts() As DataTable
        Dim dt As New DataTable
        Using cn As New SqlConnection("Your connection string")
            Using cmd As New SqlCommand("Select * From YourTable Where [ServiceDate] < @d AND  [Balance] > 0")
                cmd.Parameters.Add("@d", SqlDbType.DateTime).Value = DateTime.Now.AddMonths(-4)
                cn.Open()
                Using dr As SqlDataReader = cmd.ExecuteReader
                    If dr.HasRows Then
                        dt.Load(dr)
                    Else
                        Return Nothing
                    End If
                End Using
            End Using
        End Using
        Return dt
    End Function

Я думал, вы сможете найти, как заполнить ListView из DataTable. ListViews отображают текстовое свойство, которое является строкой. Если вам нужны типизированные столбцы, посмотрите DataGridView, который можно легко привязать к DataTable.

Private Sub FillListView()
        Dim dt As DataTable = GetOldAccounts()
        lv.Items.Clear()
        Dim lstAccounts As New List(Of ListViewItem)
        lv.BeginUpdate() 'keeps the control from repaintinng on every iteration
        For Each r As DataRow In dt.Rows
            Dim li As New ListViewItem()
            li.Text = CDate(r("ServiceDate")).ToShortDateString
            li.SubItems.Add(r("CLID").ToString)
            li.SubItems.Add(r("Reading").ToString)
            li.SubItems.Add(r("DueAmt").ToString)
            li.SubItems.Add(CDec(r("PaidAmt")).ToString("N2"))
            li.SubItems.Add(CDec(r("Balance")).ToString("C")) 'Will include the $
            li.SubItems.Add(r("Status").ToString)
            Dim i As Integer
            Dim s As String = i.ToString("C")
            lstAccounts.Add(li)
        Next
        lv.BeginUpdate() 'keeps the control from repaintinng on every addition
        lv.Items.AddRange(lstAccounts.ToArray)
        lv.EndUpdate()
    End Sub

Что ж, спасибо за код, но как мне отобразить результат функции в элементе управления Listview и иметь формат элемента управления [ServiceDate] как короткую дату, [Reading] как число, [DueAmt], [PaidAmt] и [Balance] как Деньги?

Dss 31.05.2018 20:15

Смотрите обновление моего ответа. Если мой ответ был полезен, примите его как ответ, поставив галочку (галочку) слева от ответа.

Mary 01.06.2018 00:09

Спасибо Мэри за твои усилия. Я опробую код и незамедлительно сообщу вам, и, если он сработает, я обязательно проголосую за ваш ответ. А пока я закрываю свою лабораторию, поскольку приближается суббота. Я вернусь сразу же, как только суббота закончится.

Dss 01.06.2018 19:51

Спасибо, Мэри, я просмотрел ваш код и, внимательно проследив за ним, скопировал его следующим образом: функция GetOldAccounts () скопирована на уровень модуля, чтобы я мог повторно использовать ее в любом случае на протяжении всего проекта, процедура FillListView Sub скопирована в вызывающую форму и в рамках процедуры события нажатия кнопки. С сожалением сообщаю вам, что после многократного запуска кода функция не вернула никакого значения, поэтому элемент управления listview не был заполнен. Я не уверен, что мне здесь что-то не хватает: где разместить код или как настроить сам элемент управления listview. Однако я дал на этот ответ че

Dss 04.06.2018 17:22

Проверьте, совпадают ли типы данных в базе данных. ServiceDate хранится как Date или DateTime? Баланс - это число? Попробуйте выполнить запрос в SQL Server Management Studio. Вы можете получить поучительную ошибку. Сразу после If dr.HasRows Then добавьте окно сообщения с надписью "У нас есть строки!" Обычно нет окон сообщений для отладки. Если вы можете установить точку останова и пройти через нее, это будет лучше.

Mary 04.06.2018 20:27

Другие вопросы по теме