Как рассчитать срок годности за 3 месяца до истечения срока годности

0

Мне нужна помощь, как получить 3 месяца до даты истечения срока действия оповещения. Я использовал MySQL.

Try
    Call connection()
    cmd.CommandText = "select * from medicine where expiry_date < date_sub(now(), interval 3 month)"
    dr = cmd.ExecuteReader
    count = 0
    While dr.Read
        count = count + 1
    End While
    If count = 1 Then
        pop.Image = Image.FromFile("E:\asasda.png")
        pop.TitleText = "Notification Alert!!!"
        pop.ContentText = "Medicine at Risk"
        pop.AnimationDuration = 3000
        pop.Popup()
    Else
        pop.Image = Image.FromFile("E:\asasda.png")
        pop.TitleText = "Notification Alert!!!"
        pop.ContentText = "No items for risk"
        pop.AnimationDuration = 3000
        pop.Popup()
    End If
Catch ex As Exception

End Try
  • 0
    Похоже, вы сделали разумную попытку. В чем конкретно заключается проблема?
  • 0
    If count = 1 Then заставляет его сказать "No items for risk" если нет только одного предмета. Это было твоё намерение?
Теги:

2 ответа

1

Я прокомментировал наше Call Connection(). Лучше всего, чтобы ваши соединения были локальными, чтобы вы могли быть уверены, что они закрыты и удалены.
A Using...End Using блок выполнит это, даже если есть ошибка. Также я не вижу, где вы связали соединение с вашей командой. В этом случае ключевое слово call не обязательно. Я предполагаю, что Connection() возвращает соединение, но вы не предоставили переменную для хранения соединения.

Передайте оператор Select и соединение непосредственно в конструктор команды.

Вы использовали все данные, которые вы вернули в цикле. Если вам нужно только лишь граф затем попросить Count и использовать .ExecuteScalar.

Я не вижу смысла в If, потому что часть if идентична части else.

Пустой Catch просто проглатывает ошибки. Плохая идея.

Private Sub OPCode()
    Dim CountReturned As Integer
    Try
        'Call Connection()
        Using cn As New MySqlConnection("Your connection string")
            Using cmd As New MySqlCommand("select Count(*) from medicine where expiry_date < date_sub(now(), interval 3 month);", cn)
                cn.Open()
                CountReturned = CInt(cmd.ExecuteScalar)
            End Using
        End Using
        If CountReturned = 1 Then
            pop.Image = Image.FromFile("E:\asasda.png")
            pop.TitleText = "Notification Alert!!!"
            pop.ContentText = "Medicine at Risk"
            pop.AnimationDuration = 3000
            pop.Popup()
        Else
            pop.Image = Image.FromFile("E:\asasda.png")
            pop.TitleText = "Notification Alert!!!"
            pop.ContentText = "No items for risk"
            pop.AnimationDuration = 3000
            pop.Popup()
        End If
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

Если вы не можете data_sub работать MySql data_sub используйте vb и параметры.

Using cmd As New MySqlCommand("select Count(*) from medicine where expiry_date < @Minus3Months;", cn)
    cmd.Parameters.Add("@Minus3Months", MySqlDbType.DateTime).Value = Now.AddMonths(-3)
  • 0
    Как примечание (для OP), так как есть только одно значение, которое отличается в селекторе условия If . Все это может быть уменьшено до: pop.ContentText = If(CountReturned = 1, "Medicine at Risk", "No items for risk") .
  • 0
    спасибо @Mary .. я ценю твой ответ, но все еще не работает .. возможно, мой запрос к базе данных неправильный .. я использовал текстовый тип вместо типа даты для даты, чтобы сохранить дату истечения срока действия в базе данных
0
cmd.CommandText = "select * from medicine where expiry_date < @threeMonthsAgo"
cmd.parameters.add("@threeMonthsAgo", variableWithYourDate)

Вы можете передать значение из VB, используя параметры.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню