Paolo Tansengco Ответов: 1

Как обновить ежемесячные / годовые отчеты


Ладно, я пытаюсь уже несколько дней, но на самом деле не знаю кода и ищу помощи.

Моя проблема:

Я создаю программу, которая будет собирать и обновлять данные о каждом членском пожертвовании / десятине. Участники жертвуют еженедельно, затем таблица базы данных имеет еженедельный, ежемесячный и годовой столбец. Теперь мне нужно знать, как обновлять ежемесячную и годовую колонку, сохраняя при этом еженедельный отчет. Потому что каждый раз, когда я добавляю новую запись, ежемесячный и годовой столбцы не обновляются.

Код до сих пор:

Private Sub btnAddOffertory_Click(sender As Object, e As EventArgs) Handles btnAddOffertory.Click
        cn.Open()
        Using cmd As New SqlClient.SqlCommand("INSERT INTO tblOffertory(ID, Name, Weekly, Date, Monthly, Annual)VALUES(@ID, @Name, @Weekly, @Date, @Monthly, @Annual)", cn)
            cmd.Parameters.Add(New SqlClient.SqlParameter("@ID", SqlDbType.Int)).Value = DGOList.SelectedRows(0).Cells(0).Value
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Name", SqlDbType.VarChar, 50)).Value = DGOList.SelectedRows(0).Cells(1).Value
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Weekly", SqlDbType.Int)).Value = txtOffertory.Text
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Date", SqlDbType.Date)).Value = dtpOffertory.Text
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Monthly", SqlDbType.Int)).Value = 0
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Annual", SqlDbType.BigInt)).Value = 0
            i = cmd.ExecuteNonQuery
        End Using
        If (i > 0) Then
            Using cmd As New SqlClient.SqlCommand("UPDATE tblOffertory SET Monthly += @Monthly WHERE Date = '" & dtpOffertory.Text & "' AND ID = " & DGOList.SelectedRows(0).Cells(0).Value, cn)
                cmd.Parameters.Add(New SqlClient.SqlParameter("@Monthly", SqlDbType.Int)).Value = txtOffertory.Text
            End Using
        End If
        cn.Close()
        ShowORecord()
        OClear()
    End Sub


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

Я попробовал это

Using cmd As New SqlClient.SqlCommand("UPDATE tblOffertory SET Monthly += @Monthly WHERE Date = '" & dtpOffertory.Text & "' AND ID = " & DGOList.SelectedRows(0).Cells(0).Value, cn)
                cmd.Parameters.Add(New SqlClient.SqlParameter("@Monthly", SqlDbType.Int)).Value = txtOffertory.Text
            End Using

NotPolitcallyCorrect

"ежемесячная и годовая колонка теперь обновляется", - не имеет смысла.
Ежемесячный столбец не обновляется в соответствии с вашим кодом, потому что вы никогда не выполняете команду. Годовая колонка не обновляется, потому что вы даже не пытаетесь ее обновить.
Или это может быть потому, что кто-то воспользовался вашим открытием атаки SQL-инъекции и уничтожил ваши обновления.

Paolo Tansengco

Я имел в виду "не обновляется"

Да, я еще не сделал годовой код обновления, потому что я еще не могу понять ежемесячный.

1 Ответов

Рейтинг:
9

OriginalGriff

Самый простой способ-это ... не делать этого!
Забудьте о столбцах" еженедельно"," ежемесячно "и" ежегодно": сохраните один столбец с датой и столбцом AmountPaid, а также MemberID, который ссылается на участника в качестве внешнего ключа. (Я бы, вероятно, также добавил столбец ID IDENTITY, но это не совсем необходимо).
Затем вы можете использовать запросы для сбора нужной вам информации, когда она вам понадобится:

SELECT MemberID, YEAR(EnterDate) AS [TotYear], SUM(AmountPaid) AS Total FROM [MyTable] GROUP BY MemberID, YEAR(EnterDate)
ORDER BY MemberID, [TotYear] DESC

Вы можете объединить их годовые, месячные и недельные версии с помощью JOIN, чтобы получить единый отчет.


Paolo Tansengco

Должен ли я вручную вводить все элементы таблицы members в новую таблицу или есть более простой способ сделать это?

OriginalGriff

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

Paolo Tansengco

Ладно, попробую. Кстати, что значит " год " слово do в год код(EnterDate)'?

Maciej Los

Полностью согласен!
5ед!

Maciej Los

Возвращает поле год из даты.

OriginalGriff

Если вы не уверены, попробуйте простой google: "Year sql" - он часто приведет вас к MSDN в качестве первого хита:
https://msdn.microsoft.com/en-GB/library/ms186313.aspx

Paolo Tansengco

Спасибо! :Д

OriginalGriff

Пожалуйста!