Сетка данных показывает неправильный вывод в vb6 - PullRequest
1 голос
/ 03 октября 2019

, когда я выбираю ту же дату из месяца 10 (скажем, dtpckr1 = 02-10-2019 и dtpckr2 = 02-10-2019). DataGrid не печатает ничего и показывает, что msgbox не найдена запись, которую я кодирую для убедительности. ..но когда я выбираю дату начала с последнего месяца и даты окончания в этом месяце (скажем, dtpckr1 = 30-09-2019 и dtpckr2 = 02-10-2019), он показывает все данные за месяц 09 и ничего за месяц 10 .. и странно, что когда выбирается дата, которая указана в месяце 09, даже если она одна и та же (скажем, dtpckr1 = 13-09-2019 и dtpckr2 = 13-09-2019 или 22-09-2019), она работает отлично ... так что, пожалуйста,попробуйте помочь мне, сославшись на следующий код ... пока я узнал, что данные, которые я получаю в datagridview, даны по дням (dd), а не по всей дате ... означает, что если я выберу date1 = 31 /09/2019 и date2 = 01/10/2019, тогда он будет показывать данные с даты 01 по 31 только с месяца 09 .... Я также проверил формат даты базы данных и мой ввод, они одинаковы ... в базе данныхтип данных даты "дата / время" и формат "short date ".... если есть какое-то иное решение, то, пожалуйста, скажите мне ... я постараюсь ... моя цель - показать заказы на еду по датам в datagridview и затем рассчитать общую продажу ... я новичок в vb6. ... так что, если вы сможете отредактировать мой код и перепостить его ... это будет здорово ... потому что я хочу представить этот проект к завтрашнему дню ... и это единственное, что беспокоит меня ... спасибо

Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset

Private Sub cmdSearch_Click()

Dim date1 As Date
Dim date2 As Date

If IsNull(DTPicker1.Value And DTPicker2.Value) Then

    MsgBox "You must select date", vbCritical, "Warning"
    Exit Sub
End If
DTPicker1.Value = Format(DTPicker1.Value, "dd-mm-yyyy")
DTPicker2.Value = Format(DTPicker2.Value, "dd-mm-yyyy")
date1 = DTPicker1.Value
date2 = DTPicker2.Value
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\OrderMania\ordermania.mdb;Persist Security Info=False"
rs.CursorLocation = adUseClient

If DTPicker2.Value < DTPicker1.Value Then
MsgBox "End Date Cannot Be Lesser Then Start Date", vbCritical, "Wrong Input"
Exit Sub
Else
Adodc1.RecordSource = "select * from order1 where (date between #" & date1 & "# and #" & DTPicker2.Value & "#)"
Adodc1.Refresh
If Adodc1.Recordset.EOF Then
MsgBox "Please Enter Another Date", vbCritical, "No Record Found"
Else
Adodc1.Caption = Adodc1.RecordSource
End If
End If

con.Close

Call sale

End Sub


Public Sub sale()
Dim i As Integer
Dim Tot, gst, gtot As Double

For i = 0 To Adodc1.Recordset.RecordCount - 1
    Tot = Tot + CDbl(DataGrid1.Columns(5).Text)
    Adodc1.Recordset.MoveNext

Next i

Text1.Text = Tot
gst = Tot * 0.05
Text2.Text = gst
gtot = Tot + gst
Text3.Text = gtot
End Sub

1 Ответ

1 голос
/ 03 октября 2019

Попробуйте инвертировать месяц и день в предложении между:

..."between #" & Format(date1, "mm-dd-yyyy") & "# and #" & Format(date2, "mm-dd-yyyy")) & "#)"

Но конкатенация строки SQL со значениями переменных считается плохой практикой, как напоминает @GSerg, поскольку может произойти SQL-инъекция вредоносного кода. Вы должны работать с параметрами. Если вы хотите изучить это, вот отправная точка: https://docs.microsoft.com/fr-fr/office/client-developer/access/desktop-database-reference/createparameter-method-ado

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